최근 AWS에서 백엔드 배포를 수행하던 중, 문제가 있었다.
진짜 너무너무 싫은 오류...
확인해보니, Target Group에 연결한 인스턴스에 대한 Health Check가 실패하여, 위와 같은 오류가 발생하는 것이었다.
✅ 현재 상황
- 보안을 위해 private subnet 내의 EC2 인스턴스에서 스프링 프로젝트를 구동 중
- EC2 인스턴스의 보안 그룹 (ssh, source: public subent의 IP CIDR)
- 현재 내가 구성한 아키텍처는 다음과 같다.
✅ 원인 분석
curl http://localhost:8080/health (헬스체크 경로)로 확인하면 OK 응답이 나옴. = 프로젝트 이상 없음
따라서, ALB가 보내는 헬스체크 요청을 EC2가 받을 수 없는 상황임이 가장 유력한 이유였다.
정리하면,
⇒ "EC2의 인바운드 보안그룹 규칙에 ALB의 접근이 허용되지 않음"
- EC2는 8080 포트에서 애플리케이션을 실행중
- ALB는 Target Group을 통해 EC2의 8080 포트로 헬스체크 요청
- 그런데, 보안 그룹에서 8080 포트에 대한 인바운드를 열어주지 않으면 ALB가 접근할 수 없음.
✅ 해결 방법
⇒ EC2 인스턴스의 보안그룹에 ALB의 보안그룹을 추가
ALB가 사용하는 보안그룹과 동일한 보안그룹을 Source로 하는 인바운드 규칙을 추가해주었다.
스프링 프로젝트에 접근해야 하므로, 포트는 8080으로 설정하였다.
✅ 적용 후 결과
이전에는 보안을 크게 신경쓰지 않고 Private이 아닌 Public에 EC2를 두고 배포를 하기도 했고,
보안그룹 인바운드 규칙의 Source를 모든 IPv4로 설정했다보니 이런 문제가 발생하지 않았던것 같다.
(편하지만 보안박살)
앞으론 보안을 더 신경쓰는 아키텍처를 구축해야겠다.. ㅎㅎ
'AWS' 카테고리의 다른 글
[AWS] 탄력적 IP 주소 v.s. 자동 할당 IP 주소 (1) | 2025.06.28 |
---|---|
[AWS] NAT Gateway 대신 NAT Instance로 비용 절감하기 (2025 ver) (0) | 2025.06.28 |
[AWS][트러블슈팅] ALB의 Internet-facing vs Internal (0) | 2025.06.26 |
Artillery 부하테스트 (0) | 2025.06.21 |
[AWS][트러블슈팅] EC2 CPU100% 문제 해결 (1) | 2025.06.04 |