피드로 돌아가기
Dev.toDevOps
원문 읽기
3개 Emulator를 1개 Binary로 통합하여 CI 준비 시간을 7초로 단축
How I replaced three Azure emulators with one binary, added Key Vault and ACR, and cut my CI setup to a single step
AI 요약
Context
Azurite, Service Bus, Cosmos DB 등 개별 Emulator 사용으로 인한 Docker Compose 설정 복잡도 증가 및 CI 파이프라인 비효율 발생. 특히 Apple Silicon 환경의 Cosmos DB 에뮬레이터 구동 불가 문제와 Key Vault, Entra ID 등 일부 서비스의 Local 테스트 부재로 인한 Production 리스크 상존.
Technical Solution
- 단일 바이너리 기반의 Topaz 도입을 통한 Blob, Queue, Table, Service Bus, Cosmos DB, Key Vault, ACR, Entra ID의 통합 에뮬레이션 구현
- 단일 Health Endpoint(/health) 기반의 통합 대기 루프 설계를 통한 CI 워크플로우 단순화
- dnsmasq 설정을 통한 *.topaz.local.dev 와일드카드 도메인 해결로 개별 리소스별 /etc/hosts 설정 제거
- AzureLocalCredential 도입을 통해 코드 변경 없이 Local Endpoint 연결 및 Mocking 제거
- RBAC 및 권한 계층 구조의 Local 강제를 통한 테스트 신뢰도 확보 및 실제 Azure 환경과의 일치성 강화
- az cloud register를 통한 Custom Azure Cloud 설정으로 az login 및 Entra ID 인증 흐름 로컬 구현
Impact
- CI 준비 시간: 개별 에뮬레이터 대기 시간에서 Topaz 기동 후 7초(시작 5s + 폴링 2s)로 단축
- 전체 잡 실행 시간: DNS 설정 및 테스트 포함 총 38초 달성
- 인프라 구성: 3개의 Docker 이미지 및 3개의 대기 루프를 1개의 이미지와 1개의 루프로 통합
- 플랫폼 호환성: Apple Silicon 및 x64 환경에서 동일한 동작 보장
Key Takeaway
분산된 Local Emulator 환경은 설정 복잡도와 테스트 누락을 유발하므로, 전체 스택을 포괄하는 Unified Emulation Layer 구축이 개발 생산성과 배포 안정성을 동시에 높이는 핵심 전략임.
실천 포인트
- Local 테스트 불가 영역(Key Vault, Entra ID 등)을 Mocking 대신 통합 에뮬레이터로 대체 가능한지 검토 - CI 파이프라인 내 다중 서비스 Health Check 루프를 단일 통합 엔드포인트 방식으로 단순화 - 플랫폼 간(ARM vs x64) 에뮬레이터 호환성 격차로 인한 테스트 누락 여부 확인