Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

che01 님의 블로그

JPA Auditing 핵심 정리 본문

카테고리 없음

JPA Auditing 핵심 정리

che01 2025. 6. 18. 11:44

 

JPA Auditing 핵심 정리

1. 기본 기능: 생성/수정 날짜 자동 기록

  • @CreatedDate : 엔티티가 생성될 때 자동으로 현재 시각을 기록
  • @LastModifiedDate : 엔티티가 수정될 때 자동으로 현재 시각을 기록
  • 이 기능들을 사용하려면 다음 3가지가 필요
    1. 엔티티(또는 부모클래스)에 @EntityListeners(AuditingEntityListener.class) 붙임
    2. 스프링 부트 메인 클래스나 설정 클래스에 @EnableJpaAuditing 붙여서 기능 활성화
    3. 날짜 필드는 LocalDateTime 타입 등으로 선언
  • 이게 어떻게 가능한가?
    1. @EnableJpaAuditing → 기능 활성화
      • Spring Boot가 실행될 때, 이 어노테이션을 통해 JPA Auditing 기능을 켭니다.
      • 이걸 켜면 Spring이 내부적으로 Auditing 관련 이벤트를 감지할 준비를 합니다.
    2. @EntityListeners(AuditingEntityListener.class) → 이벤트 감지기 연결
      • 해당 엔티티(또는 상속된 부모 클래스)에서 AuditingEntityListener를 리스너로 등록하면
      • JPA가 persist(저장), update(수정) 시점에 이벤트를 발생시킬 때,
      • 이 리스너가 그 시점을 잡아서 @CreatedDate, @LastModifiedDate 필드에 값을 자동으로 채워줘요.
    3. Spring이 자동으로 날짜 필드에 값을 넣어줌
      • 위 리스너가 동작하면서 LocalDateTime.now() 같은 값을 자동으로 주입해줍니다.
      •  

2. 작성자/수정자 자동 기록 (AuditorAware)

  • @CreatedBy : 생성자 정보 자동 기록
  • @LastModifiedBy : 수정자 정보 자동 기록
  • 누가 작업했는지(작성자, 수정자) 자동으로 기록하려면
    • AuditorAware<T> 인터페이스를 구현한 빈을 만들어야 함
    • 이 구현체에서 보통 스프링 시큐리티 컨텍스트(SecurityContextHolder)에서 현재 로그인한 사용자 이름을 반환함
  • 그리고 @EnableJpaAuditing(auditorAwareRef = "auditorAwareBeanName") 처럼 해당 빈 이름을 명시해 줘야 작동
  • 이렇게 하면 보안상 누가 언제 뭘 했는지 추적 가능해짐 (감사 추적, audit trail)

4. 왜 AuditorAware를 만들고 사용하는가?

  • “누가 만들고 수정했는지” 자동 기록을 위해서
  • 보안상 변경 이력을 남기기 위해서(감사 추적)
  • 로그인한 사용자 정보(스프링 시큐리티 SecurityContextHolder)를 JPA가 알 수 있게 해주기 위해서
  • 관리자가 변경 이력을 추적하거나, 문제가 생겼을 때 책임 소재를 명확히 할 수 있게 하기 위해서