
핵심요약
SSG.COM은 Spring Batch 기반 동기 처리 방식의 제휴 연동 시스템 문제를 해결하기 위해 Kotlin Coroutine 기반 비동기 시스템을 구축했습니다. 이 시스템은 경량 스레드 모델을 활용하여 API 호출 처리 시간을 대폭 단축하고 리소스 효율성을 개선했습니다.
Kotlin Coroutine 기반 비동기 제휴 연동 시스템 구축
기존 시스템의 문제점 및 Coroutine 도입 배경
- SSG.COM의 제휴 연동 시스템은 초기 Spring Batch 기반 동기 처리 방식으로 구현되어, 15개 이상의 외부 API를 순차 호출하여 처리 속도가 느리고 배치 서버 기동 시간이 발생했습니다.
- 이러한 비효율성을 해결하기 위해 Kotlin Coroutine을 활용한 비동기 처리 시스템 도입을 추진했습니다.
- 완전한 실시간 Kafka 기반 전환 대신, 배치 역할은 메시지 발행으로 축소하고 핵심 병목인 다건 API 호출을 Coroutine으로 비동기화하는 절충안을 채택했습니다.
Kotlin Coroutine의 동작 원리 및 주요 기능
- Coroutine은 OS 스레드 대신 애플리케이션 레벨에서 관리되는 경량 스레드로, 하나의 스레드 위에서 여러 코루틴을 실행하여 자원 소모와 Context Switching 비용을 최소화합니다.
- suspend 키워드는 함수가 실행을 중단(suspend)하고 재개(resume)할 수 있도록 하며, 컴파일 시 Continuation 객체가 생성되어 힙(Heap)에 상태를 저장하고 CPS(Continuation Passing Style) 방식으로 비동기 처리를 가능하게 합니다.
- Dispatchers는 코루틴이 실행될 스레드를 제어하며, Dispatchers.Default는 CPU 바운드 작업에, Dispatchers.IO는 블로킹 I/O 작업에 최적화된 스레드 풀을 제공합니다.
- coroutineScope는 여러 코루틴을 그룹화하여 **구조적 동시성(Structured Concurrency)**을 보장하며, async-await는 비동기적으로 값을 계산하고 그 결과를 기다리는 데 사용됩니다.
Coroutine 도입 후 시스템 개선 효과
- 15개 이상의 외부 API 호출 처리 시간이 대폭 감소하여 대부분 0.5초 이내로 단축되었습니다.
- 경량 스레드 모델인 코루틴을 통해 JVM Thread 대비 리소스 사용량이 절약되고 시스템 비용이 감소했으며, 안정적인 힙 메모리 사용량과 낮은 GC 빈도를 보입니다.
- 기존 배치 서버를 제거하고 실시간성 API로 전환하여 서버 기동 시간 없이 CPU 사용량이 균등하게 분산되어 시스템 안정성과 효율성이 확보되었습니다.
- 코루틴은 러닝 커브가 존재하지만, 복잡한 비동기 흐름을 간결하고 효율적으로 구현할 수 있는 강력한 도구임을 입증했습니다.
SSG TECH