# 작업일지 16 / SSE를 연결해보자! Event source polyfill 라이브러리 사용해보기. 연결은 왜 끊어지지 않는가.
알림 데이터 수신을 위해 아래와 같이 SSE 연결 코드를 작성했다.
로그인시에 그전 알림이 한꺼번에 수신되는건 안되어서, 이벤트를 발생시켜 보았다. 일단 알림을 수신할 대상에게 제대로 알림이 오는 것을 확인!
EventSourcePolyfill 을 사용했더니 45000밀리세컨드마다 리커넥팅을 시도한다.
서버가 계속 다운되는 이유는 SSE로 확인되었다. SSE 연결 전 2개에 불과했던 스레드 풀이 연결 후 12개 18개 그리고 맥시멈으로 지정했던 20개를 넘어서면서 에러가 발생하는 것으로 확인되었다.
조금 찾아보니 SSE 연결이 되어있는 상태에서 제대로 연결을 종료하지 않고 새로운 연결을 시도했을 때 이런 문제가 발생할 수 있다고 하고, 45000밀리초마다 새로 연결을 시도하는게 연관이 있는 것 같아 이를 토대로 문제를 해결해보고자 한다.
이 문제를 해결하려면
1. EventSource 객체가 꼭 필요한 순간에 생성되어야 하고 2. 사용하지 않게 되면 적절하게 해제시켜 줘야 한다. 특히 45000밀리세컨드마다 리커넥팅을 하는데 이 때 연결이 제대로 끊어지지 않는 것 같아서 끊어지도록 코드를 수정했다.
위 코드는 EventSource 객체를 만들어서 연결하는 코드
아래 useEffect에서 컴포넌트 마운트시에 fetchSSE 코드가 실행되도록 한다.
언마운트시에는 close 되도록 했는데, 이 메서드가 잘못된 것인지? 연결이 제대로 끊어지지 않는 현상 발생.
이에 대해 백엔드 분들과 여러 해결 방안을 생각해 보았는데,
1. SSE 연결을 종료하는 API를 만들자 -> 창이 종료되는 이벤트도 감지해서 연결을 끊어줘야한다.
2. 서버에서 SSE 연결을 끊는 시간과 리커넥트를 확인하는 heartBeatTimeout을 30초로 통일하자. 그러면 서버에서 끊어지자마자 다시 재연결 되지 않을까? -> 테스트 안해봐서 잘 모르겠음.
어쨌든 지금 급선무는 사실 SSE 가 45밀리세크마다 리커넥트가 되지 않도록 하는게 제일 좋은 것 같다. Event source polyfill 라이브러리의 기본 설정인 것 같은데 아주 엄청나게 긴 시간동안 재요청을 하지 않도록 늘리는 것 이외에 다른 방법이 떠오르지 않는다.
어째서 onclose는 정상 동작하지 않는가? 아마 내일도 이 문제를 해결하려고 노력할 것 같다...! 일정이 생각보다 지연되고 있다. 흠...