개발/부트캠프

본캠프 : @EnableJpaAuditing

EJ EJ 2025. 3. 27. 20:06

[ @EnableJpaAuditing을 Application 클래스 vs PersistenceConfig 클래스에 적용하는 차이 ]

 

1. @EnableJpaAuditing이 하는 역할

@EnableJpaAuditing은 JPA Auditing 기능을 활성화하는 어노테이션으로,
@CreatedDate, @LastModifiedDate 같은 자동 날짜 관리 기능을 사용할 수 있도록 해줍니다.

이 어노테이션을 어디에 선언하느냐에 따라 Spring의 실행 방식에 차이가 생길 수 있습니다.

 

2. @EnableJpaAuditing을 Application 클래스에 선언할 때

✔ 특징

  1. Spring Boot 애플리케이션이 실행될 때 JPA Auditing이 함께 활성화됨
  2. @SpringBootApplication이 위치한 곳에서 모든 설정을 관리할 수 있음
  3. 단점:
    • 테스트 코드에서 별도의 설정 없이 바로 Auditing이 적용될 수도 있음(원치 않는 영향)
    • Config 클래스로 분리되지 않아 확장성이 떨어질 수 있음
    • Application 클래스의 역할이 많아져서 책임 분리가 부족해질 수 있음

➡ 단순한 프로젝트에서는 이렇게 사용해도 문제없지만, 규모가 커질수록 유지보수성이 떨어질 수 있음

 

3. @EnableJpaAuditing을 PersistenceConfig 클래스에 선언할 때

✔ 특징

  1. Persistence(데이터 저장 관련) 설정을 별도의 클래스로 분리하여 관리 가능
  2. @EnableJpaAuditing이 명확히 PersistenceConfig 내에서만 작동
  3. 테스트 코드에서 Auditing 기능을 끄거나 조정하기 쉬움
  4. Application 클래스가 가벼워지고, 역할 분리가 명확해짐

➡ 대규모 프로젝트에서는 Persistence 관련 설정을 별도로 관리하는 것이 더 유지보수에 유리!

 

4. 두 방식의 비교 (어느 방법이 더 좋을까?)

적용 위치 장점 단점 추천 상황
Application 클래스
(@SpringBootApplication)
- 설정을 한곳에서 관리할 수 있음
- 작은 프로젝트에서는 간단하게 설정 가능
- 역할이 많아져 가독성이 떨어질 수 있음
- 테스트에서 의도치 않게 활성화될 가능성 있음
작은 프로젝트 또는 빠른 개발이 필요할 때
PersistenceConfig 클래스
(@Configuration)
- Persistence 관련 설정을 분리하여 관리 가능
- 테스트에서 쉽게 ON/OFF 가능
- 유지보수성이 뛰어남
- 별도의 설정 클래스를 만들어야 함 대규모 프로젝트 또는 유지보수가 중요한 경우

*결론

작은 프로젝트 → @EnableJpaAuditing을 Application 클래스에 선언해도 OK
대규모 프로젝트 → PersistenceConfig 클래스로 분리하는 것이 더 좋음

➡ 프로젝트가 커질수록 PersistenceConfig 클래스로 관리하는 것이 유지보수성과 확장성 측면에서 더 유리합니다!