이 글은 알파코에서 진행되는 [신한투자증권] 프로디지털아카데미 과정 중, 김송아 강사님과 함께하는 '파이널 프로젝트'를 기반으로 작성되었습니다
그동안의 프로젝트엔 모든 데이터를 MySQL에 넣고 조회하는 구조였다.
그런데 조건 탐지 로직이 매분 단위로 20개 종목 * 42개 조건을 검증해야 하는 상황이었기 때문에 DB 쿼리가 감당이 안됐다.
조회 속도가 밀리면 실시간 알림의 의미가 없어지기 때문이다.
그래서 Redis를 도입했다.
자주 바뀌는 데이터는 Redis, 하루에 한 번 바뀌는 데이터는 MySQL
이라는 원칙을 만들었다.
Redis를 도입한 이유
Redis는 사실 속도 때문만이 아니라 역할 분리를 위해 도입했다.
- 1분마다 바뀌는 데이터는 캐시로서 빠르게 갱신
- 1일 단위 데이터는 하루 한 번만 MySQL에 영속화
-> 실시간 분석 전용 스테이지 역할을 하도록 설계했다.
키 컨벤션 설계
Redis의 핵심은 키 컨벤션이었다.
데이터를 어떻게 구분하느냐에 따라 캐시 구조가 달라지기 때문이다.
- 분봉 데이터 (1분마다 갱신)
- 일봉 데이터 (하루 1회 갱신)


MySQL과 동기화 설계
처음엔 Redis에만 데이터를 넣었다.
Redis는 빠르고 가볍지만, 영구 저장소로 쓰기엔 불안정하다.
메모리 기반이라 서버가 재시작되면 데이터가 사라질 수 있고, 덮어쓰기나 TTL 만료로 데이터가 언제 없어질지 모른다.
그래서 하루에 한 번, 장 마감 시점에 Redis 데이터를 MySQL로 옮기는 구조를 추가했다.
- 1분 데이터 -> Redis에만 저장, 1시간 보관
- 1일 데이터 -> Redis 저장 후 하루 1회 MySQL에 동기화
- MySQL은 영구 보관 및 분석용
이렇게 나누니까 실시간성과 안정성의 균형이 잡혔다.
느낀 점
Redis를 쓰면 속도는 빨라지지만 그만큼 데이터 정합성을 스스로 책임져야 한다.
'And - 실시간 조건 감지·자동매매 시스템' 카테고리의 다른 글
| [신투 프디아] 시원섭섭한 최종 프로젝트 회고✏️ (4) | 2025.10.27 |
|---|---|
| [신투 프디아] 맞춤 조건에 맞는 기업 찾기! (0) | 2025.10.17 |
| [신투 프디아] 조건 탐지의 시작 - 44개의 지표를 코드로 옮기다 (0) | 2025.10.17 |
| [신투 프디아] 파이널 프로젝트 - 금융 데이터 가져오기! (1) | 2025.10.02 |
| [신투 프디아] 파이널 프로젝트 - 백엔드 패키지 설계 의도(with. DDD) (4) | 2025.09.26 |