테스트 환경 병목 해결! 각자 환경 구축으로 배포 속도 UP

by DD
2주 전
조회수 0

공용 테스트 환경 부족으로 인한 배포 병목(Deployment Bottleneck) 발생 및 작업자 간 조율 필요성 증대

환경 개수 증설 대신 개인별 환경 구축/폐기 모델로 전환하여 병목 현상 해소(Bottleneck Resolution) 시도

오픈소스 mirrord를 활용하여 개인 개발 환경(Personal Dev Environment) 구축 및 클라우드 기반 라우팅으로 지연 시간 문제 해결

Rust 기반 mirrord 코드 포크Claude Code 활용하여 동시 사용 제약 극복 및 통제 가능한 코드 베이스 확보

개인별 테스트 환경 구축의 필요성

과거 마이리얼트립은 제한된 수의 공용 테스트 환경을 여러 직군이 공유하며 사용했습니다. 이로 인해 환경 접근을 위한 대기 시간(Waiting Time)배포 시점 조율(Deployment Coordination)이라는 두 가지 주요 병목이 발생했습니다. 작업자 수 대비 환경 수가 부족하여 누가 환경을 사용하는지 파악하기 어렵고, 작업 중 다른 사람의 배포로 인해 자신의 작업이 영향을 받을 수 있다는 우려 때문에 지속적인 소통과 조율이 필수적이었습니다. 이러한 비효율성은 개발 생산성 저하로 이어졌습니다.

이 문제를 해결하기 위해, 단순히 환경 수를 늘리는 방식 대신 각 개발자가 필요에 따라 자신만의 테스트 환경을 동적으로 생성하고 사용 후 폐기하는 모델로 전환하는 방향을 모색했습니다. 이는 자원 낭비를 줄이고 개발자가 원하는 시점에 즉시 작업할 수 있는 환경을 제공하는 것을 목표로 합니다.

mirrord 도입 및 로컬 환경의 한계

개인별 환경 구축을 위한 초기 솔루션으로 오픈소스 도구인 mirrord가 고려되었습니다. mirrord는 로컬 환경에서 실행 중인 서비스로 클러스터 트래픽을 미러링하는 기능을 제공합니다. 초기에는 macOS 로컬 환경에서 mirrord를 실행하려 했으나, SIP(System Integrity Protection) 제약쿠버네티스(Kubernetes) 설정, 백엔드 런타임 등 8가지 이상의 도구 설치 요구사항으로 인해 온보딩 과정이 매우 복잡했습니다. 또한, 트래픽이 브라우저-클라우드-로컬-클라우드-브라우저로 이어지는 긴 라우팅 경로로 인해 응답 지연 및 타임아웃 문제가 발생하여 실제 사용에 어려움이 있었습니다. 이러한 복잡성은 개발자 경험(Developer Experience)을 저해하고 광범위한 도입을 어렵게 만들었습니다.

컨테이너 및 클라우드 환경으로의 전환

로컬 환경의 복잡성을 해결하기 위해, 다음 단계로 Docker 컨테이너 환경을 도입했습니다. 필요한 모든 도구를 Docker 이미지로 패키징하여, 개발자는 Docker만 설치하면 개인 환경을 쉽게 구성할 수 있게 되었습니다. 이는 온보딩 복잡성을 크게 낮추는 효과를 가져왔습니다. 하지만 트래픽 라우팅 경로 자체의 문제는 여전히 남아있어 응답 지연 문제는 해결되지 않았습니다. 최종적으로는 클라우드 기반 환경으로 전환하여, 브라우저 확장 기능을 통해 개인 개발 환경에 직접 연결하는 방식을 채택했습니다. 이 방식은 트래픽이 로컬을 거치지 않아 응답 지연 문제를 근본적으로 해결했으며, 코어플랫폼팀의 지원으로 기존 배포 파이프라인을 활용하여 개발 환경 준비 과정을 간소화할 수 있었습니다.

오픈소스 mirrord 포크 및 Claude Code 활용

mirrord의 기본 구조는 단일 에이전트만 허용하여 동시 사용에 제약이 있었고, 유료 플랜은 비용 부담이 컸습니다. 이에 Rust로 작성된 mirrord 소스 코드를 직접 포크하여 동시 사용 제약을 해결하기로 결정했습니다. Rust 경험이 없는 상태에서 코드 분석을 위해 Claude Code를 활용했으며, AI의 도움으로 동시 사용을 막는 핵심 로직을 빠르게 식별하고 수정 방안을 제시받았습니다. 이 과정을 통해 단일 에이전트 구조를 헤더 기반 라우팅으로 변경하여, 여러 사용자가 동시에 각자의 환경을 띄울 수 있도록 통제 가능한 코드 베이스를 확보했습니다. 이는 외부 종속성 없이 자체적인 제약 해결 능력을 갖추게 된 중요한 전환점이었습니다.

개선된 테스트 환경의 운영 및 확장

새롭게 개선된 개인별 테스트 환경은 브라우저 확장 기능을 통해 사용자의 식별자를 등록하고, 해당 식별자가 포함된 트래픽만 개인 환경으로 라우팅하는 방식으로 작동합니다. 이를 통해 사용자는 별도의 환경 조율 없이 즉시 작업에 몰입할 수 있게 되었습니다. 또한, 서비스 간 호출 시에도 분산 추적 컨텍스트(Baggage)에 식별자를 포함시켜 추적성을 유지했습니다. 코어플랫폼팀의 지원과 PS팀의 협업을 통해 터미널 기반 배포 흐름 및 여행자 앱까지 기능이 확장되었습니다. 현재는 대시보드를 통해 사용 현황을 실시간으로 모니터링하며 지속적인 개선 작업을 진행 중입니다. 향후 AI 에이전트가 직접 사용하는 환경까지 고려한 발전 방향을 모색하고 있습니다.

돌려쓰던 테스트 환경을, 각자의 환경으로: 배포 병목을 없앤 이야기