-
[TIL] 카테고리 별 기프트 카드 조회 컨트롤러 수정하기TIL(Today I Learned) 2023. 2. 16. 16:37
*20230216의 기록
어제 카테고리별로 기프트 카드를 조회하는 API를 구현하는데, 바로 전 게시글을 보면 알 수 있듯이 GiftCardCategory 는 Enum 클래스이며, @PathVariable 형식으로 이넘타입을 받는 다는 사실이 너무 찜찜했다.
그래서 생각해 낸 방법이 Enum의 생성자에 매개변수로 Long 타입의 categoryId 를 갖게 해주자는 것이다. 그리고 categoryId의 값을 이용하여 Enum 상수 객체를 반환해주는 static 메서드를 생성해주었다(서비스 단에서 이 메서드를 이용하여 Enum 상수 추출 후 GiftCardRepository에서 findByEnumType(category)을 이용하여 해당 카테고리를 가진 값들 가져옴). 따라서 변경된 GiftCardCategory 클래스는 아래와 같다.
따라서 컨트롤러도 다음과 같이 변경해주었다.
그런데 왠지 찜찜했다. 다른 사이트들을 보면 카테고리를 쿼리스트링 형식으로 카테고리번호를 받는 것을 많이 봤는데...(아마 카테고리 id이지 않을까...? 하는 나의 근거없는 추측...) 항상 PathVariable만 사용했어서 그냥 에라 모르겠다 하고 넘기려던 찰나... 귀신같이 스프링 백엔드 개발자로 일하고 계신 학교 선배한테 카톡이 왔다.(내 깃허브를 종종 보시며 나에게 피드백을 해주시는 아주 고마운 분이시다.)
'쿼리 스트링 말고 경로변수를 쓴 이유가 뭐야? 그리고 카테고리별 기프트카드 조회에 페이징이 필요하다면 어떻게 해야될까? '/gift-cards/category/{category}?page=0&size=10' 이랑 '/gift-cards/category?category=AAA&page=0&size=10' 중에 어떤게 괜찮아보여 ?'
내가 봐도 두번째가 자주 보던 형식이었다. 따라서 결국 API 를 또 수정했다. 수정한 API 는 아래와 같다.
이 API 하나를 가지고 정말 많은 것을 생각하고 찾아보고 공부한 것 같다. 시간에 비해 결과물이 고작 하나밖에 안된다고 생각할 수 있겠지만, 이 하나를 가지고 계속해서 고민해본게 뭔가 값지고 뿌듯한 경험이 된 것 같다!
+ 사실 아직 궁금한게 있는데... 그럼 쿼리스트링 형식으로 카테고리를 가져온다 치면, 쿼리스트링의 key의 value값으로도 대문자가 들어가면 RESTful 한 API가 아니게 되는 것일까...? 이건 내일 튜터님한테 물어봐야겠다..(여쭤본 결과 value 에는 대문자가 들어가도 된다고 하신다!)
오늘의 회고 끝....!!!!!!!!!
'TIL(Today I Learned)' 카테고리의 다른 글
[TIL] 20230302일의 기록 (0) 2023.03.02 [TIL] Spring Boot 의 Ambiguous handler methods mapped for 에러 (2) 2023.02.15 [TIL] @Builder 와 @NoArgsConstructor, @AllArgsConstructor (0) 2023.02.14 [TIL] Builder 패턴 사용하기 (0) 2023.02.13 [TIL] Controller 에서 Entity 를 그냥 반환하면 안되는 이유 2가지 (0) 2023.01.30