[백로그] Message를 실시간으로 바꿔보자 : WebSocket (4)

Jade·2023년 2월 16일
1

프로젝트

목록 보기
19/28

약간 문제가 있었던 과외 매칭 요청 시 매칭 요청 띄우기까지 완료!

(get요청으로 받아오는 함수가 두 개였는데, 새로고침 시 get요청으로 받아온 데이터를 구조분해할당하는 과정에서 작은 실수가 있었다 ^^... )

이제는 정말로 실시간 채팅 구현 완료라고 이야기할 수 있다 🥹

다음 작업시간부터는 알림 기능을 구현할 예정이다.
원래는 알림 기능 자체를 SSE로 구현하려고 했었는데, 오늘 회의를 하면서 웹소켓을 사용하는 게 그다지 효율적이지 못할 것 같다는 결론이 나왔다.

서버에서 웹소켓을 사용하게 되면 사용하는 동안 웹소켓은 스레드 하나를 계속해서 차지하고 있게 된다고 한다, 이게 과연 요청을 한 번 보내고 받은 뒤 스레드를 비울 수 있게 되는 것보다 적어도 알림 기능에 있어서 효율적일지 모르겠다는 게 이유였다. (백엔드 팀원분의 이야기를 백엔드를 잘 모르는 내 입장에서 듣고 적은 거라 정확한 설명이 아닐 수 있음 !)

실제로 알림이 있는지 없는지 확인하는 데에만 웹소켓이 사용될 예정이었고, 오늘 회의로 알림 기능은 알림 관련 API를 새롭게 개발해서 사용할 예정이다.


오늘의 에러 😆

오늘 에러는 https를 웹소켓에 적용하면서 일어났다.
위 이미지와 같이 Refused to display 'https 서버 url' in a frame because it set 'X-Frame-Options' to 'sameorigin' 와 같은 문구를 콘솔에서 발견할 수 있었는데...

결과적으로 에러가 일어난 이유는 nginx 때문이었다.
nginx도 일종의 서버인데, EC2 서버로 요청을 넘겨주는 (입국심사 같은) 중개 서버라고 생각하면 된다.
목적은 부하를 방지하기 위한 것이고, 요청들을 받아서 뒤로 분기해주는 역할을 한다. (일종의 리버스 프록시)

웹소켓 upgrade 요청이 들어올 때 nginx가 입국심사를 해서 웹소켓 요청을 들여보내주지만 헤더에 있는 프로토콜 업데이트 메시지를 뒤로 전달해주지 않는다고 한다. 그래서 '이게 뭔데??????'하고 서버가 당황하는 일이 생겼던 게 오늘 에러의 요약이라고 할 수 있겠다.

해결법은... 요즘 우리 팀원들이 사용해보는 데 푹 빠져있는 chatGPT에서 얻을 수 있었다.

백엔드 코드에 대해 잘 아는 건 아니지만, 어쨌든 nginx 설정 파일에서 헤더에 프로토콜 업드레이드와 관련된 내용을 담아서 보내준다는 점이 해결의 열쇠인 것 같았다.

더 자세한 내용은 이 블로그에서 참고할 수 있을듯.

profile
키보드로 그려내는 일

0개의 댓글