Spring Data JPA - 반환 타입


Spring Data JPA 반환 타입

스프링 데이터 JPA의 유연한 반환 타입 이해하기

스프링 데이터 JPA는 개발자의 생산성 향상을 위해 다양한 반환 타입을 지원하며, 이에 따른 다양한 케이스에 대응할 수 있게 해줍니다.

지원되는 반환 타입

스프링 데이터 JPA는 다음과 같은 반환 타입을 지원합니다:

1
2
3
fun findByUsername(name: String): List<Member> //컬렉션 반환 
fun findByUsername(name: String): Member? //단건 반환 (Nullable)
fun findByUsername(name: String): Optional<Member> //단건 Optional 반환

  • 컬렉션 반환: 조회 결과가 여러 개일 경우 사용합니다.
  • 단건 반환: 조회 결과가 하나만 있을 경우 사용합니다.
  • 단건 Optional 반환: 조회 결과가 없을 경우 Optional.empty()를 반환하므로 null 체크 없이 안전하게 데이터 처리가 가능합니다.

반환 결과에 따른 대응

조회 결과에 따라 반환 타입이 어떻게 작동하는지 살펴보겠습니다.

  • 컬렉션 반환:
    • 결과 없음: 빈 컬렉션 반환
  • 단건 반환:
    • 결과 없음: null 반환
    • 결과가 2건 이상: javax.persistence.NonUniqueResultException 예외 발생

참고: 단건 반환 타입으로 지정한 메서드를 호출할 때 스프링 데이터 JPA는 내부적으로 JPQL의 Query.getSingleResult() 메서드를 호출합니다. 이 메서드를 호출했을 때 조회 결과가 없으면 javax.persistence.NoResultException 예외가 발생합니다. 이를 개발자가 처리하기에는 불편한 부분이 있기 때문에 스프링 데이터 JPA는 이 예외 발생 시 무시하고 null을 반환합니다.


스프링 데이터 JPA는 Kotlin과 잘 결합되어 다양한 반환 타입을 지원하며, 각각의 경우에 맞게 개발자가 편리하게 데이터를 처리할 수 있게 도와줍니다. 특히 Kotlin의 null safety와 Optional을 활용하면 데이터 처리가 더욱 안전하고 간결해집니다.

소스코드

참조