STOCKEY.v2
주식과 관련된 뉴스 기사의 키워드를 분석하여 주가 추이를 분석할 수 있는 웹 서비스
SSAFY 8기 2학기 자율 프로젝트
📆 프로젝트 기간
2023.04.10 ~ 2023.05.19 (6주)
📑 프로젝트 소개
주식을 처음 시작할 때 어떤 종목을 사는 것이 좋은 선택일지 알 수 없다. 정보를 잘 알지 못하고 매수를 하게되면 수익을 보장할 수 없다. 주식 관련 뉴스를 보고 이 종목을 매수해도 좋을지 판단이 애매하다면 STOCKEY가 필요하다.
STOCKEY는 종목, 산업, 또는 경제 일반의 뉴스 기사를 분석하여 추출된 키워드 정보를 제공하여 주가/산업 규모 차트 분석 및 이해 기능을 제공한다.
STOCKEY는 주식과 관련된 뉴스 기사들을 크롤링하여 키워드를 뽑아내고 키워드와 주가의 상관관계를 확인할 수 있다. MSA 아키텍처가 적용된 STOCKEY.v2는 모의투자와 실험실 기능이 추가된다. 사용자들은 뉴스 키워드와 주가 종목의 상관관계 정보를 확인하고, 한 시간 전의 실제 주식 장 가격으로 모의 투자 경험을 할 수 있다.
실험실 기능에서는 사용자가 원하는 종목 하나와 키워드 3가지의 연관성을 확인할 수 있다. 종목 가격별 각 키워드 빈도수를 확인할 수 있다.
⚙️ 프로젝트 기능 소개
- 종목, 산업, 또는 경제 일반의 뉴스 기사를 분석하여 추출된 키워드 정보를 제공하여 주가/산업 규모 차트 분석 및 이해
- 뉴스 데이터에서 핵심 키워드, 키프레이즈를 추출하여 제공
- 키워드 관련 뉴스 목록 제공
- 주가/산업 규모 차트에서 유저가 직접 분석하고 싶은 기간을 설정 가능
- 분석하고 싶은 뉴스 범위를 종목/산업/경제 일반 중 선택 가능
- 피어슨 상관계수 분석을 통해 주가/산업 규모 차트와 키워드 언급량 그래프의 상관관계 분석
- 시가 총액 기준 상위 91개 종목과 22개 산업의 정보 제공
- 주가(산업의 경우 시가총액 합) 추이 그래프, 간략한 개요 제공
- 관련 키워드 정보를 담은 차트 제공
- 특정 키워드 클릭시 해당 키워드의 등장 빈도 그래프, 종목(산업)과의 상관계수, 관련 기사 목록이 담긴 키워드 패널 제공
- 종목, 산업, 키워드별 관심 등록/해제 기능
- 관심 등록한 목록을 북마크 페이지에서 조회 가능
- OAuth 2.0을 사용해 카카오 소셜 로그인 구현
- JWT Access Token/Refresh Token을 이용한 로그인 인증 방식 적용
- 닉네임 중복 확인
- 주식 종목과 키워드의 상관관계를 기반으로 모의 투자 경험 제공
- 서비스에서 제공하는 91개 종목에 모의투자
- 거래 가이드, 인기 종목, 주문서 작성 기능
- 특정 시각 거래 내역 확인 기능
- 주문 내역 및 투자 성향 확인
- 보유 종목에 대한 정보 확인
- 실험실 기능
- 뉴스 키워드 조회
- 주식 종목 조회
- 키워드 3개와 종목 간의 연관관계를 보여주는 그래프 제공
🛠️ 서비스에 적용된 기술
- keyBERT 모델을 이용하여 뉴스에서 핵심 키워드 추출
- 어느 뉴스에서나 사용되는 범용적인 단어, 종목명에 포함되는 단어 등을 불용어로 설정하여 분석 효과 상승
- 특정 키워드와 관련된 뉴스들 중에서 비슷한 내용을 가진 뉴스들끼리 그룹화
- DBSCAN 모델 사용 (밀도 기반 클러스터링)
- 코사인 유사도로 유사성 판단
- 생성한 뉴스 그룹 중 그룹 사이즈가 일정 수준 이상인 그룹만 선별
- 각 그룹마다 내용을 대표할 수 있는 키프레이즈를 한 개씩 제공(keyBERT 모델 이용)
- 키워드 관련 분석 제공
- 분석 기간 내의 전체 뉴스 데이터 중 해당 키워드와 관련된 뉴스가 얼마나 있었는지를 언급량 그래프로 제공
- 키워드 언급량 그래프와 주가/산업 규모 추이 그래프의 상관관계를 피어슨 상관계수 분석을 통해 계산하여 제공
- 상호작용을 중시한 차트 디자인
- 마우스 호버, 클릭, 드래그 등 유저의 동작과 상호작용할 수 있는 차트 설계
- 마우스 호버 시 툴팁으로 주가/산업 규모 등에 대한 상세 정보 제공
- 키워드 차트 클릭시 키워드에 해당하는 키프레이즈 표시
- 산업별 규모 차트 클릭시 해당 산업 내 시가총액 상위 5 종목 출력
- 주가 차트에서 드래그 또는 네비게이터 조절을 통해 키워드 분석 기간 설정 가능
- Spring Cloud를 이용한 MSA 아키텍처 구성
- 모놀리식 아키텍처를 MSA 아키텍처로 전환
- 서비스 확장성과 작은 단위의 배포를 위한 MSA 아키텍처 적용
- Spring Config Server와 RabbitMQ를 이용한 분산 시스템에서 설정 정보 외부 관리
- Kafka를 이용한 메세징 큐로 서버가 동시에 처리할 수 있는 요청 수 이상의 요청을 해결
- 특정 종목의 뉴스를 클러스터링하여 키프레이즈를 제공하는 서비스에서 Django 서버가 수용할 수 있는 요청인 2개 이상의 요청이 들어오면 서버가 다운되는 현상 발생
- 클라이언트로부터 받은 요청과 라운드 로빈 방식으로 처리할 데이터 분석 서버의 정보를 kafka topic에 추가
- 장고서버에서 동시에 두개의 요청을 처리할 수 있고, 장고 서버를 두개 두었으므로 토픽의 파티션은 4개로 정하고, 컨슈머 역시 네개로 설정
- 컨슈머에서 장고 서버로 요청할 때는 RestTemplate을 활용하여 blocking 방식으로 통신하여 장고서버 하나당 두개의 요청까지만 처리할 수 있도록 설정 (컨슈머는 장고 서버에서 요청이 오기전까지 block)
- 장고 서버로부터 온 응답을 스프링부트로 가져온 다음 Hashmap으로 만든 Response storage에 <userId, resultDto> 형태로 적재
- 클라이언트는 지속적으로 polling 과정을 통해 Response storage를 조회하여 결과가 있다면 웹 브라우저에 결과 표현
- Docker swarm 클러스터를 구축해 인스턴스들을 하나의 도커 네트워크로 묶어서 서비스 운영
- 각각의 도커 컨테이너들은 Jenkins에 의해 새로운 코드가 머지 되면 각 인스턴스의 배포 스크립트가 실행되어 재배포
- Jenkins가 설치되어 있는 인스턴스와 다른 두개의 인스턴스 아키텍처가 달라 인스턴스에 서비스별 배포 스크립트 작성하여 배포 자동화 구성 (x86 linux와 arm linux)
기술 스택
TYPE | SKILL | VERSION |
---|---|---|
LANGUAGES | Java | 11, 17 |
Python | 3.9 | |
Typescript | ES6 | |
FRAMEWORK | Sprint boot | 2.7.11 |
Spring Data JPA | ||
Spring Cloud | ||
Map Struct | ||
React | 18 | |
Django | ||
DATABASE | Mysql | 8.0 |
Redis | ||
INFRA | AWS EC2 | ubuntu(x86, arm) |
Jenkins | ||
Docker | ||
Nginx | ||
Kafka | ||
RabbitMQ |
🏛️ 서비스 아키텍처
📺 페이지 구성 설명
로그인 페이지
OAuth2.0을 사용해 카카오 소셜 로그인이 가능하다
로그인 전 후 페이지
- 로그인 전 좌측에 로그인 버튼을 통해 로그인 가능
- 로그인을 하게되면 좌측에 닉네임과 프로필 사진 확인 가능
주식 종목 관련 페이지 및 산업 정보 페이지
- 주식 종목 검색 탭에서 주식 종목 검색 가능
- 주식 종목 탭에서 종목 관련 뉴스 키워드 확인 가능
- 주식 종목 상세 정보 확인 가능
- 종목에 따른 관련 뉴스 키워드 확인 가능
- 우측에서 조목과 키워드의 상관관계 지수 확인 가능
- 우측 아래에서 키워드가 포함된 기사 확인 가능
- 산업을 선택하여 기간에 따른 키워드 분석 가능
- 우측에 산업 내 상위 시가 총액 종목 확인
- 서비스 내 전체 산업별 규모 확인 가능
키워드 검색
- 사용자가 원하는 키워드 검색 가능
실험실 페이지
- 사용자가 원하는 주식 종목 검색
- 사용자가 원하는 키워드 3개 검색
- 선택한 종목과 키워드들의 연관성을 확인할 수 있는 그래프 확인 가능
모의 투자 종목 매수, 매도 페이지
- 모의투자에서 종목 선택 후 구매할 수량 선택
- 매 정각에 매수와 매도 거래 가능
모의투자 정보 페이지
- 사용자는 모의투자한 종목 정보를 확인 가능
- 총 자산과 종목별 자산 현황 확인 가능
- 정각에 매수, 매도 거래가 완료되면 우측에 자물쇠 아이콘으로 변경
- 정각에 매수, 매도 된 후 이전 거래의 영수증을 확인
거래 정보 관련 페이지
- 모의투자가 진행중인 현황을 확인 가능
- 다음 거래 체결까지 남은 시간을 확인 가능
- 서비스 이용자들의 모의투자 랭킹 현황 확인 가능
- 모의투자에 참여하기 위한 간단한 가이드 확인 가능
- 모의투자에 참여한 서비스 이용자들의 랭킹 확인
STOCKEY.v2 Member
포지션 | 이름 | 역할 |
---|---|---|
FE | 김경희 | 모의투자 서비스 개발 기존 코드 리팩토링 피그마 설계 CSS 애니메이션 개발 |
FE | 류하은 | 실험실 페이지 개발 드래그 앤 드롭 구현 CSS 애니메이션 개발 |
FE | 조현철 | 테스트 환경 구성 알림 기능 개발 CSS 애니메이션 개발 |
BE | 공진호 | MSA 구조 설계 및 구축 모의투자 API 개발 |
BE | 양준모 | Kafka 클러스터 구축 및 활용 모의투자 API 구현 |
BE | 이상원 | 팀장 MSA 구조 설계 및 구축 Jenkins 배포 자동화 구축 실험실 API 개발 |