IT/오류 컬렉터 조르디

[AWS ALB] alb health-check 확인 및 에러 해결 Health checks failed with these codes: [302]

토끼개발자 조르디 2025. 6. 20. 14:44

들어가는 글

초기 아키텍쳐의 경우 따로 프로젝트에 AWS ALB 사용이 없었다. 로드밸런싱이 필요하다면 nginx 를 사용하고자 하였는데, 새로 팀에 들어오신 현업자 백엔드분이 AWS 에서 제공하는 기능들을 최대한 사용하는 아키텍쳐로 싹 다 갈아엎으셨다. (positive)

 

▶ 프론트엔드가 vercel 활용 배포를 진행해 https 프로토콜을 사용하도록 설정해두어서 백엔드도 http 에서 https 로 수정하게 되었다. 

 

나는 한번도 해본적이 없는 레벨 0따리 였기 때문에 구조에 대해 어떠한 반박도 안 하고 (못하고) 전부 수용하였다. ㅋㅋㅋ 그래서 이번에 처음으로 ALB 에 대해서 알게 되었는데, 첫만남이 오류라니. 가혹하다. 

 

(아래에 간단한 ALB에 대한 내용 정리와 오류 해결기를 담아보도록 하겠다.)

 

적절한 짤 제공 감사합니다

 


ALB(Application Load Balancer) 에 대하여

왜 사용하는가?

 

 

1) 트래픽 분산: 여러 EC2 인스턴스에 요청을 균등하게 분산시켜줌

2) HTTPS 인증서 적용 가능: TLS/SSL 인증서 연동이 가능해 보안성 확보

3) 도메인 연결 용이: Route53, 가비아 등에서 구입한 도메인을 연결해 사용자 친화적 주소 사용 가능

4) Health Check 기능: EC2 인스턴스의 상태를 자동으로 점검하여, 비정상 인스턴스에는 트래픽을 보내지 않음

 

 

Health Check란?

ALB가 EC2의 상태를 주기적으로 체크하는 방식
▶ 특정 경로(Path)에 프로토콜 요청을 보내서 200 OK 응답이 오면 정상, 그렇지 않으면 비정상으로 판단

 

기본적으로 / 경로를 사용하지만, 실무에서는 보통 /actuator/health를 많이 사용 

 


발생 오류

상황

ALB 를 적용하신 분께서 무언가 문제가 발생했다고 연락이 오셨다. 보내주신 사진을 보니 health-check 에 붉은 글씨로 비정상 이라고 적혀있었다. EC2 인스턴스 먹통의 기억이 떠오르면서 아찔했다. 

 

 

 

그래서 우선 나도 직접 확인을 해봐야겠다는 생각이 들어   EC2 > 대상 그룹 > {프로젝트이름}  으로 들어갔더니, 정말 비정상 이라고 떠있었다. 😇 😇 😇 열심히 돌아다니면서 원인을 찾아봤는데, 상태 확인 세부 정보 에 [302] 오류가 적혀있었다.

 

사실 원인이 적혀있어도 이게 뭐지 싶어서 열심히 찾아보니, ALB 의 경우엔 지정된 경로에 대해서 반환되는 HTTP 응답 코드가 200OK 여야만 정상으로 해준다더라... 우리는 302 가 반환되고 있기 때문에 오류가 난 것이었다. 

 

 

 

 

원인 분석

정확한 원인을 파악하기 위해서 도커 로그를 찾아보았다. 그러자 아래와 같은 로그를 볼 수 있었다.

 

무슨 소리인지 모르겠어서 지피티를 이용했더니 아래와 같았다.

 

 

🐳 Docker 로그의 에러

Invalid character found in method name [...]. HTTP method names must be tokens

 

→ 이 에러는 HTTPS 요청이 HTTP 포트(8080)로 들어올 때 생기는 전형적인 에러입니다.

 

이를 확인하고 내린 결론은, 

ALB가 체크하는 경로가 Spring Security 에 인증되지 않아서 이걸 리다이렉트 처리를 하는 구나. 였다.

 

난 분석한 내용을 지피티에게 다시 알려주며 해결 방법을 알려달라고 했고 결국 오류를 해결했다. 

그 과정을 아래에 적어보겠다. 

 

후후후

 


해결 방법

1) SecurityConfig.java 수정

health-check 를 위해 설정한 경로를 허용해 주기 위한 코드를 추가한다. 

.requestMatchers("/", "/login/**", "/css/**", "/js/**", "/h2-console/**", "/actuator/health").permitAll()

 

 

그런데, 만약 그 경로를 모른다면?? 

아래의 방법대로 찾아가면 확인할 수 있다.

 

⭐️⭐️⭐️

 

EC2 > 대상 그룹 > {프로젝트이름} > 아래 탭 여러개에서 "상태검사" > 경로

 

 

 

2) application.properties 수정

actuator 엔드포인트를 활성화시켜주는 코드 추가

: 이 설정을 하지 않으면 /actuator/health 자체가 응답을 안 하거나 404로 나올 수 있다.

# ✅ 추가 (파일 맨 아래나 아무 위치)
management.endpoints.web.exposure.include=health
management.endpoint.health.show-details=always

 

 

3) build.gradle 에 actuator 의존성 추가

Spring Boot의 Actuator 기능이 자동으로 /actuator/health 엔드포인트를 만들어주기 위해 필요

implementation 'org.springframework.boot:spring-boot-starter-actuator'

 

 


 

결과 확인

로컬 테스팅

우선 로컬에서 먼저 돌려보았다. 아주 잘 돌아가는 것을 볼 수 있다. 

 

굿굿

 

 

배포 후 테스팅

수정 사항을 모두 main 에 버지하여 자동 배포화가 이루어졌다. 결과 확인을 위해 ALB 사이트와 도커 로그를 확인했더니 모두 깔끔하게 정상으로 나왔다.

 

ALB 확인

 

docker 로그 확인

 


참고 링크

https://velog.io/@znftm97/AWS-EC2%EC%97%90-HTTPS-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0#span-stylecolor0b6e995-albapplication-load-balancer-%EC%84%B8%ED%8C%85span

 

[AWS] ALB 및 HTTPS 프로토콜 적용하기

AWS ALB 적용, HTTPS 프로토콜 적용

velog.io