> For the complete documentation index, see [llms.txt](https://judy-valentine.gitbook.io/judy/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://judy-valentine.gitbook.io/judy/work-experience/gentle-energy-corp./stock-recommendation-service.md).

# Stock Recommendation Service

퀀트 투자 전략 기반 베트남 주식 종목 추천 서비스를 Spring Boot로 개발했습니다.

***

## 1. Overview

외부 백테스팅 툴에서 검증된 퀀트 투자 전략을 기반으로, 베트남 3\~40대 개인 투자자에게 주식 종목을 추천하는 RESTful API 서비스를 개발했습니다. Spring Data JPA를 활용한 백엔드 API 설계부터 AWS EKS 기반 컨테이너 배포까지 전 과정을 담당한 파일럿 프로젝트입니다.

***

## 2. WHY? — 배경 & 문제 정의

베트남 주식 시장은 개인 투자자 비중이 높지만, 데이터 기반 종목 선정 도구가 부족한 상황이었습니다. 대부분의 투자자가 뉴스나 지인 추천에 의존해 종목을 선택했고, 백테스팅으로 검증된 전략을 쉽게 접할 수 있는 서비스가 필요했습니다.

해결해야 할 핵심 문제는 두 가지였습니다.

* **전략 신뢰성 확보**: 감이 아닌 백테스팅으로 검증된 퀀트 전략을 서비스화
* **접근성 제공**: 전문 트레이딩 툴 없이도 3\~40대 일반 투자자가 종목 추천을 받을 수 있는 API 구축

***

## 3. System Architecture

```
외부 백테스팅 툴 → Spring Boot API Server → Client
                        ↓
                  MySQL (Spring Data JPA)
                        ↑
              AWS EKS (컨테이너 배포)
```

***

## 4. Tech Stack

<table><thead><tr><th width="266.0703125">영역</th><th>기술</th></tr></thead><tbody><tr><td>Backend</td><td>Spring Boot, Java, Spring Data JPA</td></tr><tr><td>Database</td><td>MySQL</td></tr><tr><td>인프라</td><td>AWS EKS, Docker</td></tr><tr><td>API 설계</td><td>RESTful API</td></tr><tr><td>전략 검증</td><td>외부 백테스팅 툴</td></tr></tbody></table>

***

## 5. Contributions

| 영역     | 기여 내용                                        |
| ------ | -------------------------------------------- |
| API 설계 | Spring Data JPA 기반 종목 추천 RESTful API 설계 및 개발 |
| 전략 연동  | 외부 백테스팅 툴의 전략 결과를 서비스에 통합하는 데이터 흐름 설계        |
| 배포     | AWS EKS 기반 컨테이너 배포 환경 구축                     |

***

## 6. Implementation

### 6.1 RESTful API 설계 — 종목 추천 엔드포인트 구성

퀀트 전략별로 추천 종목 목록, 종목 상세 정보, 전략 설명을 제공해야 했습니다. 클라이언트가 전략 유형과 필터 조건을 조합해 요청할 수 있도록 Spring Data JPA의 동적 쿼리 기능을 활용했습니다.

```java
public interface StockRecommendationRepository
        extends JpaRepository<StockRecommendation, Long> {

    List<StockRecommendation> findByStrategyTypeAndSectorOrderByScoreDesc(
        StrategyType strategyType,
        String sector
    );
}
```

엔티티 설계 시 전략 타입, 종목 코드, 추천 점수, 추천 일자를 핵심 필드로 구성했고, 전략별 조회가 빈번하므로 `strategyType`에 인덱스를 설정했습니다.

**결과:** 전략 유형·섹터 조합 기반의 유연한 종목 조회 API를 확보했습니다.

***

### 6.2 백테스팅 전략 연동 — 외부 툴 결과 통합

외부 백테스팅 툴에서 산출한 전략 결과를 서비스 DB에 반영해야 했습니다. 전략 결과 포맷이 고정되어 있지 않았기 때문에, 전략별 파서를 분리하고 공통 인터페이스로 추상화했습니다.

```java
public interface StrategyResultParser {
    List<StockRecommendation> parse(String rawData);
}
```

각 전략 유형에 대응하는 파서 구현체를 등록하고, 신규 전략 추가 시 파서만 구현하면 기존 흐름을 변경하지 않는 구조로 설계했습니다.

**결과:** 전략 추가 시 파서 구현체 하나만 작성하면 되는 확장 가능한 구조를 확보했습니다.

***

### 6.3 AWS EKS 배포 — 컨테이너 기반 운영 환경 구축

파일럿 프로젝트였지만 이후 확장을 고려해 단일 서버 배포 대신 EKS를 선택했습니다. Docker로 애플리케이션을 컨테이너화한 뒤 EKS 클러스터에 배포했습니다.

배포 구성:

| 구성 요소   | 설정                      |
| ------- | ----------------------- |
| 컨테이너    | Spring Boot Docker 이미지  |
| 오케스트레이션 | AWS EKS                 |
| 서비스 노출  | LoadBalancer 타입 Service |

**결과:** 트래픽 증가 시 Pod 수평 확장이 가능한 배포 환경을 구축했습니다.

***

## 7. Results

* 퀀트 전략 기반 종목 추천 API를 설계하고 파일럿 서비스로 배포 완료
* 전략 추가 시 파서 구현체만 작성하면 되는 확장 가능한 아키텍처 확보
* AWS EKS 기반 컨테이너 배포로 수평 확장 가능한 운영 환경 구축
* Spring Data JPA 기반 RESTful API로 전략·섹터 조합 필터링 기능 제공

***

## 8. Lessons Learned

**배운 점**

* Spring Data JPA의 메서드 네이밍 쿼리만으로 대부분의 조회 요건을 충족할 수 있었지만, 복잡한 동적 필터가 필요한 시점에는 QueryDSL 도입을 검토해야 한다는 점을 체감했습니다
* 파일럿 단계에서도 EKS를 선택한 덕분에 배포·스케일링 경험을 확보했지만, 초기 비용 대비 효율을 따지면 ECS Fargate가 더 적합했을 수 있습니다

**개선할 점**

* 백테스팅 결과 동기화가 수동이었기 때문에, 스케줄러 또는 이벤트 기반 자동 동기화 도입이 필요합니다
* API 인증·인가 미구현 상태로 배포했으므로, Spring Security 또는 JWT 기반 인증 계층 추가가 필요합니다
* 추천 결과에 대한 사용자 피드백 루프가 없어 전략 성과를 서비스 내에서 추적할 수 없었습니다
