Skip to content

nowgnas/STOCKEY

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

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

🏛️ 서비스 아키텍처

Image_Pasted_at_2023-5-26_14-31

📺 페이지 구성 설명

로그인 페이지

login.png

OAuth2.0을 사용해 카카오 소셜 로그인이 가능하다

로그인 전 후 페이지

login_main

  • 로그인 전 좌측에 로그인 버튼을 통해 로그인 가능
  • 로그인을 하게되면 좌측에 닉네임과 프로필 사진 확인 가능

주식 종목 관련 페이지 및 산업 정보 페이지

find_stock_industry

  • 주식 종목 검색 탭에서 주식 종목 검색 가능
  • 주식 종목 탭에서 종목 관련 뉴스 키워드 확인 가능

stock1

  • 주식 종목 상세 정보 확인 가능
  • 종목에 따른 관련 뉴스 키워드 확인 가능
  • 우측에서 조목과 키워드의 상관관계 지수 확인 가능
  • 우측 아래에서 키워드가 포함된 기사 확인 가능

industry1

  • 산업을 선택하여 기간에 따른 키워드 분석 가능
  • 우측에 산업 내 상위 시가 총액 종목 확인
  • 서비스 내 전체 산업별 규모 확인 가능

키워드 검색

keyword.png

  • 사용자가 원하는 키워드 검색 가능

실험실 페이지

experiment

  • 사용자가 원하는 주식 종목 검색
  • 사용자가 원하는 키워드 3개 검색
  • 선택한 종목과 키워드들의 연관성을 확인할 수 있는 그래프 확인 가능

모의 투자 종목 매수, 매도 페이지

buy_stock

  • 모의투자에서 종목 선택 후 구매할 수량 선택
  • 매 정각에 매수와 매도 거래 가능

모의투자 정보 페이지

investment1

  • 사용자는 모의투자한 종목 정보를 확인 가능
  • 총 자산과 종목별 자산 현황 확인 가능
  • 정각에 매수, 매도 거래가 완료되면 우측에 자물쇠 아이콘으로 변경

investment2.png

  • 정각에 매수, 매도 된 후 이전 거래의 영수증을 확인

거래 정보 관련 페이지

guide

  • 모의투자가 진행중인 현황을 확인 가능
  • 다음 거래 체결까지 남은 시간을 확인 가능
  • 서비스 이용자들의 모의투자 랭킹 현황 확인 가능
  • 모의투자에 참여하기 위한 간단한 가이드 확인 가능

rank

  • 모의투자에 참여한 서비스 이용자들의 랭킹 확인

STOCKEY.v2 Member

포지션 이름 역할
FE 김경희 모의투자 서비스 개발
기존 코드 리팩토링
피그마 설계
CSS 애니메이션 개발
FE 류하은 실험실 페이지 개발
드래그 앤 드롭 구현
CSS 애니메이션 개발
FE 조현철 테스트 환경 구성
알림 기능 개발
CSS 애니메이션 개발
BE 공진호 MSA 구조 설계 및 구축
모의투자 API 개발
BE 양준모 Kafka 클러스터 구축 및 활용
모의투자 API 구현
BE 이상원 팀장
MSA 구조 설계 및 구축
Jenkins 배포 자동화 구축
실험실 API 개발

Releases

No releases published

Packages

No packages published

Languages