Skip to content

Feat: 채팅 기능 개선 - #23

Merged
ssarisong merged 7 commits into
mainfrom
feat/19-chat-improve
Sep 11, 2026
Merged

Feat: 채팅 기능 개선#23
ssarisong merged 7 commits into
mainfrom
feat/19-chat-improve

Conversation

@KIMB0B

@KIMB0B KIMB0B commented Sep 7, 2026

Copy link
Copy Markdown
Member

📌 변경 내용

채팅 모듈에 실사용 기능들을 추가하고 실시간 구조를 개편했습니다.

  • 읽음 처리 / 안읽은 메시지 수last_read_message_id 기반 읽음 API + 방별 안읽은 카운트
  • 마지막 메시지 미리보기 — 방 목록에 최근 메시지·시각 표시 (단일 쿼리 조회)
  • Presence + 타이핑 인디케이터 — 접속 상태·입력 중 표시 (Redis, DB 미저장 ephemeral)
  • WebSocket 프로젝트 단위 단일 연결 전환 — 방 단위 다중 연결 → 프로젝트당 1연결. 목록·방 삭제·방 생성 실시간 반영
  • 재연결 유실 복구 (Gap Recovery) — 끊김 시 자동 재연결 + 놓친 메시지 복구
  • 채팅 모듈 컨벤션 정리 (응답 래핑·In/Out 스키마·의존성 패턴)

🎯 변경 이유

기존 채팅은 "Redis 브로드캐스트 + DB 저장" 기본 골격만 있어 읽음 상태·접속 상태·유실 복구 등 실사용 기능이 비어 있었습니다. 실제 사용 가능한 수준으로 채웠습니다.

🔗 관련 이슈

🧪 테스트 방법

  • 로컬에서 직접 테스트
  • 테스트 코드 추가/수정
  • 수동 테스트 (아래 설명)

테스트 상세

브라우저 탭 2개(서로 다른 계정, 같은 프로젝트)로 검증:

1. [읽음/안읽음] A가 안 보는 방에 B가 메시지 → A 목록에 미리보기 갱신 + 안읽음 배지 증가.
   A가 방 열면 배지 0 + 읽음 처리.
2. [Presence/타이핑] 같은 방에서 B가 입력 → A에게 "입력 중" 표시, 멈추면 사라짐.
3. [방 삭제] A가 DM 삭제 → B 화면에서 실시간으로 방 사라짐.
4. [방 생성] A가 B에게 새 DM 생성 → B 목록에 재접속 없이 즉시 표시 + 바로 대화 가능.
5. [재연결 복구] DevTools Network를 Offline → 그 사이 B가 메시지 전송 → Online 복귀 후
   자동 재연결되며 놓친 메시지가 채워짐.

✅ 체크리스트

  • lint / format 통과 (로컬 확인 필요)
  • 기존 기능에 영향 없음 (REST는 하위 호환 / WS 엔드포인트 변경은 아래 주의)
  • 에러/엣지 케이스 고려 (멀티탭 presence, 재연결 backoff, 빈 메시지, 중복 이벤트 등)
  • 관련 문서 업데이트 (AsyncAPI 문서는 후속 예정)

⚠️ 주의 (리뷰어 참고)

  • WS 엔드포인트 변경: /chat/ws/{room_id}/chat/ws/projects/{project_id}. 프론트(static)는 함께 변경됨. 다른 WS 클라이언트가 있다면 영향 있음.

- 채팅방 목록에 마지막 메시지 미리보기/시각 표시
- last_read_message_id 마이그레이션 추가
- 응답 ApiResponse 래핑, In/Out 스키마 네이밍, ConfigDict 통일
- ChatServiceDep 의존성 패턴 적용
- 프론트: 안읽은 뱃지, 읽음 처리 연동, 마지막 메시지 미리보기, 응답 언랩 대응
- 채팅방 목록 실시간 갱신 (안 보는 방 메시지도 미리보기/안읽음 카운트 반영)
- 채팅방 삭제 시 room_deleted 브로드캐스트로 상대방 실시간 반영
@KIMB0B
KIMB0B requested a review from ssarisong September 7, 2026 16:32
@KIMB0B KIMB0B self-assigned this Sep 7, 2026
@KIMB0B KIMB0B linked an issue Sep 7, 2026 that may be closed by this pull request
6 tasks
@KIMB0B KIMB0B changed the title Feat/19 chat improve Feat: 채팅 기능 개선 Sep 9, 2026

@ssarisong ssarisong left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

확인 완료했습니다.

@ssarisong
ssarisong merged commit 8197d0d into main Sep 11, 2026
1 check passed
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.

[FEAT] 채팅 기능 개선

2 participants