HashSet 이용해 Tag 업데이트 로직 성능 최적화
서론
우리 서비스는 Tag 기능이 있다. Tag를 업데이트 할 때 평소 개발할 때처럼 id(PK)를 이용할 수 없고 name을 이용해야 하는 상황이 주어졌다. 프론트로부터 TagName 배열을 받기 때문이었다. 기존의 TagName 배열과 새로 들어온 TagName 배열을 비교해 추가할 배열과 삭제할 배열을 찾아내야 했다. 이를 위해 집합 개념을 이용했다. 이때 각 원소를 접근해야 했기에 List를 그대로 사용하기보단 HashSet을 이용해 성능 이슈를 최대한 해결하고자 했다.
- 개념 코드
- 배열의 크기가 크다면 교집합 배열 따로 안 만드는 방식이 더 나을 수 있지만, 우린 tagName 배열 크기가 최대 원소 10개로 제한되어 있으므로 2번 방식 채택함
- 1번 방법
- 2번 방법
본론
- 개념 코드 적용한 기본 로직
- 가독성 고려해 리팩토링한 로직
Builder 끊어서 사용해 로직 간결하게 만들기
- builder를 쓰다 보면 분기점에서 아래와 같은 코드를 짜게 되어 반복되는 코드를 쓰게 되는 경우가 종종 있다.
- 이를 아래와 같이 builder 타입 변수를 만들어 리팩토링하면 중복되는 코드를 줄이고 간결하게 만들 수 있다. 이 방법을 검색해 찾아내기가 어려웠다. 관련 글들이 많이 없는 거 같다. 왜 그런진 쓰다 보니 알 수 있었다. 이렇게 쓸 바엔 그냥 정적 팩토리 메소드 방식을 쓰는 게 훨씬 가독성도 좋고 확장성도 좋기 때문이다.
후,, DDD 플젝을 단순 crud라 생각해서 만만하게 봤다가 큰 코 다쳤다 ㅋㅋ
DB가 폴더 구조를 나타내느라 Nested 구조로 이뤄져있어 API 구현도 꽤 챌린지 했다
또, Url의 Tag 기능의 경우 수정 정책이 독특해 재밌는 코드를 짜볼 수 있었다. 개발과 알고리즘의 합작품 느낌?
이외에 Url, Category, Tag 간의 삭제 정책도 잘 따져봐야 했다.
