본문 바로가기

소프트웨어 이야기/인프라

[AWS] 애플리케이션 서버에서는 200을 내려줬는데, LB 단에서는 왜 5XX 응답 코드가 내려올까?

이번주는 트러블 슈팅을 많이 했던 한 주였다.

그러면서 배웠던 내용을 정리하고자 한다.


호기심의 발단

이번주에 메인 어플리케이션에서 통신하는 서버에서 장애가 발생하여, 에러가 발생했던 적이 있다.


그래서 AWS Cloud Watch로 당시의 응답코드를 확인해봤다. 

확인해보니, 애플리케이션 서버 단에서는 항상 200을 리턴해줬었다. 

반면 ELB에서는 5xx대의 HTTP 응답코드를 내려준 적이 있다는 이력이 남아 있었다.

애플리케이션 단에서는 항상 200을 내려줬는데, ELB 단에서는 5XX대의 응답코드를 받았다고 하기에, 이상했다.


이 차이는 어디서 발생한걸까?


원인

알고보니, 로드밸런서 단에서 알아서 5XX대의 응답코드를 내려주는 케이스가 있다는걸 알게되었다.

(나와 비슷한 문제를 경험한 사람이 스택오버플로우에 글도 올렸었다. => AWS ELB throwing 5XX but the registered instances are not throwing 5XX errors )


애플리케이션 서버의 상태가 불안정한 경우, LB단에서 알아서 통신을 끊어주는 케이스가 있다는걸 알게되었다. 


예를 들어 애플리케이션 서버가 새로운 요청을 처리할 수 있는 상황이 아니라던가, 응답속도가 너무 느리다거나 하는 상황에서는 LB 단에서 5xx대의 응답코드를 내려준다.


LB 단에서 내려주는 HTTP STATUS CODE는 3가지가 있다.

- HTTP 502 (Bad Gateway) 

- HTTP 503 (Service Unavailable) 

- HTTP 504 (Gateway Timeout)


응답코드의 자세한 설명은 아래의 AWS 공식 자료를 참고하면 된다.

- I receive HTTP 5xx errors when connecting to web servers running on EC2 instances configured to use Elastic Load Balancing. How do I troubleshoot these errors?

Troubleshoot a Classic Load Balancer: HTTP Errors