2024. 10. 19. 20:02ㆍSpring Boot/Spring Data JPA
Reserved Method Names는 Spring Data JPA에서 특정 메서드 이름이 미리 정의된 규칙에 따라 작동한다는 것을 의미합니다. 이 경우, 리포지토리 메서드는 일반적으로 엔티티의 속성과 이름을 기반으로 결합되지만, 일부 특별한 메서드는 그렇지 않습니다. 특히, CrudRepository
와 같은 기본 리포지토리에서 상속받은 메서드는 identifier property (예: 프라이머리 키)에 대해 특정 동작을 수행합니다. 이러한 메서드는 reserved methods라고 불리며, 기본적으로 identifier property에 맞춰 동작합니다.
아래 예를 통해 이 개념을 자세히 설명하겠습니다.
예시 도메인 클래스
다음은 User
라는 도메인 클래스입니다:
class User {
@Id Long pk; // (1) identifier 속성 (프라이머리 키)
Long id; // (2) id라는 이름의 속성이지만 identifier가 아님
// ...
}
속성 설명
- pk: 이 속성은
@Id
어노테이션으로 마크되어 있으며, 이 클래스의 프라이머리 키로 설정됩니다. - id: 이 속성은 이름이
id
이지만, identifier로 설정되지 않은 속성입니다.
예시 리포지토리 인터페이스
다음은 UserRepository
라는 리포지토리 인터페이스입니다:
interface UserRepository extends Repository<User, Long> {
Optional<User> findById(Long id); // (3)
Optional<User> findByPk(Long pk); // (4)
Optional<User> findUserById(Long id); // (5)
}
메서드 설명
- findById(Long id):
- 이 메서드는
Optional<User>
를 반환하며, pk 속성을 대상으로 합니다. 이 메서드는CrudRepository
의 기본 메서드 중 하나인findById
에 의해 정의된 것입니다. 따라서 메서드 이름에id
가 포함되어 있다고 하더라도, 실제로는 identifier 속성을 대상으로 하며, 이는 reserved method로 간주됩니다.
- 이 메서드는
- findByPk(Long pk):
- 이 메서드는
pk
속성을 직접적으로 참조하는 derived query입니다. 여기서는pk
라는 이름을 사용하여 identifier 속성을 명확하게 지정하고 있습니다.
- 이 메서드는
- findUserById(Long id):
- 이 메서드는
id
라는 이름을 가진 속성을 대상으로 하며, 주제와 술어를 명확히 구분합니다. 즉,find
와by
사이의 설명적 토큰을 사용함으로써 reserved method와의 충돌을 피하고 있습니다. 이 메서드는id
라는 속성에 대해 별도의 쿼리를 생성합니다.
- 이 메서드는
메서드 이름의 특별한 동작
이러한 특별한 동작은 조회 메서드뿐만 아니라, exists
나 delete
메서드와 같은 다른 메서드에도 적용됩니다. 이러한 메서드들은 다음과 같은 점을 주의해야 합니다:
- Reserved Methods:
findById
,existsById
,deleteById
와 같은 메서드는 예약된 메서드이기 때문에, 이들 메서드는 identifier 속성과 결합하여 동작합니다. 즉, 메서드 이름에서의 속성 참조가 실제 속성과 일치하지 않더라도 예약된 메서드가 우선시됩니다. - 충돌 회피:
findUserById
와 같이 설명적인 메서드 이름을 사용하는 것은 reserved method와의 충돌을 피하는 한 가지 방법입니다. 이런 식으로 메서드 이름을 구성하면, 리포지토리 인터페이스 내에서 혼동을 줄일 수 있습니다.
Spring Data JPA에서의 Reserved Method Names 개념은 메서드 이름에 따라 쿼리가 어떻게 생성되는지를 이해하는 데 매우 중요합니다. 특히, identifier 속성에 대한 예약된 메서드는 일반적인 derived query와 다르게 작동하므로, 리포지토리 메서드를 정의할 때 이 점을 반드시 고려해야 합니다. 이를 통해 코드의 명확성과 예측 가능성을 높일 수 있습니다.
'Spring Boot > Spring Data JPA' 카테고리의 다른 글
Repository Methods Returning Collections or Iterables (0) | 2024.10.19 |
---|---|
Property Expressions (0) | 2024.10.19 |
Query Creation (0) | 2024.10.19 |
Query Lookup Strategies (0) | 2024.10.19 |
Defining Query Methods (0) | 2024.10.19 |