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-stackFull-stackFull-stackFull-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 ClientPublic

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

    JavaScript 1 3

  2. WS-Server WS-ServerPublic

    websocket server for real-time price

    JavaScript 1 1

  3. Server ServerPublic

    JavaScript 1

  4. .github .githubPublic

Repositories

Showing 4 of 4 repositories

Top languages

Loading…

Most used topics

Loading…