SSL Termination은 SSL 암호화 트래픽을 백엔드 서버로 전달하기 전에, 로드밸런서(ALB)에서 암호화를 해제하고 HTTP로 전달하는 방식입니다. 이 방식은 SSL 처리 부담을 백엔드가 아닌 ALB가 담당하기 때문에 서버 부하를 줄일 수 있고, 인증서도 ALB에만 설치해 관리할 수 있다는 장점이 있습니다.
😃 이번 글에서는 이 구조를 선택한 이유와 그 과정에서 발생한 작은 이슈와 해결 방법을 공유하고자 합니다.
사용자 → HTTPS (443) → ALB → HTTP (80) → 서버
장점
💡 왜 SSL 터미네이션을 선택했을까?
개발 과정에서 HTTPS 전환을 빠르게 적용해야 하는 상황이었기 때문에, 복잡한 설정 없이 로드밸런서에만 인증서를 설치하는 방식을 먼저 선택했습니다.
물론, 모든 구간을 암호화하는 End-to-End 방식보다는 보안 수준이 낮을 수 있지만, 현재 구조는 내부 네트워크에서만 통신이 이뤄지기 때문에 큰 문제가 없다고 판단했습니다.
자세한 설정 방법은 이 글을 참고해 주세요!
🚨 문제 요약: 리다이렉트가 HTTP로 발생
카카오 로그인 연동 과정에서, Spring Boot가 HTTP URL로 리다이렉트하여 인증 흐름이 중단되는 문제가 발생했습니다.

📌 원인
‼️ HTTPS와 HTTP 혼용 현상

⚙️ 해결 방법: ALB 설정 변경
ALB의 X-Forwarded-Proto 전송 옵션을 사용으로 변경하면 해결됩니다.
변경 전후 흐름 비교
변경 전: 브라우저 --HTTPS--> ALB --HTTP (헤더 없음)--> Spring
변경 후: 브라우저 --HTTPS--> ALB --HTTP + X-Forwarded-Proto: https--> Spring
이제 Spring Boot는 HTTPS 요청임을 인식하고, OAuth 리다이렉트를 https:// URL로 생성합니다.
🌱 Spring 설정 추가
Spring Boot에서도 전달된 헤더를 인식할 수 있도록 다음 설정이 필요합니다.
# application.yml
server:
forward-headers-strategy: framework

X-Forwarded-* 헤더는 로드밸런서나 프록시가 원래 요청 정보를 백엔드 서버에 전달하기 위해 추가하는 표준 헤더입니다. HTTPS → 프록시(ALB) → HTTP 환경으로 바뀌더라도, 원래의 요청 정보를 보존할 수 있게 해줍니다.
X-Forwarded-Proto
X-Forwarded-Port
X-Forwarded-For