|
1 | 1 | # autoInvest |
2 | 2 |
|
3 | | -주가를 **실시간 감시**하다가 |
4 | | -① 지정가 도달 → **시장가 손절** |
5 | | -② 이후 다시 지정가 도달 → **재매수** |
6 | | -까지 자동으로 실행하는 API 서버입니다 |
| 3 | +주식 관리 API입니다. |
7 | 4 |
|
8 | | ---- |
| 5 | +주식을 하면서 손절을 못하는 이유는, "혹시 여기서 다시 오르면 어떡하지?" 라는 생각 때문입니다. |
9 | 6 |
|
10 | | -## 1) 프로젝트 개요 |
| 7 | +주가를 실시간 (WebSocket && HTTP Polling) 으로 감시하다가, 지정한 손절가에 도달하면 자동 손절. |
| 8 | +이후 감시를 지속하여 주가가 손절가에 다시 도달하면 재매수하게 하는 API입니다. |
11 | 9 |
|
12 | | -- **프로젝트명**: autoInvest |
13 | | -- **문제 정의** |
14 | | - - 실시간 주가 감시는 연결 유지(WebSocket) + 이벤트 폭주 특성이 강해서 |
15 | | - - 작은 인스턴스(EC2 micro)에서는 **세션과 메모리중복 데이터**가 바로 병목으로 다가옴 |
16 | | -- **해결 방향** |
17 | | - - 실시간 주가 수신은 **한 번만** 받아서 전역 Redis로 **브로드캐스팅(Pub/Sub)** |
18 | | - - 거래/후처리 작업은 **Redis Streams**로 **작업 큐**를 구성해 안정적으로 처리 |
| 10 | +현재 LS 증권의 세션을 다룰 수 있으며, 다른 증권사를 추가하기 위해 전략패턴(디자인패턴)을 사용하여 원활한 확장성을 제고하였습니다. |
19 | 11 |
|
20 | 12 | --- |
21 | 13 |
|
22 | | -## 2) 아키텍처 |
| 14 | +## 1) 문제 해결 요약 |
| 15 | +### 메모리 트러블 |
| 16 | +- **문제 정의** |
| 17 | + - EC2 micro 환경에서 계속 유지되고 있는 유저들의 웹소켓 세션으로 메모리가 포화되어 한 서버에 많은 유저를 감당하기 어려움. |
| 18 | + - |
| 19 | +- **해결 방향** |
| 20 | + - 모든 서버에서 **주식 종목당 단 한 개의 세션만 유지**하고, 전역 Redis로 **브로드캐스팅(Pub/Sub)** |
| 21 | + - 중복 쓰기 및 데이터 정합성을 보장하기 위해 **Redis 분산락** 으로 유일한 쓰기 보장. |
23 | 22 |
|
24 | | -> 환경: **EC2 micro** 기반 |
25 | | -> 구성: **App 서버 + 전역 Redis 서버 + RDS(MySQL)** |
| 23 | + - 거래/후처리 작업은 **Redis Streams**로 **작업 큐**를 구성해 안정적으로 처리 |
26 | 24 |
|
27 | | -## 3) 기술 스택 |
| 25 | +--- |
| 26 | +## 2) 기술 스택 |
28 | 27 |
|
29 | | -Language: Java 17 |
| 28 | +**Language**:  |
30 | 29 |
|
31 | | -Framework: Spring Boot (WebFlux) |
| 30 | +**Framework**:  |
| 31 | + |
32 | 32 |
|
33 | | -DB: MySQL (AWS RDS) |
| 33 | +**DB**:  |
| 34 | + |
34 | 35 |
|
35 | | -Cache / Messaging: Redis |
| 36 | +**Cache / Messaging**:  |
36 | 37 |
|
37 | | -Redis Pub/Sub: 공통 데이터 브로드캐스팅 |
| 38 | +**Infra**:  |
| 39 | + |
| 40 | + |
| 41 | + |
38 | 42 |
|
39 | | -Redis Streams: 작업 큐 |
| 43 | +## 3) 아키텍처 |
| 44 | + |
40 | 45 |
|
41 | | -Infra: AWS EC2 micro, RDS |
| 46 | +<img width="5605" height="6125" alt="Untitled diagram-2026-02-11-051546" src="https://github.com/user-attachments/assets/50a2d26d-3247-42c2-9612-d2513def6db7" /> |
42 | 47 |
|
43 | 48 |
|
44 | 49 | ## 4) 트러블 슈팅 |
|
0 commit comments