Chat System - kookmin-sw/capstone-2025-44 GitHub Wiki
π¬ μ±ν μμ€ν (Chat System)
νμνμ΄μμ μ¬μ©μ κ° μ€μκ° λ©μμ§ μ μ‘ λ° νμ μ μ‘ κΈ°λ₯μ μ 곡νλ ν΅μ¬ μμ€ν μ λλ€.
Relevant Source Files
- src/api/chat-api.tsx
- src/api/types/chat-type.ts
- src/assets/icons/chat-creator-icon.svg
- src/components/chat/chat-input.tsx
- src/components/chat/chat-item.tsx
- src/components/chat/chat-list-item.tsx
- src/components/chat/chat-list.tsx
- src/components/chat/type.ts
- src/hooks/queries/useGetChatList.tsx
- src/hooks/queries/useSendMessages.tsx
- src/pages/chat/chat-room.tsx
- src/pages/chat/chat.tsx
- src/pages/chat/dummy.ts
- src/pages/chat/type.ts
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 κΈ°λ°)
π§Ύ μ±ν
λ°© λͺ©λ‘ λ° μν νν°
π μ°Έμ¬μ μΆκ° λ° νμ μ μ‘ κΈ°λ₯
π¨ μμΈ μν© μ²λ¦¬ λ° μ¬μ©μ νΌλλ°±