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