MAU 52,470명
가상 주식 시뮬레이션
2026.04.25 — 2026.07.01 · 개인 프로젝트 · 설계·구현·배포·운영
시연 영상 촬영 예정 — 매매·랭킹 화면과 Grafana 지표 화면이 이 자리에 들어갑니다
- 월 API 요청
- 4,500만 건+
- API p95
- 약 23ms
- 5xx 오류율
- 0.0011%
프로젝트 소개
실시간 시세로 모의 매매를 하는 서비스를 혼자 설계·구현·배포·운영했습니다. 조회는 캐시로, 거래는 락으로, 배치는 실행 토큰으로 나눠 처리하고 운영 지표로 확인했습니다.
사용 기술
Java 17
Spring Boot
MySQL
Redis
Nginx
Prometheus
Grafana
링크
GitHub ↗과거 배포 주소 virtual-stock.xyz · 2026.07 운영 종료
문제 해결
요청의 대부분이 시세·랭킹 조회였습니다. 전부 캐싱하면 잔고와 보유 수량이 실제와 달라질 수 있어 갱신이 잦고 정합성 요구가 낮은 조회만 Redis로 옮기고, 거래는 데이터베이스에 남겼습니다.
같은 계정에서 주문이 동시에 들어오면 잔고와 보유 수량이 어긋납니다. 충돌 자체는 드물어 전체를 잠그는 비관적 락 대신 낙관적 락으로 충돌만 감지해 재시도하게 했고, 계정·종목 복합 키로 중복 보유 레코드를 막았습니다.
외부 시세 API를 한 번에 호출하던 스케줄러가 다음 주기까지 끝나지 않았습니다. 종목을 청크로 나눠 호출하고, 인스턴스가 겹쳐도 같은 배치가 두 번 돌지 않도록 Redis에 TTL을 둔 실행 토큰을 사용했습니다.
운영 기간 동안 연동 계정 21,975개, 지원 종목 3,500종 이상, 누적 거래 135만 건 이상을 처리했습니다.
2026년 7월 서비스 운영을 종료했습니다. 저장소와 관측 지표는 남아 있습니다.