채팅 Spec
화면 경로 /mainPages/chatRoom · 작성일 2026-10-12
1:1 채팅·단체 채팅 화면의 기능·데이터·권한을 정리한 원본 문서입니다. 도움말(chat-help.html)의 상세 링크가 이 문서의 각 항목으로 연결됩니다. 오픈채팅 방도 입장한 뒤에는 이 화면에서 대화합니다.
A1. 업무 흐름
- 사용자① 방 만들기이 화면 · 친구 관리에서 1:1 채팅
- 사용자② 초대 · 초대링크이 화면 (방 메뉴)
- 초대받은 사람③ 참여 또는 거절초대 알림
- 참여자④ 대화이 화면
- 시스템⑤ 새 메시지 알림푸시 · 앱 배지
사용 지점 · 사용 주체 · 목적
| 단계 | 사용 지점 | 사용 주체 | 목적 |
| ① ② | 친구와 대화를 시작할 때 | 로그인 사용자 | 방을 열고 대화 상대를 부름 |
| ④ | 대화 중 | 방 참여자 | 메시지·파일 주고받기, 반응, 검색 |
A2. 화면 Meta data
| 항목 | 내용 |
| 화면명 | 채팅 (1:1 채팅, 단체 채팅) |
| 화면 경로 | /mainPages/chatRoom?roomType=DIRECT, /mainPages/chatRoom?roomType=GROUP |
| 메뉴 키 | directChat (홈 카드 표시), groupChat |
| 화면 목적 | 실시간으로 메시지와 파일을 주고받는다 |
| 프로그램 | components/core/client/wsChatClient.js, chatArea/, server.js (Socket.IO) |
| API 모듈 | pages/api/biz/chatroom.js (CHATROOM_*), Socket.IO 이벤트 join · chat · loadMore · readReceipt |
| 주요 테이블 | TB_COR_CHATROOM_MST, TB_COR_CHATROOM_USERS, TB_COR_CHAT_MSG, TB_COR_CHAT_READ_RECEIPT |
| 도움말 파일 | public/help/chat-help.html, chat-spec.html |
A3. 화면 구성 상세
| 영역 | 영역명 | 사용자가 하는 일 | 화면 동작 | backend 동작 |
| ① | 채팅방 목록 | 방 선택, + 방 만들기 | 방별 안 읽은 수, 접기·펼치기 | CHATROOM_LIST, CHATROOM_CREATE |
| ② | 대화 영역 | 메시지 읽기, 위로 스크롤해 이전 대화 보기, 리액션 | 입장하면 최근 20개를 바로 표시, 위로 올리면 이전 메시지 추가 | join → history, loadMore → olderMessages |
| ③ | 입력창 · 채팅 도구 | 메시지·사진·동영상·음성·이모티콘 보내기, 받아쓰기, 글자 강조 | 입력 중이면 상대에게 "입력 중…" 표시 | chat 이벤트 |
| ④ | 방 메뉴 | 초대, 초대링크, 참여자 목록, 방 이름 변경, 음소거, 내보내기, 나가기 | 방 상단에서 열림 | CHATROOM_INVITE 등 |
| ⑤ | 메시지 검색 | 검색어 입력, 원문으로 이동 | 결과를 누르면 해당 메시지로 스크롤 | /api/chat/search |
A4. 방 종류
| 종류 | 뜻 | 비고 |
| 1:1 채팅 (DIRECT) | 두 사람의 방 | 참여자가 3명 이상이 되면 단체 채팅으로 바뀜 |
| 단체 채팅 (GROUP) | 세 사람 이상의 방 | 2명으로 줄면 1:1 채팅으로 바뀜 |
| 비밀채팅 | 종단간 암호화 방, 이름 앞에 🔒 | 상대가 아직 암호화 키를 등록하지 않았으면 만들 수 없음 |
| 오픈채팅 (OPEN) | 공개 방 | 오픈채팅 화면에서 참여 |
A5. 메시지 항목 정의
| 항목 | 의미 | 형식 |
| 내용 | 보낸 글 | 문자, 글자 굵게·형광·빨간색 강조 가능 |
| 첨부 | 사진, 동영상, 음성, 파일 | 동영상은 500MB 이하 |
| 리액션 | 메시지에 남긴 이모지 | 이모지별 누른 사람 목록 |
| 안 읽은 수 | 아직 안 읽은 참여자 수 | 모두 읽으면 사라짐 |
A6. 버튼 동작
| 버튼 (영역) | 확인·검증 | 결과 | backend 처리 |
| + 방 만들기 (①) | 방 이름 입력, 비밀방 여부 | 새 방으로 이동 | CHATROOM_CREATE |
| 전송 (③) | 없음 | 모든 참여자에게 즉시 표시 | chat 이벤트, DB 저장 |
| 사진 · 동영상 · 음성 녹음 (③) | 파일 형식·크기, 마이크 권한 | 첨부 메시지 전송 | 파일 업로드 후 chat 이벤트 |
| 받아쓰기 (③) | 마이크 권한 | 말한 내용을 글로 바꿔 입력창에 넣음 | 음성 인식 |
| 초대 (④) | 친구 선택 | 상대에게 초대 알림, 참여·거절 선택 | CHATROOM_INVITE, ACCEPT_INVITE, REJECT_INVITE |
| 초대링크 (④) | 없음 | 링크 복사 | CHATROOM_CREATE_INVITE_TOKEN |
| 방 이름 변경 (④) | 이름 입력 | 모든 참여자에게 새 이름 표시 | CHATROOM_RENAME |
| 이 방 음소거 (④) | 없음 | 이 기기에서 이 방의 알림을 끔 | 이 기기에만 저장 |
| 내보내기 (④) | 확인 창 | 선택한 참여자를 방에서 제외 | CHATROOM_KICK |
| 나가기 (④) | 확인 창 | 방 목록에서 사라짐 | CHATROOM_LEAVE |
A7. 권한
| 역할 | 대화 | 초대 · 이름 변경 | 내보내기 |
| 방 참여자 | O | O | O (오픈채팅은 방장만) |
| 참여하지 않은 사용자 | X | X | X |
A8. 상태 변화
초대됨참여참여 중나가기 · 내보내기나감
A9. 데이터 연계
| 처리 | 바뀌는 데이터 | 함께 일어나는 일 |
| 메시지 전송 | TB_COR_CHAT_MSG | 방에 없는 참여자 기기로 푸시, 앱 아이콘 배지 갱신 |
| 방 입장 | TB_COR_CHAT_READ_RECEIPT | 그 방의 메시지를 모두 읽음 처리 |
| 참여자 수 변경 | ROOM_TYPE | 2명이면 1:1, 3명 이상이면 단체로 자동 변경 |
| 마지막 참여자가 나감 | 방·메시지·읽음 정보 삭제 | 되돌릴 수 없음 |
개정 이력
| 버전 | 수정일 | 수정 내용 |
| 1.0 | 2026-10-12 | 최초 작성 |