배포 없이 앱과 로컬 웹을 잇다
두줄요약
배달의민족은 앱과 로컬 웹을 배포 없이 연결하기 위해 ITDA 프록시 시스템을 설계했습니다. CloudFront Function과 웹소켓 터널링으로 요청을 분리하고 로컬 개발 환경으로 안전하게 전달했습니다.
문제 상황
- 배달의민족 앱의 웹뷰 개발 화면을 확인하려면 베타 배포와 코드 리뷰, 테스트, 빌드, 캐시 무효화까지 거쳐야 하는 불편
- 브라우저 확장 프로그램이나 사내 환경용 도구는 유지보수와 버그 대응 부담이 커서 한계
- 특정 사용자·특정 요청만 로컬 환경으로 분리해 앱과 웹을 실시간으로 잇는 방식 필요
구조와 흐름
- 웹뷰 요청은 CloudFront와 S3를 거쳐 전달되며, 이 흐름 위에서 로컬로 보낼 요청을 판별하는 구조 설계
- 개발자 PC에서 ITDA 클라이언트가 웹소켓을 먼저 맺고, 프록시가 라우팅 규칙에 따라 알맞은 터널로 요청 전달
- 요청별 고유 ID로 HTML, JS, CSS, 이미지 등의 응답을 다시 원래 요청과 매칭
선택 이유
- A안 rewrite는 내부 목적지 변경 방식이라 보안 요구사항 충족이 어려움
- B안 앱 내부 라우팅은 도메인 추가 때마다 앱 수정이 필요하고 라우팅 책임이 앱에 쌓이는 문제
- C안 redirect는 일반 베타 트래픽과 ITDA 트래픽을 분리하면서 앱 수정 없이 운영 가능
성능/운영 포인트
- 터널이 없거나 규칙이 없으면 원래 베타 환경으로 되돌리는 안전장치
- 라우팅 규칙은 DB에 저장하고 현재 연결된 웹소켓은 프록시가 직접 관리
- 여러 리소스 요청을 하나의 웹소켓으로 처리해도 요청 ID로 응답 뒤섞임 방지

