java/Spring

Spring Data JPA 메서드 명명 규칙

킨글 2025. 6. 3. 12:04

Spring Data JPA의 레포지토리 메서드 명명 규칙과 프로젝션을 함께 고려할 때, email만 반환하는 메서드의 이름으로 findEmailByUserId는 매우 일반적이고 권장되는 명명 방식입니다.

Spring Data JPA의 메서드 이름은 일반적으로 다음과 같은 구조를 따릅니다.

[Prefix][Distinct]By[Criteria][Keywords][Order]

[Prefix]: find, get, read, query, count, stream 등 조회 작업을 나타내는 접두사입니다.
[Distinct]: 결과에서 중복을 제거할 때 사용합니다.
By: 검색 조건(WHERE 절)의 시작을 나타내는 구분자입니다.
[Criteria]: By 뒤에 오는 부분으로, WHERE 절에 사용될 엔티티 필드 이름과 조건을 명시합니다 (UserId, UsernameAndAge, LastNameLike 등). 이것이 메서드의 파라미터와 연결됩니다.
[Keywords]: And, Or, LessThan, GreaterThan 등 조건을 결합하거나 상세화하는 키워드입니다.
[Order]: OrderBy 뒤에 오는 부분으로, 정렬 순서를 지정합니다.
여기서 중요한 부분은 **[Prefix] 바로 뒤에 오는 부분(혹은 Distinct 뒤)**이 레포지토리 메서드가 무엇을 반환하는지 나타낼 수 있다는 것입니다. 전체 엔티티를 반환할 때는 이 부분을 생략하거나 엔티티 이름을 포함할 수 있지만 (예: findUserVoByUserId), 프로젝션을 사용할 때는 조회하려는 필드나 프로젝션의 이름을 명시적으로 넣어주는 것이 일반적입니다.

따라서 findEmailByUserId라는 이름은 다음과 같이 해석됩니다.

find: 조회한다.
Email: (결과로) email 필드(또는 email 프로젝션)를 가져온다.
By: 조건은...
UserId: userId 필드를 기준으로 한다.
즉, 이 메서드 이름은 "userId를 기준으로 email 정보를 찾아온다"는 의미를 명확하게 전달합니다. 요청 조건(UserId)과 반환 데이터의 핵심(Email)을 모두 포함하고 있으며, 특히 반환되는 데이터가 전체 엔티티가 아닌 특정 필드(또는 프로젝션)임을 이름으로 표현하는 좋은 방법입니다.

다른 일반적인 명명 예시로는 findNameAndEmailByUserId, findUserEmailProjectionByUserId 등이 있을 수 있지만, findEmailByUserId는 간결하면서도 의미 전달이 확실하여 널리 사용됩니다.