websocket을 이용한 채팅서버개발 고생기(1)

sunn_ni·2024년 6월 18일
0

트러블슈팅

목록 보기
3/5
post-thumbnail

노션에다가만 적어놓았다가
블로그시작하니 예전에 고생했던 기록이 하나둘씩 떠오른다.

이전에 취준생 및 대학생 시절..
인터넷 강의로 socket을 활용한 채팅을 만들어본적이있다.

회사에서 작년에 채팅서버를 새로 만들어야할것같다 라는 말을 들었을 때

그때랑 별다를것없고 어렵지 않을것같은데..

라는 아주 무시무시한 착각을 하고서 덜컥 받아버린다.
그때 깨달았었어야 했다.. 왜.. 나의 사수가 나를 그런눈을 처다봤는지..

아무튼간에 작년에 채팅서버를 만들고 1년이지난지금에서 생각해보면 가장 헤맸던건

1. 왜.. 인강 따라했을때처럼 소켓연결이 부드럽지도 않고 연결이 안될까...?
2. 요구사항에 맞게 내가 배웠던걸 응용만 하면 될 뿐인데 이게 난이도가 이렇게 올라간다고..?

딱 이 2가지였다.


1. webocket의 프론트와의 연결

혼자서했을땐 로컬서버를 띄우고 pug파일이나 대강 만들어서 테스트를 했었기에 연결이 어렵지 않았는데..
막상 베타서버에 올려놓으니 통신이 안되는거다..

몇일에 걸쳐 이것도 했다가 저겄도 했다가 뻘짓하고 구글링해서 검색한 결과
nginx셋팅을 통해 해결할 수 있었다.

    location /socket.io/ {
		....
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

이후에

sudo systemctl restsart nginx

를 통해 변경한 설정을 적용시키면 된다.

이때 nginx를 처음 만져보았었는데
여기서 나와같은경우는 해결법을 찾고도 저 많은 nginx설정중에 어디다가 넣어야하는지 몰라서
정말 nginx설정을 계속 하나하나 바꿔가며 적용시키면서 했었다.
사실 지금도 저게 맞는건지는 모르겠으니 각자 상황에 따라서 변경해보길 바란다.

다른건 모르겠지만 가장 중요한 코드는 location이 아니라 그 내부에 4줄이니 저 4줄을 어디다가 놓아야할지를 각자 상황에 맞추도록 하자.

https://velog.io/@habins226/Nginx-WebSocket%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%84%A4%EC%A0%95-%EB%B0%A9%EB%B2%95

블로그보니까 나말고도 진짜 다들 고생많이한것같다.. 저기에 더 자세한 설명이 있어 첨부한다.

2. webocket관련 설계 다시..

거기다가, 대강 설계를 조금만 틀어서 저장구조랑 만들면 되겠지 했지만.. 소켓은 연결될때마다 socket id가 변경되었고.. 사람들이 권장하지는 않는 방법이지만, socket과 api통신을 둘다 하려니 정말 막막했다..

api통신을 하자니 broadcast로써만 작동을 했다.. target을 지정하려해도 reqest값에서 socket id 받는것에 실패를 하는바람에 나빼고 보내는것도 실패 ....

그래서 그냥 api는 broadcast만으로 동작할 수 있게 해볼까..?
라는 헛생각을 잠시마나 했었다.

거기다가... 이전에는 node + socket으로 만들었었는데 이번엔 nest + websocket 이라
레퍼런스 또한 많이 없었어서 공식문서와 맨땅의 헤딩으로 겨우겨우 만들었다.
회사내에 다른분들도 socket쪽은 아에 모른다고하시니.. 우선은 내가 간 길이 정답이다 하는수밖에..

이 부분에 대해서는 말로만작성하기 너무 힘들어서 추후에 시간이 된다면 ... 작성하는걸로..!

.
.
.
.

진짜 만들면서 느꼈던건.. 카카오톡.. 라인.. 등등 진짜 엄청난거구나....

profile
방황중인 서버개발자

0개의 댓글