Skip to content

[SO-209] feat: 채팅방 CRD & 실시간 채팅 API 추가#89

Merged
nitronium102 merged 26 commits intodevelopfrom
feature/SO-209-redis-chat
Sep 4, 2023
Merged

[SO-209] feat: 채팅방 CRD & 실시간 채팅 API 추가#89
nitronium102 merged 26 commits intodevelopfrom
feature/SO-209-redis-chat

Conversation

@nitronium102
Copy link
Copy Markdown
Contributor

작업 개요

Redis sub/pub 및 Websocket을 이용하여 실시간 채팅 및 채팅방 추가

작업 분류

  • 버그 수정
  • 신규 기능
  • 프로젝트 구조 변경

작업 상세 내용

  1. Redis에 sub/pub 관련 설정 추가
  2. 채팅방 CRD API 추가
  3. 실시간 채팅 API 추가
  4. 채팅방 메시지 조회 API 추가

채팅방 API

[POST] /api/v1/chat/room

유저와 receiver로 채팅방 생성

{
    "receiver": "CSKIM" // 받는 사람 닉네임
}
{
    "status": "SUCCESS",
    "data": {
        "roomName": "mnjiya500@daum.net_cskim999@kakao.com",
        "roomId": "1d66c126-75cc-4839-9c08-21134adeb637",
        "sender": "mnjiya500@daum.net",
        "receiver": "cskim999@kakao.com",
        "latestMessage": "",
        "lastMessageTime": "2023-09-03T17:48:40.956476"
    }
}

[GET] /api/v1/chat/rooms

유저가 포함된 채팅방 목록 조회
(채팅 없이 채팅방만 만들어진 경우에는 조회되지 않습니다)

{
    "status": "SUCCESS",
    "data": [
        {
            "roomName": "CSKIM",
            "roomId": "1d66c126-75cc-4839-9c08-21134adeb637",
            "sender": "mnjiya500@daum.net",
            "receiver": "cskim999@kakao.com",
            "latestMessage": "쮸앤밀",
            "lastMessageTime": "2023-09-03T18:33:23.173679"
        }
    ]
}

[GET] /api/v1/chat/room/{roomId}

채팅방 번호로 채팅방 조회

{
    "status": "SUCCESS",
    "data": {
        "roomName": "mnjiya500@daum.net_cskim999@kakao.com",
        "roomId": "1d66c126-75cc-4839-9c08-21134adeb637",
        "sender": "mnjiya500@daum.net",
        "receiver": "cskim999@kakao.com",
        "latestMessage": "더보이즈 이주연입니다",
        "lastMessageTime": "2023-09-03T18:44:14.240123"
    }
}

[DELETE] /api/v1/chat/room/{roomId}

채팅방 번호로 채팅방 삭제

채팅 API

http://{localhost}/stomp

  • subscription URL : /sub/chat/room/{roomId}
  • destination Queue : /pub/chat/message
{
    "roomId": "1d66c126-75cc-4839-9c08-21134adeb637",
    "sender": "theboys@gmail.com",
    "message": "더보이즈 이주연입니다"
}

image

[GET] /api/v1/chat/message/{roomId}

채팅방 전체 메시지 조회

{
    "status": "SUCCESS",
    "data": [
        {
            "roomId": "1d66c126-75cc-4839-9c08-21134adeb637",
            "sender": "mnjiua@gmail.com",
            "message": "투모로우바이투게더 최연준입니다",
            "lastMessageTime": "2023-09-03T19:09:31.3912572"
        },
        {
            "roomId": "1d66c126-75cc-4839-9c08-21134adeb637",
            "sender": "theboys@gmail.com",
            "message": "더보이즈 이현재입니다",
            "lastMessageTime": "2023-09-03T19:10:26.9726419"
        }
    ]
}

생각해볼 문제

현재는 채팅방 메시지를 전체 조회하고 있지만, 추후에는 개수 제한을 두어야 할 것 같습니다
제가 본 방식은 https://velog.io/@baekgom/WebSocket-Stomp-Redis-%EC%B1%84%ED%8C%85%EB%B0%A9-%EC%9C%A0%EC%A7%80#1-messagedto
[전송] Redis에서는 1시간 후에 삭제되도록 설정 & DB에 저장
[조회] Redis에서 100개 가져오기 -> 만약 없으면 DB에서 100개 가져오기

참고 링크

https://velog.io/@baekgom/WebSocket-Stomp-Redis-%EC%B1%84%ED%8C%85%EB%B0%A9-%EC%9C%A0%EC%A7%80#1-messagedto
https://www.daddyprogrammer.org/
테스트 : https://velog.io/@kny8092/Spring-STOMP%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0#config-%EC%84%A4%EC%A0%95%ED%8C%8C%EC%9D%BC

@nitronium102 nitronium102 self-assigned this Sep 3, 2023
@nitronium102 nitronium102 added the 👀리뷰필요 리뷰가 필요한 경우 label Sep 3, 2023
@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Sep 3, 2023

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 2 Code Smells

No Coverage information No Coverage information
0.0% 0.0% Duplication

Copy link
Copy Markdown
Contributor

@lina1919 lina1919 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네 확인했습니다! 어려운 부분 추가하시느라 고생 많으셨어요:)

@lina1919 lina1919 added 😊머지가능 해당 PR이 Approve되어 merge 가능한 경우 and removed 👀리뷰필요 리뷰가 필요한 경우 labels Sep 4, 2023
@nitronium102 nitronium102 merged commit 825ce66 into develop Sep 4, 2023
@nitronium102 nitronium102 removed the 😊머지가능 해당 PR이 Approve되어 merge 가능한 경우 label Sep 4, 2023
@nitronium102 nitronium102 changed the title [SO-209] 채팅방 CRD & 실시간 채팅 API 추가 [SO-209] feat: 채팅방 CRD & 실시간 채팅 API 추가 Sep 4, 2023
@nitronium102 nitronium102 mentioned this pull request Oct 4, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants