Treasure Hunt Engine: 낙관주의가 현실과 만나는 곳

발행: (2026년 5월 25일 AM 10:44 GMT+9)
6 분 소요
원문: Dev.to

Source: Dev.to

The Problem We Were Actually Solving

우리는 방대한 데이터 코퍼스에서 문서를 색인하고 검색할 수 있는 고성능 시스템이 필요했습니다. 문제는 사용자가 검색 속도뿐만 아니라 결과의 정확성도 중요하게 여긴다는 점이었습니다. 이는 THE가 불리언 검색과 구문 매칭을 포함한 다양한 쿼리 유형을 처리하면서 관련성 높은 순위를 제공해야 함을 의미했습니다. 다시 말해, THE는 단순한 검색 엔진이 아니라 우리 애플리케이션 사용자 경험의 핵심 구성 요소였습니다.

What We Tried First (And Why It Failed)

초기에 우리는 기존 이벤트 버스와 워커 큐를 활용한 일반적인 이벤트‑드리븐 아키텍처로 THE를 구현했습니다. 각 쿼리는 이벤트로 디스패치되고 별도의 워커 스레드에서 처리된 뒤 클라이언트에 반환되었습니다. 이 접근 방식은 겉보기엔 우아해 보였지만 곧 한계에 부딪혔습니다. 이벤트 버스가 지나치게 대화를 많이 하여 네트워크 오버헤드와 지연을 초래했고, 워커 큐는 레이턴시와 지터를 유발했습니다. 가장 답답했던 점은 사용자들이 잘못된 결과와 쿼리 타임아웃을 보고했으며, 이는 스레딩 모델과 적절한 동기화 부족 때문이라고 판단했습니다.

The Architecture Decision

수개월간의 화재 진압과 수많은 성능 최적화 작업 끝에, 우리는 언어와 런타임이 가장 큰 제약 요소라는 사실을 깨달았습니다. 우리의 코드베이스는 Go로 작성되어 있었는데, 많은 시나리오에서 빠르긴 하지만 다중 스레드·동시성 쿼리 처리의 복잡성을 따라잡지 못했습니다. 우리는 THE를 Rust로 마이그레이션하기로 결정했으며, 특히 고성능 비동기 I/O 기능을 제공하는 Tokio 런타임을 목표로 삼았습니다. 이 변화는 전체 쿼리 처리 파이프라인을 재작성하고 워커 스레드 관리 방식을 수정하는 등 광범위한 영향을 미쳤습니다.

What The Numbers Said After

아키텍처 결정을 내린 후의 효과는 극적이었습니다. Rust로 전환함으로써 THE의 중간 응답 시간을 250 ms에서 50 ms 이하로 줄였으며, 대부분의 쿼리는 20 ms 이내에 완료되었습니다. 더욱 인상적인 것은 레이턴시 분포가 크게 변하여 99.9 %의 쿼리가 100 ms 이내에 끝났다는 점입니다. 또한 할당 횟수와 메모리 사용량이 크게 감소하여 서버 메모리 요구 사항을 낮추고 전체 처리량을 증가시켰습니다.

What I Would Do Differently

돌이켜보면, 초기의 일반적인 이벤트‑드리븐 아키텍처 선택은 좋은 의도였지만 결함이 있었습니다. 처음부터 각 구성 요소의 성능 영향을 전체적으로 고려했어야 했습니다. 디자인을 다시 한다면 보다 효율적인 스레딩 모델, 예를 들어 Tokio의 executor를 선택하고, Apache Kafka나 OpenSearch와 같은 보다 특화된 쿼리 처리 프레임워크를 고려했을 것입니다. 그럼에도 불구하고 THE와의 경험은 중요한 교훈을 주었습니다: 언어와 런타임의 성능 제약을 이해하는 것이 고처리량 시스템을 구축하는 데 필수적이라는 점입니다. 이러한 제약을 초기에 인식함으로써 보다 확장 가능하고 반응성이 뛰어난 애플리케이션을 만들기 위한 정보에 입각한 설계 결정을 내릴 수 있습니다.

If you are optimising your commerce layer the same way you optimise your hot paths, start with removing the custodial intermediary: .

0 조회
Back to Blog

관련 글

더 보기 »

러스트 언어 성능 [PDF]

Goal Rust is defined as a safe, low‑level, system programming language directly competing with C++. How much does it pay for safety in terms of performance? Ca...