Skip to content

[API 구현] Select 쿼리 발생 시, Exception 처리 한 번에 하기

이은비 edited this page Mar 29, 2023 · 1 revision

findById() 함수 커스터마이징

[Example.kt]

val user = userRepository.findById(userId).orElseThrow(ApplicaitonException(ErrorCode.NOT_FOUND_EXCEPTION)

Spring Data JPA ORM을 이용해 데이터를 조작하다 보면, 위와 같은 로직을 빈번하게 작성할 것입니다. JPA에서 기본적으로 제공하는 select 쿼리 함수는 findBy 로 시작하며 반환되는 값은 Optional 타입입니다.

Service 계층에서 거의 모든 로직에 findById 함수를 이용해 값을 조회하고 조회된 값이 없는 경우에 대한 오류 처리를 매번 해주어야 하는 번거로움이 있습니다.

주말의집에서는 해당 로직을 하나의 함수로써 처리할 수 있도록 CrudRepository 의 findByIdOrNull을 커스터마이징하였습니다.

[CrudRepositoryUtil.kt]

image

주말의집 내에서 글로벌하게 관리하는 ApplicationException으로 오류를 발생시키도록 커스터마이징하였습니다.

[BoardServiceImpl.kt] image

위의 코드는 Service 계층의 로직 일부입니다.

첫 번째 getBoardOne() 의 경우, findById()를 통해 조회하고 오류 처리를 한 뒤에 DTO로 변환하는 작업을 분리해서 진행하는 것을 확인할 수 있습니다.

이 과정을 글로벌하게 정의한 findByIdOrThrow()를 이용해 단순화된 로직으로 구성한 것이 두 번째 getBoardOne() 입니다.

두 번째 경우가 로직을 좀 더 직관적으로 파악할 수 있고, 람다 함수의 사용이 유연함을 확인할 수 있습니다.

Clone this wiki locally