Context
문제 상황
프로젝트 내에서 사용하는 API를 정기적 (1시간 단위)으로 불러올 스케줄러 작성의 필요성
- 시간 단위로 작업 자동화의 필요성 有
현재 다음과 같은 구조로 스케줄러의 작업이 진행됩니다.
- Keyword 추출 → Source 검색 → 조건 평가 → LLM 호출 → DB 저장
- 위의 과정을 시간 단위로 자동화해야 하는 요구사항이 존재합니다.
Decision
제안 내용 및 이유
Spring Batch 프레임워크를 도입하여 시간 단위 스케줄러를 구현
- 배치 처리 특화 : Spring Batch는 대용량 데이터 처리 및 일련의 순차적인 배치 작업을 안정적이고 효율적으로 관리하는 데 특화된 프레임워크입니다. 현재 요구사항인 API 호출, 데이터 처리, DB 저장은 명확한 배치 처리 패턴에 해당합니다.
- Spring 생태계와의 통합: Spring Batch는 Spring 프레임워크의 일부로서 Spring Data JPA, Spring WebClient 등 다양한 Spring 기술과의 자연스러운 통합을 제공합니다. 이는 기존 프로젝트의 Spring 기반 기술 스택과의 호환성을 높이고 개발 편의성을 제공합니다.
- 확장성: 향후 작업 단계가 추가되거나 복잡해지더라도 Spring Batch의 유연한 구조는 쉽게 확장을 가능하게 합니다.
Consequences
제안된 기술 도입의 장단점
장점:
- 안정적인 배치 처리: 대용량 데이터 처리 및 순차적 작업 흐름 관리에 용이합니다.
- 강력한 트랜잭션 관리: 데이터 일관성 유지 및 오류 처리 능력 향상.
- 높은 성능: 병렬 처리 지원으로 작업 시간 단축 가능.
- 용이한 모니터링 및 관리: 작업 상태 및 이력 추적 용이.
- 재사용성 및 생산성 향상: 표준화된 컴포넌트 모델 제공.
- 기존 Spring 환경과의 통합 용이성.
- 뛰어난 확장성: 향후 요구사항 변화에 대한 유연한 대응 가능.
단점:
- 설정 복잡성: 간단한 스케줄링 작업에 비해 초기 설정이 다소 복잡할 수 있습니다.
- 오버헤드: 간단한 작업을 수행하는 스케줄러에 비해 프레임워크 자체의 오버헤드가 있을 수 있습니다.
Alternatives
다른 대안
- Spring Scheduling (@Scheduled): Spring 프레임워크에서 제공하는 기본적인 스케줄링 기능으로, 간단한 시간 기반 작업을 쉽게 구현할 수 있습니다. 하지만 복잡한 배치 처리 로직, 트랜잭션 관리, 재시도/롤백, 병렬 처리 등의 기능을 내장하고 있지 않아 현재 요구사항을 충족하기에는 부족할 수 있습니다.
- Quartz Scheduler: Java 기반의 강력한 스케줄러 라이브러리입니다. Spring과 통합하여 사용할 수 있지만, Spring Batch와 달리 배치 처리 흐름 관리에 특화되어 있지는 않습니다. 각 작업 단계를 직접 구현하고 관리해야 하는 부담이 있습니다.
Adoption & Next Steps
최종 채택 사항 및 차후 과제
Spring Batch 프레임워크를 도입하여 1시간 단위 API 호출 스케줄러를 구현합니다. Spring Batch의 배치 처리 특성, 트랜잭션 관리, 병렬 처리 능력, 모니터링 기능 등이 현재 요구사항에 가장 적합하다고 판단되어 적용
'kkokkio - 프로젝트 > ADR(의사결정문서)' 카테고리의 다른 글
Redis (0) | 2025.06.11 |
---|---|
Prometheus + Grafana (0) | 2025.06.11 |
Airflow (0) | 2025.06.11 |
Flyway (1) | 2025.06.11 |
Swagger (0) | 2025.06.11 |