Skip to content
@Flow-PDA

Flow-PDA

Flow



logo-image

함께, 쉽게, 재밌게

함께하는 모임 투자, Flow입니다!




logo-image

Service Introduction


🗣️ “혼자 투자를 시작하기 막막해요“
🗣️ “친구들과 모은 돈을 그냥 놔두기 아까워요“

⬇️⬇️⬇️

💡 모임 투자를 지인들과 함께 하며 쉽게 투자를 배워보는 것은 어떨까?
💡 모여있는 돈을 투자에 활용해 부가적인 수익을 창출해보는 것은 어떨까?

➡️ 모임투자 웹서비스, Flow!

🔨 플로우를 통해

  • 유저는 지인들에게 투자를 배우며 투자 접근성을 향상할 수 있어요!
  • 투자 시 모든 멤버의 동의가 필요하기 때문에 안정적인 투자가 가능해요!
  • 정적 자산 투자를 통해 부가적인 수익을 창출할 수 있어요!
  • 수익 창출이라는 공동의 목표를 향해 협력하기 때문에 모임원 간 유대감을 강화할 수 있어요!




logo-image

Project Architecture

architecture-image



logo-image

DB Modeling

DBmodeling-image



logo-image

Main Features


기능명 기능설명
모임 통장 만들기 모임명 설정 및 모임 통장 계좌번호를 입력하여 모임통장을 생성할 수 있음. 모임 통장을 생성한 유저는 모임 통장의 모임장으로 등록됨.
모임원 초대하기 모든 모임멤버는 카카오톡으로 모임원을 초대할 수 있음.
모임별 수익률 조회하기 모든 모임멤버는 모임 통장의 수익률을 조회할 수 있음.
모임 목표 설정하기 모임멤버는 목임 목적, 목표 금액, 목표 기간을 설정할 수 있음.
모임 멤버 내보내기 모임장은 모임 멤버를 모임에서 내보낼 수 있음.




기능명 기능설명
관심 종목 등록하기 모임멤버는 주식 종목을 승인 중인 관심 종목으로 등록할 수 있음.
관심 종목 투표하기 모임멤버는 승인중인 관심 주식 종목을 투표(승인/거절) 할 수 있음. 모든 모임원이 해당 종목을 승인할 시 승인 완료됨.
관심 종목 조회하기 승인중인 관심종목과, 승인된 관심종목을 조회할 수 있음.
관심 종목 삭제하기 모임멤버는 승인된 관심 주식은 삭제할 수 있음. 단, 보유중인 주식은 관심 종목에서 삭제할 수 없음




기능명 기능설명
주식 투자하기 모임 멤버는 관심 종목으로 승인된 주식 종목을 매수, 매도 할 수 있음.
주식 종목 상세정보 조회하기 1. 각 주식 종목의 기간별 차트를 조회할 수 있음.
2. 각 주식 종목의 실시간 호가를 조회할 수 있음.
3. 각 주식 종목의 관련 최신 뉴스를 조회할 수 있음.
주요 지수 조회하기 실시간 코스피, 코스닥, 나스닥 지수를 조회할 수 있음.
실시간 주식 조회하기 실시간 거래량, 주가 상승률, 외국인 순매수, 기관 순매수 별 주식 종목을 조회할 수 있음.
거래 내역 조회하기 모임 멤버는 모임 통장 내 모든 매수, 매도 내역을 조회할 수 있음.
보유 종목 상세 정보 조회하기 모임 멤버는 보유하고 있는 각 종목의 평단가, 보유 수량, 평가 금액을 조회 할 수 있음.




기능명 기능설명
예수금 이체하기 모임장은 모임통장 내 보유 중인 예수금을 이체할 수 있음.
이체 내역 조회하기 모임 멤버는 모임통장에서 이체된 모든 내역을 조회할 수 있음.




logo-image

Team Member


김민우 이선영 정찬진 한다현
@bkkmw @godltjsdud @chanjin1998 @ekgus9701
Full-stack Full-stack Full-stack Full-stack
✔️ 웹 소켓 통신
✔️ 차트 (FE)
✔️ 유저 (FE, BE)
✔️ 배포 및 CI/CD
✔️ 관심주식 (FE)
✔️ 주식 거래 (FE, BE)
✔️ 이체 (BE)
✔️ 알림 (BE)
✔️ 알림 (FE)
✔️ 모임 (FE, BE)
✔️ 주식 정보 (FE, BE)
✔️ 뉴스 (FE, BE)
✔️ 이체 (FE)
✔️ 호가 (FE)
✔️ 주식 거래 (FE, BE)
✔️ 관심 주식(BE)




logo-image

Trouble Shooting

문제 1

상황

실시간 체결가 및 호가 정보를 위한 한국투자증권 websocket API를 사용

문제

체결가/호가 모두 포함하여 하나의 API key 당 40건의 데이터만 구독 가능하여, 많은 종목의 정보를 제공할 수 없음.

해결

해결 방법

다수의 API key를 활용하고, 다수의 client의 중복된 요청을 처리하여 보다 많은 종목의 정보를 제공하고자 client로 부터의 요청 목록과 한국투자증권 websocket API로의 구독 정보 및 다수의 websocket connection을 관리하기 위한 module을 개발. Client와의 통신을 담당하는 publisher, 한국투자증권 websocket 통신을 담당하는 subscriber, client로 부터의 요청 목록과 subscriber를 관리하는 subscriberManager 세 모듈을 구성하여 다수의 API를 활용하여 가능한 많은 종목의 정보를 제공하고자 함.

문제 2

상황

실시간 데이터 제공을 위한 websocket server 개발 중, client와 통신을 담당하는 모듈(publisher), client로 부터의 요청 목록과 한국투자증권 websocket 구독 정보를 관리하는 모듈(subscriberManager), 한국투자증권 websocket connection 모듈(subscriber) 개발

문제

세 모듈간 통신 중 순환참조 발생

해결

해결 방법

Websocket 통신 중 발생하는 event를 Javascript의 EventEmitter를 활용하여 요청/구독 정보를 관리하는 module로 전달하여 모듈 간 순환참조를 해결





logo-image

Folder Structure


폴더 구조
📂 frontend
📦src
 ┣ 📂assets
 ┣ 📂components //공통 컴포넌트
 ┃ ┣ 📂common
 ┃ ┃ ┣ 📂button
 ┃ ┃ ┃ ┣ 📜InterestButton.jsx
 ┃ ┃ ┃ ┣ 📜PrimaryButton.jsx
 ┃ ┃ ┃ ┗ 📜TradeButton.jsx
 ┃ ┃ ┣ 📂datepicker
 ┃ ┃ ┃ ┣ 📜Calendar.jsx
 ┃ ┃ ┃ ┗ 📜CalendarCustom.scss
 ┃ ┃ ┣ 📂modal
 ┃ ┃ ┃ ┣ 📜ApproveInterestModal.jsx
 ┃ ┃ ┃ ┣ 📜PrimaryModal.jsx
 ┃ ┃ ┃ ┗ 📜StockAskingModal.jsx
 ┃ ┃ ┣ 📂nav
 ┃ ┃ ┃ ┣ 📜TopNavigationBar.css
 ┃ ┃ ┃ ┗ 📜TopNavigationBar.jsx
 ┃ ┃ ┣ 📂search
 ┃ ┃ ┃ ┗ 📜Search.jsx
 ┃ ┃ ┗ 📂swiper
 ┃ ┃ ┃ ┣ 📜Swiper.css
 ┃ ┃ ┃ ┗ 📜Swiper.jsx
 ┃ ┗ 📂line
 ┃ ┃ ┗ 📜HorizontalLine.jsx
 ┣ 📂lib
 ┃ ┣ 📂apis
 ┃ ┃ ┣ 📜base.jsx
 ┃ ┃ ┣ 📜hankookApi.jsx
 ┃ ┃ ┣ 📜interest.jsx
 ┃ ┃ ┣ 📜notification.jsx
 ┃ ┃ ┣ 📜party.jsx
 ┃ ┃ ┣ 📜shinhanApi.jsx
 ┃ ┃ ┣ 📜stock.jsx
 ┃ ┃ ┣ 📜transfer.jsx
 ┃ ┃ ┗ 📜userApi.js
 ┃ ┗ 📂contexts
 ┃ ┃ ┗ 📜AuthContext.jsx
 ┣ 📂routers
 ┃ ┗ 📜mainRouter.jsx
 ┣ 📂routes
 ┃ ┣ 📂interest // 관심주식
 ┃ ┃ ┣ 📂intereststock
 ┃ ┃ ┃ ┣ 📂askingPrice // 호가
 ┃ ┃ ┃ ┃ ┣ 📜InterestStockDetailAskingPrice.css
 ┃ ┃ ┃ ┃ ┣ 📜InterestStockDetailAskingPricePage.jsx
 ┃ ┃ ┃ ┃ ┣ 📜SampleAskingPriceChart.css
 ┃ ┃ ┃ ┃ ┗ 📜SampleAskingPriceChart.jsx
 ┃ ┃ ┃ ┣ 📂chart // 차트
 ┃ ┃ ┃ ┃ ┣ 📜CandleChart.jsx
 ┃ ┃ ┃ ┃ ┣ 📜InterestStockDetailChartPage.css
 ┃ ┃ ┃ ┃ ┣ 📜InterestStockDetailChartPage.jsx
 ┃ ┃ ┃ ┃ ┗ 📜LineChart.jsx
 ┃ ┃ ┃ ┣ 📂news // 뉴스
 ┃ ┃ ┃ ┃ ┣ 📜InterestStockDetailNewsPage.css
 ┃ ┃ ┃ ┃ ┣ 📜InterestStockDetailNewsPage.jsx
 ┃ ┃ ┃ ┃ ┣ 📜News.css
 ┃ ┃ ┃ ┃ ┗ 📜News.jsx
 ┃ ┃ ┃ ┣ 📜TradeStockPage.css
 ┃ ┃ ┃ ┗ 📜TradeStockPage.jsx // 주식 거래
 ┃ ┃ ┗ 📜InterestPending.jsx
 ┃ ┣ 📂invest // 투자 정보
 ┃ ┃ ┣ 📜LiveStockPage.css
 ┃ ┃ ┣ 📜LiveStockPage.jsx
 ┃ ┃ ┣ 📜MarketStockpage.css
 ┃ ┃ ┣ 📜MarketStockpage.jsx
 ┃ ┃ ┣ 📜RisingStockPage.css
 ┃ ┃ ┣ 📜RisingStockPage.jsx
 ┃ ┃ ┣ 📜SearchStockPage.css
 ┃ ┃ ┣ 📜SearchStockPage.jsx
 ┃ ┃ ┣ 📜StrategyStockPage.css
 ┃ ┃ ┗ 📜StrategyStockPage.jsx
 ┃ ┣ 📂login // 로그인
 ┃ ┃ ┣ 📜LoginPage.css
 ┃ ┃ ┗ 📜LoginPage.jsx
 ┃ ┣ 📂notification // 알림
 ┃ ┃ ┣ 📜Notification.css
 ┃ ┃ ┗ 📜Notification.jsx
 ┃ ┣ 📂party //모임
 ┃ ┃ ┣ 📜MyPartyPage.css
 ┃ ┃ ┣ 📜MyPartyPage.jsx
 ┃ ┃ ┣ 📜MyPartyTransactionDetail.css
 ┃ ┃ ┣ 📜MyPartyTransactionDetail.jsx
 ┃ ┃ ┣ 📜PartyCreatePage.css
 ┃ ┃ ┣ 📜PartyCreatePage.jsx
 ┃ ┃ ┣ 📜PartyInfoPage.css
 ┃ ┃ ┣ 📜PartyInfoPage.jsx
 ┃ ┃ ┣ 📜PartyInvitePage.css
 ┃ ┃ ┣ 📜PartyInvitePage.jsx
 ┃ ┃ ┣ 📜PartyPage.css
 ┃ ┃ ┣ 📜PartyPage.jsx
 ┃ ┃ ┣ 📜SetDataPage.css
 ┃ ┃ ┣ 📜SetDatePage.jsx
 ┃ ┃ ┣ 📜SetGoalPage.css
 ┃ ┃ ┣ 📜SetGoalPage.jsx
 ┃ ┃ ┣ 📜SetPricePage.css
 ┃ ┃ ┗ 📜SetPricePage.jsx
 ┃ ┣ 📂signup // 가입
 ┃ ┃ ┣ 📜SignupPage.css
 ┃ ┃ ┗ 📜SignupPage.jsx
 ┃ ┣ 📂transfer // 이체
 ┃ ┃ ┣ 📜TransferDetailAccountNumPage.css
 ┃ ┃ ┣ 📜TransferDetailAccountNumPage.jsx
 ┃ ┃ ┣ 📜TransferDetailConfirmPage.css
 ┃ ┃ ┣ 📜TransferDetailConfirmPage.jsx
 ┃ ┃ ┣ 📜TransferDetailPricePage.css
 ┃ ┃ ┣ 📜TransferDetailPricePage.jsx
 ┃ ┃ ┣ 📜TransferPage.css
 ┃ ┃ ┗ 📜TransferPage.jsx
 ┃ ┣ 📜Layout.jsx
 ┃ ┣ 📜MainPage.css
 ┃ ┣ 📜MainPage.jsx 
 ┃ ┗ 📜ProtectedLayout.jsx
 ┣ 📂store
 ┃ ┣ 📂reducers
 ┃ ┃ ┣ 📜partyReducer.js
 ┃ ┃ ┗ 📜userReducer.js
 ┃ ┣ 📜index.js
 ┃ ┗ 📜store.js
 ┣ 📜App.css
 ┣ 📜App.jsx
 ┣ 📜index.css
 ┗ 📜main.jsx

📂 backend
📦Server
 ┣ 📂app
 ┃ ┗ 📂config
 ┃ ┃ ┣ 📜jwt.config.js
 ┃ ┃ ┗ 📜mysql.config.js
 ┣ 📂bin
 ┃ ┗ 📜www
 ┣ 📂data
 ┃ ┗ 📜stock_data.csv
 ┣ 📂deploy
 ┃ ┗ 📜README.md
 ┣ 📂init_db
 ┃ ┗ 📜README.md
 ┣ 📂middlewares //유저 관련 middleware
 ┃ ┣ 📜authenticator.js
 ┃ ┗ 📜validator.js
 ┣ 📂models // DB 모델
 ┃ ┣ 📜interestStock.js
 ┃ ┣ 📜notification.js
 ┃ ┣ 📜participant.js
 ┃ ┣ 📜party.js
 ┃ ┣ 📜partyMember.js
 ┃ ┣ 📜stock.js
 ┃ ┣ 📜transactionDetail.js
 ┃ ┣ 📜transferDetail.js
 ┃ ┗ 📜user.js
 ┣ 📂modules
 ┃ ┣ 📜db.js
 ┃ ┣ 📜index.js
 ┃ ┣ 📜jwt.js
 ┃ ┣ 📜kisApi.js
 ┃ ┗ 📜scheduler.js
 ┣ 📂public
 ┃ ┗ 📂stylesheets
 ┃ ┃ ┗ 📜style.css
 ┣ 📂routes //라우터 관리
 ┃ ┣ 📜index.js
 ┃ ┣ 📜interestStock.js
 ┃ ┣ 📜notices.js
 ┃ ┣ 📜parties.js
 ┃ ┣ 📜points.js
 ┃ ┣ 📜stocks.js
 ┃ ┣ 📜transfer.js
 ┃ ┗ 📜users.js
 ┣ 📂scripts
 ┃ ┗ 📜stockData.js
 ┣ 📂services //서비스 관리
 ┃ ┣ 📜interestStockService.js
 ┃ ┣ 📜inviteService.js
 ┃ ┣ 📜noticeService.js
 ┃ ┣ 📜partyService.js
 ┃ ┣ 📜stockService.js
 ┃ ┣ 📜transferService.js
 ┃ ┗ 📜userService.js
 ┣ 📂utils
 ┃ ┣ 📜naverStockApi.js
 ┃ ┗ 📜refreshToken.js
 ┣ 📜.dockerignore
 ┣ 📜.gitignore
 ┣ 📜Dockerfile.express
 ┣ 📜Jenkinsfile
 ┣ 📜README.md
 ┣ 📜app.js
 ┣ 📜docker-compose-express.yml
 ┣ 📜docker-compose.yml
 ┗ 📜package.json




logo-image

Appendix

시연 영상
발표자료

Popular repositories Loading

  1. Client Client Public

    함께하는 투자, 모임투자 웹 서비스 FLOW

    JavaScript 1 2

  2. WS-Server WS-Server Public

    websocket server for real-time price

    JavaScript 1

  3. Server Server Public

    JavaScript

  4. .github .github Public

Repositories

Showing 4 of 4 repositories
  • .github Public
    Flow-PDA/.github’s past year of commit activity
    0 0 0 0 Updated May 3, 2024
  • Client Public

    함께하는 투자, 모임투자 웹 서비스 FLOW

    Flow-PDA/Client’s past year of commit activity
    JavaScript 1 2 6 0 Updated May 3, 2024
  • Server Public
    Flow-PDA/Server’s past year of commit activity
    JavaScript 0 0 3 0 Updated Apr 2, 2024
  • WS-Server Public

    websocket server for real-time price

    Flow-PDA/WS-Server’s past year of commit activity
    JavaScript 1 0 2 0 Updated Apr 1, 2024

Top languages

Loading…

Most used topics

Loading…