이전 팀프로젝트에서 socket.io를 통해 서비스 알림 기능을 구현했다. 이번 최종프로젝트에서는 운좋게 socket.io를 통해 1:1 채팅을 구현할 수 있게 됐다. 그래서 오늘 해당 기능을 위해 약간의 공부와 기본 구성을 만들었다. 비슷한듯하면서도 응용이 필요한 1:1 채팅기능을 정리해보겠다.
알림 기능과 1:1 채팅의 차이점은 무엇이 될까?
데이터 구조 및 저장
- 알림: 보통 단방향 데이터 흐름으로, 서버에서 클라이언트로 짧은 메시지 전송.
- 채팅: 양방향 데이터 흐름으로, 메시지의 송수신이 빈번하며, 메시지 기록을 저장하고 조회할 필요가 있음.
실시간 통신
- 알림: 특정 이벤트 발생 시 알림을 푸시.
- 채팅: 지속적인 연결을 유지하며, 메시지 송수신을 실시간으로 처리.
유저 인터페이스
- 알림: 간단한 UI로 알림 리스트를 표시.
- 채팅: 대화 UI가 필요하며, 메시지 입력, 전송, 표시 등의 기능이 요구됨.
기능성
- 알림: 보통 수신 확인, 읽음 상태 확인 등이 필요하지 않음.
- 채팅: 메시지 읽음 확인, 타이핑 상태 표시, 메시지 전송 상태(전송 중, 전송 완료, 전송 실패) 등을 구현해야 할 수 있음.
구현 시 고려 사항
그렇다면 이 차이점을 가지고 고려해야할 부분은 어떤 부분이 있을까?
웹소켓 설정
- 알림과 동일하게 NestJS의
WebSocket
모듈을 사용하여 실시간 통신을 설정할 수 있음. - 1:1 채팅에서는 각 유저를 특정 방(room)으로 분리하여 관리할 수 있음.
메시지 저장
- 채팅 메시지를 데이터베이스에 저장해야 함.
- 메시지의 송수신 시간을 기록하고, 대화 상대와 메시지 내용 등을 저장.
인증 및 권한 관리
- 각 채팅 메시지의 송수신자가 인증된 유저인지 확인.
- 각 유저가 본인의 채팅 내역에만 접근할 수 있도록 권한을 설정.
채팅 방 관리
- 각 유저 쌍에 대해 고유의 채팅 방을 생성하고 관리.
- 채팅 방 리스트를 관리하고, 필요한 경우 채팅 방을 삭제.
이러한 고려사항을 바탕으로 해당 기능을 구현해나갈 예정이다. 이미 어느정도의 틀은 잡아놓긴했지만 실제로 잘 구동할지는 내일 테스트해봐야할 것 같다. socket.io에 대해 더 자세히 알아갈 수 있는 좋은 기회를 갖게 되어 기쁘다.
'개발 기초 다지기' 카테고리의 다른 글
socket io 1:1 채팅 구현 (2)jwt 토큰 전달 (0) | 2024.08.02 |
---|---|
socket io 1:1 채팅 구현 (1)채팅방 DB 저장 (1) | 2024.08.01 |
Linux 명령어 정리 (1) | 2024.07.24 |
DB 분할? (0) | 2024.07.22 |
distinctAlias 문제 (쿼리 빌더) (0) | 2024.07.22 |
댓글