- 주제: 국내 주식 기반 모의 투자 서비스
- 대상: 주식을 처음 시작하는 예비 투자자
- 맞춤 주식 추천: 사용자가 보고 있는 내용에 대한 주식 추천
- 모의 투자 서비스 제공: 관심있는 주식에 대한 모의 투자기능 제공
위 그림은 온세주의 전체 서비스 아키텍처를 나타냅니다.
- User Service: 인증, 잔액 및 보유 주식 관리
- Order Service: 주문 생성 및 저장
- Matching Service: 주문 이벤트 기반 체결 진행
- 주문 및 체결 알고리즘 구현
- 체결 및 주문 시 이벤트 처리
-
회원가입 및 인증 시스템
- Google 소셜 로그인 지원
- 마이페이지에서 사용자 정보 및 관심 주식 관리
-
크롬 익스텐션 기반 주식 추천
- 사용자가 보고 있는 웹 페이지 기반 관련 주식 자동 추천
- 관심 주식 저장 기능 제공
-
주식 주문 및 체결 시스템
- 사용자가 주문한 주식을 시장 규칙에 따라 체결
- 비동기 이벤트 기반 처리 구조로 구현
1️⃣ 체결 속도 향상 - TPS 약 625% 향상
문제 상황
- DB를 조회하며 체결을 진행할 경우 Connection Pool 부족과 속도 저하 문제 발견
해결 방법
- 인메모리 상에서 체결 진행
- 기존 DB에서 조회 -> 남은 수량 업데이트 -> 저장 로직을 인메모리 상 TreeMap에서 진행
- 데이터 유실 방지를 위해 체결 완료 후 DB에 데이터 저장
- 동시성 문제 대응
- 자료구조를 ConcurrentSkipMap으로 변경 및 ReentrantLock 적용
- DB 저장 시 발생하는 동시성 문제는 낙관적 락 + 지수 백오프 방식 적용
결과
- DB 기반 체결 처리(약 19TPS)
- 인메모리 기반 체결(약 160TPS)
2️⃣ 체결 엔진 메모리 부족 문제 해결
문제 상황
- 20개 회사 대상 부하테스트 결과 약 450MB 힙 사용 확인
- 900개 회사로 확장할 경우 20GB 메모리가 필요할 것으로 예상
해결
- 서버를 사용자/주문/체결 기능으로 분리
- 각 서비스 간 데이터 처리를 RabbitMQ 기반의 이벤트 구조로 구성

