최근에 운영 중이던 *.sample.io
도메인을 *.sample.com
으로 전환해야 하는 작업이 있었습니다. 단순히 주소를 바꾸는 것을 넘어, 기존 .io
도메인으로 들어오는 모든 사용자를 새로운 .com
주소로 끊김 없이 안내하고, 최종적으로는 .io
도메인을 완전히 제거하는 것이 목표였습니다.
어떤 방법으로 리디렉션할까?
가장 먼저 AWS 공식 문서를 찾아보니, 크게 세 가지 방법을 제안하고 있었습니다.
- S3와 CloudFront를 사용한 리디렉션
- Application Load Balancer(ALB)를 사용한 리디렉션
- CloudFront 함수를 사용한 리디렉션 저희 서비스는 이미 여러 서브도메인이 ALB를 통해 서비스되고 있었기 때문에, 기존 인프라를 최대한 활용할 수 있는 두 번째 방법, 즉 ALB를 이용한 리디렉션이 가장 합리적이라고 판단했습니다. 마침 AWS에서도 이 방법을 가장 권장하고 있었고요.
계획, 그리고 예상치 못한 복잡성
계획은 간단해 보였습니다. ALB의 리스너 규칙에 HTTP 리디렉션 설정을 추가하면 끝날 일이었죠.
그런데 AWS 문서를 자세히 보니, 저희 상황과는 조금 달랐습니다. 문서는 보통 단일 도메인-단일 ALB의 간단한 경우를 다루는데, 저희 서비스는 admin.sample.io
, client.sample.io
, api.sample.io
처럼 여러 서브도메인이 각기 다른 ALB에 연결된 구조였거든요.
결국, .io
도메인으로 들어오는 요청을 처리하는 모든 ALB에 각각 리디렉션 규칙을 설정해줘야 한다는 걸 깨달았습니다. 작업의 범위가 생각보다 컸죠.
운영 환경에 적용하기 전, 안전한 테스트는 필수
운영 중인 도메인의 DNS나 로드밸런서를 건드리는 건 꽤 부담스러운 일입니다. 작은 실수 하나가 서비스 전체에 영향을 줄 수 있으니까요. 그래서 실제 운영 환경에 적용하기 전에, 이 설정이 정말 의도대로 작동하는지 검증할 안전한 테스트 환경을 만들기로 했습니다.
테스트 절차
별도의 테스트용 인스턴스 없이, AWS의 기본 기능만으로 리디렉션을 테스트하는 과정을 찾았습니다.
- 일부러 비워둔 대상 그룹 생성
먼저
redirect-test-tg
라는 이름으로 대상 그룹(Target Group)을 생성했습니다. 여기서 핵심은 인스턴스 대상으로 만들되, 실제 인스턴스를 아무것도 등록하지 않고 비워두는 것입니다. - 테스트용 ALB 생성
다음으로
redirect-test-alb
라는 테스트용 ALB를 만들고, 리스너의 기본 규칙이 방금 만든 텅 빈 대상 그룹을 가리키도록 설정했습니다. - DNS 연결 및 503 오류 확인
Route 53에서
test.sample.io
같은 테스트용 서브도메인을 만들고, 이 도메인이 테스트용 ALB를 가리키도록 A 레코드를 설정했습니다. 이 주소로 접속했을 때503 Service Temporarily Unavailable
오류가 뜨면 성공입니다. 대상 그룹에 연결된 인스턴스가 없으니 서비스가 불가능하다는 응답은 당연한 결과고, 이는 DNS부터 ALB까지의 연결이 의도대로 설정되었다는 확실한 증거가 되거든요. - 리디렉션 규칙 추가 및 검증
이제 테스트용 ALB 리스너에 리디렉션 규칙을 추가했습니다. 예를 들어,
test.sample.io
로 들어오는 모든 요청을 제 개인 블로그(blog.moseoh.com
)로 보내도록 설정했습니다. 마지막으로 터미널에서curl
명령어로 최종 확인을 했습니다.L
옵션은 리디렉션을 따라가도록 해줍니다.
curl -Iv <http://test.sample.io> -L
이 명령어를 실행했을 때, HTTP 301 리디렉션 응답이 오고 최종적으로 제 블로그 주소로 연결되는 것을 확인하며 테스트를 마쳤습니다. test.sample.io/docs
같은 하위 경로도 blog.moseoh.com/docs
로 잘 유지되는 것까지 꼼꼼히 확인했습니다.
테스트 자원 정리
테스트가 끝나면 생성했던 임시 자원들은 즉시 삭제해서 비용이나 관리 포인트가 남지 않도록 정리하는 것이 중요합니다.
- Route 53에서
test.sample.io
레코드 삭제 - EC2에서
redirect-test-alb
로드 밸런서 삭제 - EC2에서
redirect-test-tg
대상 그룹 삭제 이 검증 과정을 거치고 나니, 운영 환경의 여러 ALB에 동일한 설정을 적용하는 것에 대한 확신이 생겼습니다.
마무리하며
이번 경험을 통해 복잡해 보이는 인프라 변경 작업도, 작은 단위로 나누어 테스트 환경에서 먼저 검증하는 과정이 정말 중요하다는 걸 다시 한번 느꼈습니다. 특히 실제 인스턴스 없이 ALB와 대상 그룹만으로 리디렉션 로직을 테스트할 수 있었던 이 방법은, 앞으로 비슷한 작업을 할 때 유용하게 쓰일 것 같습니다.