은퇴 자산 관리 서비스 레인지(Range)가 몬테카를로 시뮬레이션의 처리 속도를 획기적으로 개선했다고 발표했습니다. 기존 NodeJS 기반의 시뮬레이션 오케스트레이션 레이어를 Go(Golang)로 전환하여 전체 시뮬레이션 시간을 약 39% 단축하는 데 성공했습니다. 이는 사용자들이 자신의 은퇴 계획에 대한 다양한 시나리오를 거의 실시간으로 확인하고 조정할 수 있도록 지원하기 위함입니다.
레인지는 은퇴 목표 달성 확률을 계산하기 위해 몬테카를로 시뮬레이션을 활용하며, 각 가구에 대해 1,000번의 시뮬레이션을 실행합니다. 기존 아키텍처는 NodeJS 백엔드 서비스가 오케스트레이터 역할을 하고, 200개의 람다(Lambda) 함수가 각각 5개의 시뮬레이션을 병렬로 처리하는 방식이었습니다. 하지만 NodeJS의 단일 이벤트 루프 스레드(single event-loop thread)는 동시 실행 람다 수가 늘어날수록 오버헤드가 커져 응답 속도가 저하되는 병목 현상을 겪었습니다. 특히 200개의 람다를 사용할 경우 약 500ms의 호출 오버헤드가 발생했습니다.
이러한 문제를 해결하기 위해 레인지는 오케스트레이터를 전용 람다로 분리하고, Go를 도입했습니다. Go의 고루틴(goroutines)은 여러 스레드에 걸쳐 병렬 처리를 효율적으로 수행할 수 있어, 단일 스레드 병목 현상을 해결하는 데 결정적인 역할을 했습니다. Go 도입 후 시뮬레이션 배치 크기를 1로 줄여도 오히려 NodeJS보다 2배 빠른 성능을 보였으며, 전체 시뮬레이션 시간을 39% 단축하여 사용자에게 더 빠르고 만족스러운 경험을 제공할 수 있게 되었습니다. 이 과정에서 클로드(Claude)와 같은 AI 도구를 활용하여 계획 수립, 코드 작성 및 검증에 소요되는 시간을 하루 남짓으로 크게 줄였다고 덧붙였습니다.
이번 Go 도입은 실시간 데이터 처리와 복잡한 계산이 필요한 금융 서비스 분야에서 기술 스택 선택의 중요성을 다시 한번 보여줍니다. 특히 대규모 병렬 처리가 필요한 몬테카를로 시뮬레이션과 같은 작업에서 Go의 효율성이 입증된 사례입니다. 이는 사용자 경험을 개선하는 동시에, 개발 및 검증 프로세스에 AI 도구를 효과적으로 통합하여 생산성을 높일 수 있음을 시사합니다. 결과적으로 레인지는 더 빠르고 정확한 은퇴 계획 시뮬레이션을 제공하며, 고객 만족도를 높이는 데 기여할 것으로 보입니다.
