본문 바로가기
TIL

TIL내일배움캠프 14주차 최종프로젝트 실시간 채팅

by 율량동박씨 2024. 7. 19.

오늘의 키워드

  • 실시간 채팅
  • WebSocket
  • STOMP

오늘의 내용

실시간 채팅 API 명세

  1. 엔드포인트
    • POST /chat/send: 채팅 메시지를 보내기 위한 엔드포인트
    • GET /chat/receive: 채팅 메시지를 받기 위한 엔드포인트
  2. WebSocket 엔드포인트
    • /ws/chat: WebSocket 연결을 위한 엔드포인트
  3. STOMP 엔드포인트
    • /app/sendMessage: 메시지를 보내기 위한 STOMP 엔드포인트
    • /topic/messages: 구독된 클라이언트들에게 메시지를 전달하기 위한 엔드포인트
  4. Request 및 Response 형식
    • Request (sendMessage)
      json
      코드 복사
      { "from": "사용자 이름", "text": "메시지 내용" }
    • Response (receiveMessage)
      json
      코드 복사
      { "from": "사용자 이름", "text": "메시지 내용", "timestamp": "전송 시간" }

ERD 작성법

  1. User (사용자) 테이블
    • 필드
      • id: 고유 식별자 (Primary Key)
      • name: 사용자 이름
      • email: 이메일 주소
      • password: 비밀번호
  2. ChatRoom (채팅방) 테이블
    • 필드
      • id: 고유 식별자 (Primary Key)
      • name: 채팅방 이름
      • created_at: 생성 시간
  3. Message (메시지) 테이블
    • 필드
      • id: 고유 식별자 (Primary Key)
      • content: 메시지 내용
      • sender_id: 송신자 ID (Foreign Key, User 테이블 참조)
      • chat_room_id: 채팅방 ID (Foreign Key, ChatRoom 테이블 참조)
      • sent_at: 전송 시간

주요 구성 요소

1. WebSocketConfig

 WebSocketConfig는 Spring Boot에서 WebSocket을 설정하는 구성 클래스로 WebSocket 엔드포인트를 정의하고, 메시지 브로커를 설정한다

 

2. ChatController

ChatController는 클라이언트의 메시지를 처리하는 컨트롤러로 메시지를 받고, 이를 적절한 주제로 발행하여 구독자들에게 전달한다

 

3. ChatMessage

ChatMessage는 채팅 메시지의 데이터를 담는 DTO(Data Transfer Object) 클래스로 메시지의 내용, 송신자, 전송 시간을 포함한다

 

4. WebSocket 엔드포인트

 WebSocket 엔드포인트는 클라이언트와 서버 간의 WebSocket 연결을 관리고 이 엔드포인트를 통해 서버와 실시간으로 통신할 수 있다

 

5. STOMP 엔드포인트

STOMP 엔드포인트는 클라이언트가 메시지를 전송하고 구독할 수 있도록 하고 엔드포인트를 통해 특정 주제를 구독하고, 메시지를 전송할 수 있다

 

오늘의 회고

 최종프로젝트가 시작되고 어제부터 팀원들과 기획에 관해 회의를 거쳐 커뮤니티를 프로젝트 주제로 선정하게되어 오늘 각자 맡을 기능을 나누었다. 담당 튜터님과 면담 결과 너무 단순한 api들만 있다 해서 각자 맡은 부분에서 특별한 로직을 하나씩 추가해보자 해서 커뮤니티 그룹을 담당한 나는 그룹원끼리 실시간 채팅 기능을 만들어 보려 한다. 제발 아무 일 없이 마칠 수 있기를....