본문 바로가기

RDS

사용자 차단 쿼리를 어떻게 짤까? (RDS)

REST API 서버에 거의 모든 기능을 다 짯을 무렵, 사용자 차단에 대한 이슈가 올라왔다.

 

( 사실 까먹고 있었음 )

 

사용자 차단회원탈퇴에 대한 소프트 딜리트로 처리해주는 것과 별반 다를거 없다고 생각했다.

여기서 소프트 딜리트란? 

데이터베이스에서 완전 삭제하는게 아닌 DeletedAt 이라는 컬럼에 트랜잭션을 실행한 시간을 표기하는 것으로

DeletedAt 컬럼이 NULL 이 아닐경우 일반 쿼리를 했을때 유저입장에서 조회가 되지 않는 기능을 말한다.

소프트딜리트는 상당히 편한기능이다. 예를들어 Join 한 테이블을 가지고 조회만 안되게 하려면 

WHERE 절에서 deleted_at is null 이라고만 적어두면 반환되는 리스트에서 제거되게 된다.

그럼 사용자 차단도 소프트딜리트와 비슷한 로직으로 처리해주면 되지 않나?

회원탈퇴를 소프트딜리트 즉 ( left join / is null ) 로 처리해줄 수 있는 이유는 이미 존재하는 테이블에 deleted_at 을 추가해준다.
즉,기존에 회원에 대한 정보가 있기에 가능하다.

 

사용자차단은 기본적으로 새로운 테이블, 예를들어 Report 테이블에 차단한 사용자를 차례로 새로 넣어주는 방식이기 때문에 
기존에 회원에 대한 테이블 정보가 없다. 그러면 left join 은 불가능하게 된다.

 

자 그럼 사용자 차단은 어떻게 짜야하나?

NOT EXISTS 서브쿼리를 사용하면 해결 할 수 있다.

 

 

 

'RDS' 카테고리의 다른 글

동기와 비동기 그 미묘함에 관하여  (1) 2022.10.27