본문 바로가기

전체 글26

NestJS + Websocket으로 채팅만들기 #3 (feat. 채팅 "방" 만들기) 채팅방 만들기 채팅 "방"을 만들기 위해서는 각각 개별적인 구분이 필요하다. 입장 해 있는 회원목록이나 회원수가 필요할 것이고, 누가 방장이고, 방 이름이 무엇인지 입력이 필요하다. 직접 room의 Object를 컨트롤 해주는 방법 도 좋지만, Socket.io 에서는 Room 이라는 기능을 제공한다. 👉 [Namespace 와 Room 이란?] 단순하게 //채팅방 들어가기 @SubscribeMessage('enterChatRoom') enterChatRoom(client: Socket, roomId: string) { client.join(roomId) } 이런 형태로 client를 room 에 들어갈 수 있다. room은 별도로 생성 할 필요는 없고 단순히 join을 할 경우 room이 생성된다. 마.. 2021. 7. 26.
NestJS + Websocket으로 채팅만들기 #2 (feat. Socket.io) 이전까지 페이지에 접속하면 채팅방에 접속하여 채팅방으로서의 역할만을 하는 기능을 제작했다. 이번에는 채팅방을 생성할 수 있다. 채팅방 목록 페이지에서 본인의 닉네임을 설정하고, 변경은 목록페이지에서만 가능하다. 채팅방에 접속하면 이전 채팅글을 볼 수 있고, 100개단위로 이전 채팅글을 불러올 수 있다. 글자수 혹은 json size의 제한을 통해 바이너리형태의 직접적인 데이터 전송, xss 등의 보안부분도 추가해준다. 닉네임등록시 금지어를 설정하여 비속어 등을 제한한다. 사이트를 껐다 킬 경우에도 채팅방에 닉네임은 유지된다. 1번 6번에 해당하는 작업을 진행해보려고 한다. 1번 6번 작업하기에 앞서 현재 NestJS 서버의 Websocket이 Socket.io 가 아닌 ws 이다. 따라서 Websocke.. 2021. 7. 25.
Prisma의 단점 - Timezone, 다른ORM은? Prisma 를 사용하다보면 모든사람이 느끼고있는 고통이 하나가 있다. 바로 DateTime 이다. 이게 왜 문제가 되냐하면 문제는 이러하다. prisma.member.create({ data:{ mem_name: '이름', mem_wdate: new Date() } }) mem_wdate 칼럼이 DateTime 으로 설정되어있다고 한다면, 위와같이 row를 생성해줄 수 있다. 문제는 생성된 Row가 문제다. 데이터베이스에 저장이 될 때 UTC기준으로 저장이된다. 분명 DB에 등록한시간이 2021년 7월 23일 오후 7시 0분이기 때문에 2021-07-23 17:00:00 을 기대했지만, 정작 데이터베이스에는 2021-07-23 08:00:00 이 저장되어있다. 그 이유는 Prisma에서는 Timezon.. 2021. 7. 23.
NestJS + Websocket으로 채팅만들기 #1 최근 Websocket을 활용하여 사이드프로젝트를 진행한것이 있다. 추후에 오픈소스로 공개 할 예정이지만 kimpga 를 클론코딩하여 만든 https://hsct.io 이다. Websocket Client를 활용하여 서비스 구성하는것은 너무 쉽고 재미있는 경험이었다. 하지만 아직 Server의 입장에서 Websocket을 다뤄 본 경험이 거의 전무하다 싶다. 빠르게 NestJS를 활용해서 채팅을 만들어 볼까 싶었다. NestJS로 Websocket 서버 구축하기 만들고 난 지금 보면 너무 간단하지만, 처음 Docs를 보았을때 내가 생각하는 Websocket이 맞나 싶었다. 👉 [NestJS Docs - Websocket] NestJS Docs에 Websocket 항목이 있는것을 알고 있었으므로 당연히 W.. 2021. 7. 16.