본문 바로가기

dev

[JAVA] Broken pipe, SocketTimeoutException 발생 원인 분석 - 2

이전에 Broken pipe가 발생하는 원인을 찾아봤었는데 프론트에서 너무 빠르게 연결을 닫아

백엔드에서 응답을 반환할 때 예외가 발생하던 거였다

 

자세하게 들어가서 어떻게 실패했는지 찾아보면 

 

백엔드에서 요청을 처리하던중 프론트에서 1분이 지나면 504 Gateway time-out으로 먼저 연결을 종료해버린다

 

현재 전산에서는 리버스 프록시 프로그램 Nginx를 사용하고 있는데

리버스 프록시와 프록시 프로그램 사이에 통신시간이 초과되며 리버스 프록시 프로그램에서 먼저 연결을 끊어버리게 되는 문제였다

 

그래서 timeout설정을 설정해줘야 하는데 timeout의 종류는 3종류가 있으며 기본값은 60s이다

 

connect_timeout : 프록시 연결시 만료시간

send_timeout : 요청 전송시 만료시간

read_timeout : 응답 수신시 만료시간

 

위의 경우는 요청은 전송됐으나 응답 수신대기중 만료되는 상황으로 nginx.conf파일에 read_timeout을 설정해주면 된다

추가하기전 Nginx가 서버와 통신하는 방법은 fastcgi, proxy 두 종류가 있는데 사용하는 방법으로 설정해준다.

 

server {

    ...

    location / {

        ...

        # fastcgi인 경우

        fastcgi_read_timeout 300; # 기본값은 60

        # proxy인 경우

        proxy_read_timeout 300; # 기본값은 60

 

 

수정후 Nginx를 재시작하고 요청을 보내면..

 

 

504가 뜨지않고 성공!