Chat System - kookmin-sw/capstone-2025-44 GitHub Wiki

πŸ’¬ μ±„νŒ… μ‹œμŠ€ν…œ (Chat System)

νƒ€μž„νŽ˜μ΄μ—μ„œ μ‚¬μš©μž κ°„ μ‹€μ‹œκ°„ λ©”μ‹œμ§€ 전솑 및 νƒ€μž„ 전솑 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 핡심 μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.


Relevant Source Files


1. μ‹œμŠ€ν…œ κ°œμš”

Chat μ‹œμŠ€ν…œμ€ λ‹€μŒκ³Ό 같은 두 κ°€μ§€ μ£Όμš” UI둜 κ΅¬μ„±λ©λ‹ˆλ‹€:

  • Chat List (μ±„νŒ… λͺ©λ‘)
  • Chat Room (μ±„νŒ…λ°©)

λ˜ν•œ WebSocket 기반 μ‹€μ‹œκ°„ λ©”μ‹œμ§• κΈ°λŠ₯κ³Ό 타 μ‹œμŠ€ν…œ(νƒ€μž„ 전솑, κ²Œμ‹œκΈ€, μ§€μ›μž 관리 λ“±)κ³Ό ν†΅ν•©λ˜μ–΄ λ™μž‘ν•©λ‹ˆλ‹€.

2. μ£Όμš” κΈ°λŠ₯

  • μ‹€μ‹œκ°„ λ©”μ‹œμ§• (StompJS 기반 WebSocket)
  • μ±„νŒ…λ°© 생성 및 μ°Έκ°€μž μΆ”κ°€
  • μ±„νŒ…λ°© λͺ©λ‘ 필터링 (μ§„ν–‰ 쀑/μ™„λ£Œ)
  • νƒ€μž„ 전솑 κΈ°λŠ₯ 연동
  • ν”„λ‘œν•„ 및 κ²Œμ‹œκΈ€ 정보 ν‘œμ‹œ
  • 차단, μ‚­μ œ, 퇴μž₯ 처리 λŒ€μ‘

3. Chat API 연동

제곡 λ©”μ„œλ“œ

λ©”μ„œλ“œλͺ… μ„€λͺ…
sendChatMessages μ±„νŒ… λ©”μ‹œμ§€ 전솑
getChatList μ‚¬μš©μžμ˜ μ±„νŒ…λ°© λͺ©λ‘ 쑰회
getChatRoomData μ±„νŒ…λ°© 정보 및 λŒ€ν™” λ‚΄μ—­ 쑰회
postChatMake μƒˆλ‘œμš΄ μ±„νŒ…λ°© 생성
postAddingNewMember μ±„νŒ…λ°©μ— μ°Έμ—¬μž μΆ”κ°€
postIdToChatRoom κ²Œμ‹œκΈ€ κΈ°μ€€ μ±„νŒ…λ°© 쑰회

Sources:
src/api/chat-api.tsx

4. μ±„νŒ… λͺ©λ‘ (Chat List)

μ‚¬μš©μžμ—κ²Œ μ°Έμ—¬ 쀑인 μ±„νŒ…λ°© λͺ©λ‘μ„ μ œκ³΅ν•˜λ©°, μƒνƒœλ³„(μ§„ν–‰/μ™„λ£Œ) 필터링 κΈ°λŠ₯을 μ§€μ›ν•©λ‹ˆλ‹€.

μ£Όμš” ꡬ성 μš”μ†Œ

  • ChatList
  • ChatListItem
  • ToggleSwitch (μƒνƒœ ν•„ν„°)
  • useGetChatList(type) ν›…

Sources:
src/pages/chat/chat.tsx
src/components/chat/chat-list.tsx
src/components/chat/chat-list-item.tsx

5. μ±„νŒ…λ°© (Chat Room)

μ±„νŒ… λ©”μ‹œμ§€λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ 주고받을 수 μžˆλŠ” 메인 μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯

  • μ±„νŒ… λ©”μ‹œμ§€ μ†‘μˆ˜μ‹ 
  • μ±„νŒ… μž…λ ₯μ°½
  • μ°Έμ—¬μž ν”„λ‘œν•„ 보기
  • νƒ€μž„ 전솑/μ‹ μ²­μž μΆ”κ°€/μ‹ κ³  κΈ°λŠ₯ λ²„νŠΌ
  • WebSocket ꡬ독 및 μƒνƒœ 관리

μ£Όμš” ꡬ성 μš”μ†Œ

  • ChatItem
  • ChatInput
  • ChatAppBar
  • Bottom Sheet λ²„νŠΌ (νƒ€μž„ 전솑, μ§€μ›μž μΆ”κ°€ λ“±)

Sources:
src/pages/chat/chat-room.tsx
src/components/chat/chat-item.tsx
src/components/chat/chat-input.tsx

6. WebSocket 톡신 ꡬ쑰

WebSocket 연결은 StompJSλ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹€μŒ νλ¦„μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€:

  • connectHandler: μ†ŒμΌ“ μ—°κ²° 및 λ°© ꡬ독
  • sendHandler: λ©”μ‹œμ§€ 전솑
  • scrollToBottom: μ΅œμ‹  λ©”μ‹œμ§€ μžλ™ 슀크둀
  • /sub/room/{roomId} ꡬ독, /chat/room/{roomId}/message 전솑

Sources:
chat-room.tsx (58-64, 66-93, 179-199)

7. 데이터 νƒ€μž…

νƒ€μž…λͺ… μ„€λͺ… μ£Όμš” ν•„λ“œ
ChatRoomItemType μ±„νŒ…λ°© λͺ©λ‘ ν•­λͺ© roomId, postId, postTitle λ“±
ChatItemType κ°œλ³„ λ©”μ‹œμ§€ userId, msg, date λ“±
ChatRoomData μ±„νŒ…λ°© μƒνƒœ roomId, postId λ“±
ChatRoomSubMessage μ†ŒμΌ“ λ©”μ‹œμ§€ ꡬ쑰 type, roomIdx, message λ“±
InputType μž…λ ₯μ°½ props onClick, blockedRoom λ“±

Sources:
src/components/chat/type.ts
src/api/types/chat-type.ts
src/pages/chat/type.ts

8. 타 μ‹œμŠ€ν…œκ³Όμ˜ 연동

  • κ²Œμ‹œκΈ€ μ‹œμŠ€ν…œ: μ±„νŒ…λ°©μ€ κ²Œμ‹œκΈ€κ³Ό μ—°λ™λ˜μ–΄ 생성됨
  • νƒ€μž„ 전솑: ν•˜λ‹¨ λ²„νŠΌ 클릭 μ‹œ 전솑 Bottom Sheet μ—΄λ¦Ό
  • μ§€μ›μž 관리: μ±„νŒ…μ— μƒˆλ‘œμš΄ 인원 μΆ”κ°€ κ°€λŠ₯
  • ν”„λ‘œν•„ μ‹œμŠ€ν…œ: ν”„λ‘œν•„ 클릭 μ‹œ λͺ¨λ‹¬λ‘œ μ‚¬μš©μž 정보 ν‘œμ‹œ

Sources:
chat-room.tsx (204-227, 364-376)
chat-item.tsx (36-43)

9. μ˜ˆμ™Έ 처리 및 μ‚¬μš©μž ν”Όλ“œλ°±

  • μ‚­μ œλœ κ²Œμ‹œκΈ€ μ•Œλ¦Ό
  • μ°¨λ‹¨λœ μ±„νŒ…λ°© ν‘œμ‹œ
  • 퇴μž₯ μ•Œλ¦Ό λͺ¨λ‹¬
  • μ‚­μ œλœ μ‚¬μš©μž ν”„λ‘œν•„ 처리

Sources:
chat-room.tsx (230-236, 422-438)
chat-list-item.tsx (60-65)

10. μš”μ•½

μ±„νŒ… μ‹œμŠ€ν…œμ€ λ‹€μŒ κΈ°λŠ₯듀을 μ€‘μ‹¬μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€:

πŸ’¬ μ‹€μ‹œκ°„ μ±„νŒ… κΈ°λŠ₯ (WebSocket 기반)
🧾 μ±„νŒ…λ°© λͺ©λ‘ 및 μƒνƒœ ν•„ν„°
πŸ”€ μ°Έμ—¬μž μΆ”κ°€ 및 νƒ€μž„ 전솑 κΈ°λŠ₯
🚨 μ˜ˆμ™Έ 상황 처리 및 μ‚¬μš©μž ν”Όλ“œλ°±