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 등 공부해보고 싶은 아키텍처들이 남아있습니다. 이후에 시간이 남으면 적용해 봐야겠습니다.
반응형
'프로젝트' 카테고리의 다른 글
프로젝트22. 내 웹사이트는 어디까지 버틸 수 있을까? - 실제 이용자들로 부하테스트 (0) | 2024.03.10 |
---|---|
프로젝트21. 서비스에 광고를 달아보자! (애드센스 9번째(4달만)에 승인) (0) | 2024.03.10 |
프로젝트19. 두번째 도전 Start - 앱을 만들어 보자! (그런데 아는게 없다) (0) | 2024.02.17 |
프로젝트18. 파일로 캐싱 레디스로 캐싱 웹서버로 캐싱 CDN으로 캐싱 (0) | 2024.02.17 |
프로젝트17. Nginx 적용! (캐싱, 로깅, 요청제한, HTTPS) (0) | 2024.02.17 |