You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
그룹 대화에서 한 사람의 메시지만 빠지면 남은 대화가 읽히지 않습니다. 질문이 사라지고 "응 그게 맞아" 같은 답변만 남습니다. 그룹 채팅방을 만드는 경로는 아직 없지만, 도입되면 바로 드러나는 문제입니다.
1:1 채팅방에도 같은 방식을 적용할지는 따로 판단이 필요합니다. 상대는 누구와 대화했는지 이미 알고 있어서 표기를 가리는 실익이 적고, 상대가 떠난 1:1 방은 더 쓸 수도 없습니다.
논의가 필요한 사항
발신자 표기를 가려도 메시지 본문은 그대로 남습니다. 대화에는 이름, 연락처, 학교, 지원 현황이 들어갈 수 있어서, 이건 표기 방식이 아니라 탈퇴자 데이터를 어디까지 보관할지의 문제입니다. 세 가지 선택지가 있습니다.
방식
맥락 보존
개인정보 파기
발신자만 (알 수 없음), 본문 유지
O
X (본문이 영구 보관됨)
본문을 "삭제된 메시지"로 치환, 자리만 유지
일부
O
현재처럼 메시지 삭제
X
O
두 번째가 절충안으로 검토할 만합니다.
구현 시 걸리는 제약
스키마 사슬
chat_message.sender_id는 NOT NULL이고 chat_participant.id를 참조합니다. 메시지를 남기려면 참여자 행을 남겨야 하는데, chat_participant.site_user_id도 NOT NULL이고 site_user를 참조합니다. 사슬을 끊으려면 둘 중 하나를 택해야 합니다.
sender_id를 nullable로 바꾸고 탈퇴 시 NULL 처리
site_user 행을 지우지 않고 닉네임·이메일·프로필만 비우는 tombstone 방식 (물리 삭제 자체를 포기)
읽기 경로
ChatService:139buildParticipantIdToParticipantMap이 senderId로 참여자를 조회해 발신자 정보를 만듭니다. 발신자가 없는 메시지를 다룰 수 있어야 합니다.
1:1 목록 조회는 더 까다롭습니다. ChatService:177findPartner가 상대 참여자를 못 찾으면 CHAT_PARTNER_NOT_FOUND, ChatService:109가 상대 SiteUser를 못 찾으면 USER_NOT_FOUND를 던집니다. 이 메서드는 채팅방 목록 전체에 적용되므로, 방 하나가 깨지면 목록 API 전체가 실패합니다.
말씀하신 대로 3가지의 상황을 두고 확인한다면, 2번이 충분히 좋아보입니다! 하지만 멘토가 탈퇴할 경우, 멘토와 대화한 멘티들에게는 대화 내역이 다시 확인할 여지가 있다고 생각해서 "삭제된 메세지입니다"를 출력하는 게 UX 적으로는 좋지 않을 것 같다는 생각이 드네요...
그래서 "일정 기간 보존 + 1번 방식 + 2번 방식"을 제안드립니다! 예를 들면 사용자에 대해 삭제 처리가 되었을 때, 15일 동안 채팅한 상대방에게 탈퇴한 사용자를 고지하며 1번 방식으로 사용자에게 정보를 제공하되, 15일이 지나면 2번 방식으로 개인정보까지 지우는 방식이 될 수 있을 것 같습니다.
Activity
Hexeong commentedon Oct 28, 2026
안녕하세요! 논의 사항 관련해서 의견을 드리고 싶어 코멘트 남깁니다!
말씀하신 대로 3가지의 상황을 두고 확인한다면, 2번이 충분히 좋아보입니다! 하지만 멘토가 탈퇴할 경우, 멘토와 대화한 멘티들에게는 대화 내역이 다시 확인할 여지가 있다고 생각해서 "삭제된 메세지입니다"를 출력하는 게 UX 적으로는 좋지 않을 것 같다는 생각이 드네요...
그래서 "일정 기간 보존 + 1번 방식 + 2번 방식"을 제안드립니다! 예를 들면 사용자에 대해 삭제 처리가 되었을 때, 15일 동안 채팅한 상대방에게 탈퇴한 사용자를 고지하며 1번 방식으로 사용자에게 정보를 제공하되, 15일이 지나면 2번 방식으로 개인정보까지 지우는 방식이 될 수 있을 것 같습니다.
궁금한 점이 있으시면 reply 남겨주시면 확인하겠습니다!