제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
비슷한 차트 검색기
전 종목의 최근 10년간 모든 차트를 탐색합니다. 내 종목의 차트는 과연 상승하는 차트일까요?
www.similarchart.com
최근 핫한 Redis
전 최신 기술/개발 동향과 효율적인 AI활용을 위해 최신 소식들을 자주 찾아봅니다. 그런데 최근에는 Redis가 자주 들려오더군요. 개발자분들이 말씀하시는 걸 들어보니 Redis가 아키텍처에 자주 등장하는 것을 보았습니다. 또한 이번학기에 DB수업을 수강할 때, 교수님께서 DB 인기 랭킹을 보여주셨는데 거기에도 6위로 기재되어 있었습니다. 이러면 또 모르고 넘어갈 수가 없죠.
레디스 컨테이너 자체를 띄우는데 필요한 메모리가 많이 요구되지 않을까 걱정되었는데, 실제로 띄워보니 다행히 레디스 자체는 10MB도 사용하지 않네요.
1. 인메모리 캐시
레디스에 대해 자세히 다뤘던 포스팅을 참고하자면, 레디스는 인메모리 캐시 DB입니다. 모든 데이터를 메모리에 저장하기 때문에 빠른 응답 시간을 가지고, 직접 mysql등의 DB에 접근하지 않고도 기존에 캐싱된 데이터를 사용할 수 있다는 것이 가장 큰 장점입니다.
제 프로젝트의 데이터들 중 자주 쓰이고 용량이 크지 않은 데이터들을 레디스에 올려 사용중입니다.
2. 컨테이너 간 정보공유도 좋을 것 같은데?
제 프로젝트는 도커 컨테이너를 이용합니다. 구조를 간단히 설명드리자면 사용자의 요청을 받는 Flask 컨테이너 2개와 주가 데이터를 수집, 정제하는 data_updater 컨테이너가 한국용, 미국용 각각 1개씩 있습니다.
위 컨테이너들이 공통적으로 가장 많이 쓰는 변수를 하나 꼽아보자면, 주식종목리스트를 테이블 형태로 담고 있는 df_code
입니다.
레디스를 사용하기 전 처음에는 이 주식 종목 리스트를 너무 많이 사용하니 그냥 각 컨테이너마다 전역변수로 계속 메모리에 올렸었습니다. 그런데 이렇게 하면 df_code가 각 컨테이너마다 하나씩 4개가 중복되어 메모리에 존재합니다.
레디스를 사용하면 종목 리스트를 하나만 메모리에 띄우고 각자 접근하여 사용할 수 있어 편하고 효율적입니다.
또한, 상장 또는 상장폐지로 인해 종목 리스트가 바뀌는 경우가 있어 주식 장이 종료될 때마다 종목 리스트를 업데이트를 해줘야 합니다. 그래서 레디스를 사용하기 전에는 http통신을 통해 데이터를 다른 컨테이너로 전해줘야 했습니다. 하지만 레디스를 사용하면 그냥 한 컨테이너가 종목 리스트를 변경하면 모든 컨테이너가 변경된 리스트를 바로 사용할 수 있어 좋았습니다.
이렇게 각 컨테이너 간의 동기화를 유지하면서 데이터를 실시간으로 공유하는 것을 메시지 중개인의 개념으로 볼 수 있습니다.
다른 유용한 기능 더 찾아보자
레디스를 어제 처음 사용해 봤는데 듣던 대로 거의 필수라고 해도 무방하네요. 레디스를 사용해 제 프로젝트를 더 효율적으로 바꿀만한 부분이 있는지 찾아봐야겠습니다.
'프로젝트' 카테고리의 다른 글
웹 프로젝트 - 9. AWS 청구서 분석2 (Route 53, 데이터전송) (0) | 2024.02.17 |
---|---|
웹 프로젝트 - 8. AWS 청구서 분석1 (EC2, CPU 크레딧, EBS 볼륨 스냅샷) (0) | 2024.02.17 |
6. 파이썬 메모리 관련 주의할 점과 matplotlib 메모리누수 문제 (0) | 2024.02.17 |
프로젝트 - 5. 데이터 파이프라인, 데이터베이스 구조 정리 (0) | 2024.02.17 |
비슷한 차트 탐색 프로젝트 - 4. AWS를 사용해서 배포해보자 (0) | 2024.02.17 |