본문 바로가기
  • Let's study
BackEnd/Spring

[Spring] JPA 메서드 명명 규칙(Query Method)

by 코딩고수이고파 2026. 8. 7.

Spring Data JPA를 보면 QuestionRepository에는 findBySubject() 메서드를 직접 구현하지 않았는데도 정상적으로 동작한다.

 

public interface QuestionRepository extends JpaRepository<Question, Integer> {

    Question findBySubject(String subject);

}

 

메서드를 선언만 했는데 어떻게 SQL이 실행되는 걸까?

구현하지 않아도 동작하는 이유

비밀은 Spring Data JPA의 Query Method 기능에 있다.

Spring Data JPA는 Repository 인터페이스의 메서드 이름을 분석하여 그에 맞는 SQL을 자동으로 생성한다.

 

Question findBySubject(String subject);

 

라는 메서드를 선언하면 내부적으로는 다음과 같은 SQL이 실행된다.

 

SELECT *
FROM question
WHERE subject = ?;

 

즉, 개발자가 SQL을 직접 작성하지 않아도 메서드 이름만으로 조회 쿼리가 자동 생성된다.

메서드 이름 규칙

기본 형태는 다음과 같다.

 

findBy + 엔티티의 필드명

 

예를 들어 Question 엔티티에 subject 필드가 있다면

Question findBySubject(String subject);

 

를 작성할 수 있다.

자주 사용하는 JPA 메서드 명명 규칙

항목 예제 설명
AND findBySubjectAndContent(String subject, String content) 여러 컬럼을 AND 로 검색
Or findBySubjectOrContent(String subject, String content) 여러 컬럼을 OR 로 검색
Between findByCreateDateBetween(LocalDateTime fromDate, LocalDateTime toDate) 컬럼을 BETWEEN 으로 검색
LessThan findByIdLessThan(Integer id) 비교해서 칼럼의 값 보다 작은 항목 검색
GreaterThanEqual findByIdGreaterThanEqual(Integer id) 비교해서 칼럼의 값 보다 크거나 같은 항목 검색
Like findBySubjectLike(String subject) LIKE 검색
In findBySubjectIn(String[] subjects) 여러 값중에 하나인 항목 검색
OrderBy findBySubjectOrderByCreateDateAsc(String subject) 검색 결과를 정렬하여 전달

단일 조건 조회

Question findBySubject(String subject);
SELECT * FROM question WHERE `subject` = ?

And 조건 조회

Question findBySubjectAndContent(String subject, String content);
SELECT * FROM question WHERE `subject` = ? AND content = ?

LIKE 검색

List<Question> findBySubjectLike(String subject);

 

SELECT *
FROM question
WHERE subject LIKE '%Spring%';

언제 사용하는 것이 좋을까?

Query Method는 간단한 조회 기능을 만들 때 매우 편리하다.

예를 들어

  • 제목으로 조회
  • 작성일 범위 조회
  • 제목과 내용 검색
  • 정렬 조회

등은 메서드 이름만으로 대부분 구현할 수 있다.

반대로 조건이 너무 많거나 복잡한 JOIN, 서브쿼리가 필요한 경우에는 @Query나 QueryDSL을 사용하는 것이 더 적합하다.

 

댓글