TIL 92일차

Moon-Tree·2023년 5월 14일
0

◆ 나에게만 메세지 삭제

◆ 고민1

  1. 회원이 메세지 삭제 버튼을 클릭하면 dm_message_deleted 테이블의 해당 메세지번호와 회원 번호가 저장됩니다.

  2. undeleted_message VIEW테이블은 dm_message테이블과 dm_message_deleted 테이블을 조인하여 삭제하지 않은 메세지들의 데이터를 가지고 있습니다.

  3. 메세지를 삭제하지 않은 사람은 원래 dm_message 테이블의 데이터를 보여주고, 본인이 삭제한 데이터가 있는 사람은 dm_message_deleted 테이블의 데이터를 제외한 메세지 리스트를 보여줍니다.

    <조건>
    1) 3번 채팅방에는 a,b,c 회원이 있다.
    2) a회원이 3번 채팅방에서 1번 메세지를 삭제하면 실제 db에서는 삭제되지 않고, a회원 3번 채팅방의 채팅창에 1번 메세지가 삭제될 뿐이다.
    3) 3번 채팅방에 접속해 있는 b,c 회원에 채팅창에는 1번 메세지가 그대로 존재한다.
    4) 메세지를 보낸 사람이 아닌 다른 사용자가 보낸 메시지를 삭제한 경우, 해당 메세지를 삭제한 회원의 채팅방에서만 메세지가 삭제된다.
    (주의, 메세지를 삭제한 본인 이외의 다른 사용자의 채팅방에는 영향을 주지 않아야 한다.)
    5) 로그인한 회원이 메세지를 삭제하면 본인의 1번 채팅방의 채팅창에서만 3번의 메세지가 삭제된다.
    다른 회원의 1번 채팅방의 채팅창에는 3번의 메세지가 삭제되지 않고 그대로 존재해야한다.


◆ 고민2

  1. 회원이 삭제하지 않은 특정 채팅방의 모든 메시지를 가져오려면, memberNo와 roomNo를 둘 다 사용하여 메시지를 불러올 수 있는 쿼리를 작성해야 합니다. 이 경우에는 member_messages 뷰를 이용하고, WHERE 절에 roomNo와 message_sender를 둘 다 사용해야 합니다.

  2. dm_message_deleted 테이블은 각 회원이 삭제한 메시지의 목록을 추적합니다. member_no와 message_no로 구성된 복합 키를 사용하여 어떤 회원이 어떤 메시지를 삭제했는지를 나타냅니다. 이 테이블에서 메시지가 실제로 삭제되지는 않지만, 특정 회원에게는 "삭제"된 것처럼 보이게 합니다.

  3. 그런 다음 member_messages 뷰를 사용하여 각 회원이 삭제하지 않은 메시지를 확인합니다. 이 뷰는 dm_message 테이블과 dm_message_deleted 테이블을 왼쪽 조인하여 삭제되지 않은 메시지를 가져옵니다.

  4. 예를 들어 a 회원이 3번 채팅방에서 1번 메시지를 삭제하면, dm_message_deleted 테이블에 (a의 회원 번호, 1번 메시지)의 쌍이 추가됩니다. 그러면 member_messages 뷰에서 a 회원에 대한 1번 메시지는 더 이상 반환되지 않게 됩니다. 그러나 b, c 회원의 경우에는 dm_message_deleted 테이블에 해당 메시지에 대한 항목이 없으므로, 이 메시지는 그들에게 여전히 보입니다.

  5. 이 방식은 메시지를 실제로 삭제하지 않고, 회원별로 메시지 삭제를 처리하므로 a 회원이 메시지를 삭제하더라도 b, c 회원에게는 메시지가 여전히 보이게 합니다.


◆ 고민3

  1. 그룹 채팅방에 a,b,c 회원이 있습니다. a회원이 1번 메세지를 삭제하면 실제 db에서도 해당 메세지가 삭제되어 a,b,c 회원의 채팅방에는 1번 메세지가 없습니다.

    <조건>
    1) 3번 채팅방에는 a,b,c 회원이 있다.
    2) a회원이 3번 채팅방에서 1번 메세지를 삭제하면 실제 db에서는 삭제되지 않고, a회원 3번 채팅방의 채팅창에 1번 메세지가 삭제될 뿐이다.
    3) 3번 채팅방에 접속해 있는 b,c 회원에 채팅창에는 1번 메세지가 그대로 존재한다.
    4) 메세지를 보낸 사람이 아닌 다른 사용자가 보낸 메시지를 삭제한 경우, 해당 메세지를 삭제한 회원의 채팅방에서만 메세지가 삭제된다.
    (주의, 메세지를 삭제한 본인 이외의 다른 사용자의 채팅방에는 영향을 주지 않아야 한다.)
    5) (주의) 채팅에서 메시지를 표시할 때 가져올 메시지는 로그인한 멤버가 삭제한 메시지만 제외해야 한다.
    6) 로그인한 회원이 메세지를 삭제하면 본인의 1번 채팅방의 채팅창에서만 3번의 메세지가 삭제된다.
    다른 회원의 1번 채팅방의 채팅창에는 3번의 메세지가 삭제되지 않고 그대로 존재한다.
    7) 특정 사용자의 삭제되지 않은 메시지를 효과적으로 가져오려면, 해당 사용자의 dm_message_deleted 테이블의 메시지를 dm_message 테이블의 모든 메시지에서 제외해야 한다.

  2. member 테이블과 dm_message 테이블을 조인하여 view를 만들어서 조회한 후, a회원이 그룹채팅방에서 1번 메세지를 삭제하면 view테이블에서만 1번 메세지를 삭제합니다.

profile
Backend Developer

0개의 댓글