Spring Batch 기반 동기 처리의 확장성 한계를 극복하기 위해 Kotlin Coroutine 도입
코루틴을 활용하여 15개 이상의 외부 API를 비동기+동시성 방식으로 호출, 처리 시간 단축
JVM Thread 대비 코루틴의 자원 효율성 및 GC 부담 감소를 확인, 시스템 안정성 확보
suspend 함수는 Continuation 객체를 활용하여 실행 상태를 저장하고, 필요 시 재개한다. 구체적으로, Continuation은 중단 시점의 변수, 실행 위치 등의 정보를 Heap에 저장한다. 따라서, JVM Stack에 의존하지 않고 비동기 처리를 가능하게 한다.
자바 Thread 기반의 동기 처리 방식은 잦은 Context Switching으로 인한 오버헤드가 발생한다. 반면, 코루틴은 Thread 수를 유지하면서도 여러 실행 단위를 처리하여 자원 효율성을 높인다. 따라서, I/O 작업이 많은 환경에서 성능 향상을 기대할 수 있다.
async-await는 비동기 작업의 결과를 기다리는 데 사용되며, Dispatchers는 코루틴을 실행할 스레드를 제어한다. 구체적으로, Dispatchers.IO는 I/O 작업에, Dispatchers.Default는 CPU bound 작업에 적합하다. 따라서, 작업 특성에 맞는 Dispatcher 선택이 중요하다.