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 전체가 실패합니다.
Activity