프로젝트

프로젝트20. 프로젝트 아키텍처 정리

dodo4723 2024. 2. 17. 10:09
728x90
반응형

제 프로젝트는 사용자가 특정 차트를 고르면, 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개를 골라 사용자에게 보여줍니다.

 

비슷한 차트 검색기

 

 

비슷한 차트 검색기

전 종목의 최근 10년간 모든 차트를 탐색합니다. 내 종목의 차트는 과연 상승하는 차트일까요?

www.similarchart.com


 

 

프로젝트 아키텍처

웹 프로젝트를 6개월 만에 목표하는 수준까지 완성했습니다. 아직 테스트와 검증 등이 남아있어 프로젝트가 끝난 것은 아니지만, 이쯤에서 프로젝트를 정리해보려고 합니다.

 

제 프로젝트가 어떻게 구성되어 있는지 아키텍처를 정리해 보았습니다.

1. Library / Web Scraping

  • 주가 데이터를 FinanceDataReader 라이브러리와 yfinance 라이브러리를 이용해 불러옵니다.
  • 주식 종목 데이터는 Naver Financial / Investing.com에서 스크래핑합니다.

 

2. ETL Container

  • 데이터를 추출(Extract), 변환(Transform), 로드(Load)하는 컨테이너입니다.
  • 라이브러리와 웹 스크래핑을 활용해 주가 데이터와 주식 종목 데이터를 수집&변환&정제하고, 그 결과인 비슷한 차트의 데이터를 MySQL에 저장합니다.
  • 한국주식과 미국주식 두 컨테이너로 나뉩니다.

 

3. Flask / Gunicorn Container

  • MySQL과 Redis에 저장된 데이터들을 기반으로 사용자의 HTTP 요청을 받아 응답합니다.
  • Gunicorn은 여러 워커를 관리하며, 각 워커는 독립적으로 사용자의 요청을 처리합니다. 이를 통해 효율적인 로드 밸런싱과 높은 가용성을 제공합니다.

 

4. Amazon RDS - MySQL

  • ETL Container와 Flask/Gunicorn Container를 잇는 다리 역할을 합니다.

 

5. Redis Container

  • ETL Container와 Flask/Gunicorn Container 사이에서 메시지 중개인 역할을 합니다.
  • 자주 사용되는 데이터들의 캐싱 역할을 합니다.

 

6. Nginx Container

  • 애플리케이션 서버의 응답을 캐싱합니다.
  • 연결 수 제한 / 최대 요청 횟수를 제한합니다.
  • SSL 인증서로 HTTPS를 제공합니다.
  • 로깅 기능을 제공합니다.

 

7. CloudFlare

  • CDN 서비스를 제공합니다.
  • IP 주소와 도메인(www.similarchart.com)을 변환합니다.
  • SSL 인증서를 관리합니다.
  • 트래픽 분석 기능을 제공합니다.
  • WAF, DDos 방지 등 보안 기능을 제공합니다.

 

 

결론

 

일단 깔끔한 아키텍처보다는 서비스가 잘 돌아가게 만드는 것을 중점에 둬서 저렇게 하는 게 맞는 건지 잘 모르겠습니다. 필수적인 부분이 들어가지 않았을 수도 있습니다.

 

그리고 쿠버네티스, Aws ECR, CI/CD 등 공부해보고 싶은 아키텍처들이 남아있습니다. 이후에 시간이 남으면 적용해 봐야겠습니다.

반응형