Skip to content

HH99-StockHub/BackEnd

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

124 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

[Stock Hub]

KakaoTalk_20220729_160912463

📢 프로젝트 소개

Stock Hub는 내가 선택한 종목에 대한 매수 의견을 공유하는 장소입니다.

다른 사용자들로부터 게시글에 대한 평가를 받는 것은 물론, 게시글 작성 시점부터의 수익률도 보여줘요!

사고 싶은 종목이 있는데, 내 생각이 맞는지 확신이 없다면 Stock Hub의 고수들에게 검증을 받아보시죠!

숨어있던 방구석 애널리스트들이 마음껏 목소리를 내는 그날까지 화이팅입니다!

📆 프로젝트 기간

2022/06/24 ~ 2022/08/05
베타 서비스 배포 2022/07/29

팀원소개

Name GitHub / Contact Position
Frontend Github Link https://github.com/HH99-StockHub/FrontEnd
박태형VL https://github.com/bigtae1007 FE / React
정신영 https://github.com/sinyoung12 FE / React
Backend Github Link https://github.com/HH99-StockHub/BackEnd
조한울L https://github.com/gaius365 BE / Spring
문준호 https://github.com/mjoonho BE / Spring
주 희 https://github.com/Joo-hui BE / Spring
Designer Designer
이은지

🚀 스택

🔧 툴

🖥 서버

⚙ 주요 기능

  • 게시글 작성/삭제: KOSPI/KOSDAQ 상장 주식을 한 가지 선택하여 그 주식에 대한 매수 의견을 게시

  • 찬반 투표: 타인의 게시글에 대해 찬성/반대의 투표를 행사 또는 수정행사 가능

  • 댓글 작성/삭제

  • 수익률 기록: 게시글이 작성 시점부터 게시글 조회 시점까지의 수익률을 표시

  • 기사 표시: 게시글 해당 종목명으로 검색했을 때 나오는 네이버 기사를 표시

  • 모아보기: 본인 및 타 유저의 게시글을 모아보기

  • 게시글 검색 : 해당 키워드가 들어간 게시글 검색 기능 ( 띄어쓰기로 중복 검색어 입력 가능 )

  • 인기글 게시판 등록: 1) 3표 이상의 찬성 표를 획득 + 2) 2배수 이상의 찬성/반대 비율 달성

  • 수익왕 게시판 등록: 5% 이상의 수익률 달성

  • 목표수익률: 게시글 작성 시 목표수익률 설정 (+10%, +20%, + 30%, +50%, +100%, +150%, +200%)

  • 타임 리미트: 수익률 기록을 일정 기간 후에 멈추는 기능 (2주, 1개월, 3개월, 6개월, 1년, 2년, 3년)

  • 목표 수익률: 게시글 작성 시 목표수익률 설정 (+10%, +20%, + 30%, +50%, +100%, +150%, +200%)

  • 메인 배너: 종합 주가 지수 정보를 배너에 흐르는 형태로 게시

  • 주가 차트: 게시글 해당 종목의 1년치 선차트, 일봉차트 표시

  • 랭크 시스템: 게시글/댓글 작성 실적과 인기글 달성 업적을 점수화 해서 랭크 시스템을 적용 (신입 0점 - 초보 10점 - 중수 100점 - 고수 200점 - 지존 500점 / 게시글 작성 +30점, 댓글 작성 +5점, 인기글 달성 +50점)

  • 알림 기능: 인기글/수익왕 달성, 댓글, 찬반투표 등에 대한 알림

  • 채팅방: 로그인한 유저들끼리 토론할 수 있는 채팅방

    🎬 배포

    https://stockhub.co.kr/

    📽 시연 영상

    https://www.youtube.com/watch?v=44gPimI_pqI

    📋 서비스 아키텍쳐

    image

    🛠 기술적 의사결정

적용 기술 기술 도입배경
MongoDB 증권 API 연결을 위해 Python을 실행하는 별도의 서버 환경을 구축했는데, 다량의 증권 데이터를 딕셔너리 형태로 저장하는 데에는 NoSQL인 MongoDB를 사용해서 Spring 서버에 연결하고자 했습니다.
MySQL Spring에서 구현하는 메인 로직에는 1대N 관계가 존재하여 관계형 DB인 MySQL을 사용했습니다.
Nginx HTTPS 연결을 위해 리버스 프록시를 수행해줄 웹서버가 필요했고, 추후 무중단 배포를 염두에 두면 Nginx를 사용하는 것이 좋다고 생각했습니다.
Web Socket 사용자들 간의 원활한 소통을 위해 실시간 알림과 전체 채팅방 기능을 제공하고자 했습니다.
Python 키움증권 api와 yahoo finance를 유연하게 사용하기 위해 사용했습니다.

⚡트러블 슈팅

-[BackEnd] 추천/비추천 투표 비정상 작동

`문제 상황`

하나의 게시글을 놓고 동시에 여러 명이서 “추천"과 “비추천" 투표를 계속 눌렀을 때 가끔 추천 수나 비추천 수가 “-1” 등 
나올 수 없는 숫자가 나오는 상황이 벌어졌습니다. 

`문제 원인`

추천/비추천 투표 로직상 게시글을 “articleRepository”에서 불러온 후 일련의 테스트 과정을 조건문으로 거치고 
“article.setVoteUpCount(article.getVoteUpCount() + 1)”의 방식으로 추천 수를 업데이트 했습니다. 그런데 1번 사용자의 로직이 다 돌기 전에 
2번 사용자가 투표를 하게 되면 오류가 발생하는 것이었습니다.

`해결 방안`

1. Message Queue를 적용하여 짧은 순간에 들어오는 요청도 순차적으로 처리하는 방안 → 공부 중
2. “voteUpCount”를 매뉴얼로 +1, -1 처리하지 않고 “voteUpRepository”에서 관련 투표 수를 카운트해서 set하는 방안 → 채택 예정

-[BackEnd] 검색기능 개선

문제 상황

게시글의 양이 증가하고 검색결과의 연관성 검사 코드가 추가됨에 따라 성능 개선의 필요성이 생겼습니다. 

`문제 원인`

1. 검색결과 연관성 검사 및 정렬에 메서드를 반복적으로 호출하는 반복문 사용과 중복 게시글 제거 전 반환 형태로 변환중
(검색결과에서 제외할 항목에도 작업 수행중)
2. 검색결과 중복 게시글 제거에 메서드를 반복적으로 호출하는 중첩 반복문 사용중

`해결 방안`

1. 코드의 구조와 순서를 조율하여 연관성 우선순위대로 반환 리스트에 저장함
2. stream distinct를 통해 중복 게시글 제거
연관성 검사 과정에서의 지연을 예방할 방안 모색중

🧾 API

API 설계 : https://www.notion.so/be889f10852c4aed91ba2bd00b5c4f20?v=42e0adb20f9147648addf40aad7e0301

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors