Hoppy-project / mono-repo

취미 공유 플랫폼 프로젝트
0 stars 2 forks source link

[백엔드] Unique 제약으로 중복 검사 #72

Closed seaworld0125 closed 2 years ago

seaworld0125 commented 2 years ago

이슈 내용

결론

중복 검사 방법에는 두 가지 방법이 있다.

  1. 직접 select해서 체크하는 방법

이 방법은 내가 원하는대로 예외를 터트릴 수 있고 훨씬 명확한 코드를 제공할 수 있다. 또한 index를 타는 단건 조회이기 때문에 성능에도 큰 문제가 없다. 하지만 동시성 이슈가 발생할 수 있다.

  1. DB UNIQUE 제약에 의존하는 방법

사실 DB 관련 예외가 터지면 이걸 일일히 잡기가 애매하다. 따라서 공통 예외로 처리하여 사용자에게 서버 쪽에 문제가 있다 정도로만 알릴 수 있다.

  1. 뭐가 더 좋을까

1번 방법은 동시성 이슈가 발생한다는 단점이 있다. 하지만 실제 상황에서 동시성 이슈가 발생할 일은 극히 드물다. 따라서 우선은 1번 방법을 사용해서 원하는 로직으로 깔끔하고 명확하게 구현하고 DB에는 UNIQUE 제약을 걸어두자. 만약 동시성 이슈로 인해 DB Exception이 발생하면 공통 예외를 던져서 사용자에게 서버에 문제가 있다 정도만 알리고 추후 디버깅을 위해 자세하게 로그를 남겨두는 방식이 좋을 것 같다.

  1. title 컬럼에 index 적용

1번 방식으로 진행하게 되면 title 중복 검사를 실시할 때 full-scan이 발생한다. 추후 데이터가 증가하게 되면 탐색 성능이 좋지 않기 때문에 index를 적용해서 이를 개선하는 것이 좋을 것으로 보인다. index는 B-Tree 구조를 가지기 때문에 탐색에 O(logn)의 성능을 가진다. 따라서 탐색 성능을 개선할 수 있으며 index에도 unique 옵션이 있기 때문에 함께 적용하도록 한다. 결론적으로 중복 검사가 필요한 칼럼에는 unique index를 설정하도록 한다.

참고사항

https://www.inflearn.com/questions/59250