핵심 요약
- 외부 API의 페이징 제한과 400만 건의 방대한 데이터로 인해 단일 스레드 조회 시 일주일 이상 소요되던 병목이 발생했습니다.
- 명령형 언어와 달리 상태 불변성과 초경량 스레드를 지원하는 하스켈의 특성을 살려 병렬화 작업을 손쉽게 구현했습니다.
- 가격 구간 분할과 100개의 스레드를 최적으로 활용해 전체 소요 시간을 100배 가량 단축하며 3시간 만에 완료했습니다.
요약 해외 소프트웨어 컨설팅 기업 스택 빌더스(Stack Builders)의 엔지니어 마크 카포프(Mark Karpov)가 하스켈(Haskell)의 동시성(Concurrency) 프로그래밍을 활용해 실무 프로덕션 환경의 작업 소요 시간을 일주일 이상에서 단 3시간으로 단축시킨(약 100배 가속) 기술적 사례를 공유했습니다.
해당 프로젝트의 핵심 과제는 외부 웹 서비스 API를 호출하여 약 400만 건 이상의 방대한 데이터를 수집한 뒤, 이를 데이터베이스에 적재하고 CSV 파일로 내보내는 작업이었습니다. API 호출 1건당 약 0.5초가 소요되는 데다, 한 번에 최대 100건(limit)까지만 조회 가능하고 페이지 오프셋(offset)도 3,500 이하로 제한되어 있어 전체 데이터를 순차적으로 긁어오려면 1주일이 넘게 걸리는 구조적 한계가 있었습니다.
일반적인 명령형 프로그래밍 언어에서는 스레드 간 데이터 동기화 과정에서 락(Lock) 관리, 데드락 발생, 작업 부하 분산의 난이도 때문에 병렬화가 까다롭습니다. 반면 하스켈은 상태 변경이 없는 순수 함수형 특성과 STM(Software Transactional Memory), 그리고 메모리 용량 내에서 수백만 개까지 생성 가능한 초경량 그린 스레드(Green Threads)를 지원합니다.
개발팀은 전체 가격 범위를 50달러 단위의 서브 세그먼트로 나누어 오프셋 제한을 우회하면서 동시 요청을 분배했습니다. 네트워크 커넥션 수 제한 등을 고려해 최적화된 100개의 경량 스레드로 병렬 처리를 구현한 결과, 일주일 넘게 걸리던 작업을 불과 3시간 만에 완료할 수 있었습니다.
Sponsored · 광고