🔍 Query Methods란?
- Spring Data JPA에서 메서드 이름을 기반으로 데이터베이스 쿼리를 자동 생성하는 기능
- 직접 SQL을 작성하지 않고도 복잡한 쿼리를 쉽게 수행할 수 있게 됨
🔧 사용 방법 예시
public interface MemberRepository extends JpaRepository<Member, Long> {
// 이름과 주소로 회원 검색
Member findByNameAndAddress(String name, String address);
}
-- 실제로 실행되는 SQL
SELECT * FROM member WHERE name = ? AND address = ?;
🧠 쿼리 메서드 해석 규칙
| 메서드 이름 구성 | 의미 |
|---|---|
findBy | 조회 시작 키워드 |
Name | name 컬럼 조건 |
AndAddress | address 컬럼 조건 추가 |
✅ 메서드 네이밍 규칙만 지키면 자동으로 JPQL이 생성됨
⚠️ 주의 사항
⛔ 복잡한 쿼리는 직접 확인 필수
이름으로만 추론된 쿼리가 의도한 대로 동작하지 않을 수 있음
→ 반드시 로그 또는 @Query로 SQL 확인
📖 참고 문서
Spring 공식 문서 - Query Methods → 필요한 Query Method를 찾아서 구현
🕓 JPA Auditing (순수 JPA 기준)이란?
- 엔티티의 생성 시간, 수정 시간을 자동으로 기록해 주는 기능
- 모든 엔티티마다 날짜 필드를 수동으로 관리하는 번거로움을 해결
❗ 문제점: 모든 엔티티마다 중복 필드 작성
@Entity
public class User {
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
@Entity
public class Item {
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
}
💡 해결 방법: 공통 슈퍼클래스로 추출
@MappedSuperclass
public class BaseEntity {
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
@PrePersist
public void prePersist() {
LocalDateTime now = LocalDateTime.now();
createdAt = now;
updatedAt = now;
}
@PreUpdate
public void preUpdate() {
updatedAt = LocalDateTime.now();
}
}
🕵️♂️ Spring Data JPA Auditing이란?
- 엔티티의 생성 및 수정 시간을 자동으로 관리해 주는 기능
- Auditing 기능을 어노테이션 기반으로 더 쉽게 사용할 수 있게 해 줌
🏷️ 주요 어노테이션 목록
| 어노테이션 | 설명 |
|---|---|
@EnableJpaAuditing | Auditing 기능 활성화 (Application 클래스에 선언) |
@MappedSuperclass | 공통 필드를 가진 상위 클래스로 사용 |
@EntityListeners(AuditingEntityListener.class) | 엔티티 변화 감지 리스너 설정 |
@CreatedDate | 생성 시각 자동 저장 |
@LastModifiedDate | 수정 시각 자동 저장 |
@CreatedBy / @LastModifiedBy | 생성자 / 수정자 저장 (Spring Security 필요) |
@Temporal | 날짜 타입 지정 (옵션) |
⚙️ 적용 방법
1️⃣ @EnableJpaAuditing 추가
@EnableJpaAuditing
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
→ 메인 클래스 위에 선언하여 Auditing 기능 활성화
2️⃣ BaseEntity 생성
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {
@CreatedDate
@Column(updatable = false)
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime createdAt;
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
private LocalDateTime modifiedAt;
}
→ 모든 엔티티가 상속받으면 createdAt, modifiedAt을 자동으로 가짐
3️⃣ 엔티티에 상속 적용
@Entity
public class User extends BaseEntity {
@Id
private Long id;
private String name;
}
→ User 클래스는 생성/수정 시간 자동 관리됨
💡 @CreatedBy, @LastModifiedBy는 언제 사용할까?
AuditorAware<T>를 구현해야 동작🧠 요약 정리
| 항목 | Query Methods | JPA Auditing |
|---|---|---|
| 기능 | 메서드 이름만으로 자동 SQL 생성 | 생성일 · 수정일을 자동 기록 |
| 장점 | 코드 간결, SQL 없이 개발 가능 | 중복 제거, 시간 일관성 확보 |
| 단점 | 쿼리 복잡성 증가 시 해석 어려움 | AuditorAware 설정이 번거로울 수 있음 |
| 보완 | @Query, Native Query 사용 | Spring Security 연동 |