메타데이터 컬럼을 자동으로 업데이트

날아올라돼지야·2024년 8월 26일

1. 메타데이터 컬럼에 대한 Spring Data JPA 애노테이션 추가

먼저, 메타데이터 컬럼을 포함하는 BaseEntity 클래스에 Spring Data JPA의 감사(auditing) 기능을 적용하기 위해 필요한 애노테이션을 추가합니다.

@CreatedDate: 레코드가 생성된 날짜와 시간을 자동으로 설정합니다.
@CreatedBy: 레코드를 생성한 사용자를 자동으로 설정합니다.
@LastModifiedDate: 레코드가 마지막으로 수정된 날짜와 시간을 자동으로 설정합니다.
@LastModifiedBy: 레코드를 마지막으로 수정한 사용자를 자동으로 설정합니다.

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class BaseEntity {

    @CreatedDate
    @Column(updatable = false)
    private LocalDateTime createdAt;

    @CreatedBy
    @Column(updatable = false)
    private String createdBy;

    @LastModifiedDate
    private LocalDateTime updatedAt;

    @LastModifiedBy
    private String updatedBy;

    // Getters and setters...
}

2. AuditAware 구현 클래스 생성

Spring Data JPA가 createdBy와 updatedBy 필드를 자동으로 채울 수 있도록 AuditAware 인터페이스를 구현하는 클래스를 작성합니다. 이 클래스는 현재 작업 중인 사용자를 반환하는 역할을 합니다.

@Component("auditAwareImpl")
public class AuditAwareImpl implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        // 현재는 하드코딩된 값을 반환하지만, 나중에 Spring Security와 연동해 실제 사용자 정보를 반환하도록 수정 가능
        return Optional.of("ACCOUNTS_MS");
    }
}

3. @EnableJpaAuditing 애노테이션 추가

Spring Data JPA의 감사 기능을 활성화하기 위해, 메인 애플리케이션 클래스에 @EnableJpaAuditing 애노테이션을 추가합니다.

@SpringBootApplication
@EnableJpaAuditing(auditorAwareRef = "auditAwareImpl")
public class AccountsMicroserviceApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccountsMicroserviceApplication.class, args);
    }
}

4. 수동 메타데이터 업데이트 코드 제거

AccountServiceImpl 클래스에서 수동으로 createdAt, createdBy, updatedAt, updatedBy를 설정하던 코드를 제거합니다. 이제 Spring Data JPA가 이 작업을 자동으로 처리합니다.

// 수동 메타데이터 업데이트 코드 제거
// account.setCreatedAt(LocalDateTime.now());
// account.setCreatedBy("User");

// 고객 업데이트 부분에서도 유사한 코드 제거

5. 애플리케이션 테스트 및 검증

코드를 빌드하고, Postman 등의 도구를 사용해 API를 테스트합니다. 레코드를 생성 및 업데이트할 때 createdBy, createdAt, updatedBy, updatedAt 필드가 자동으로 채워지는지 확인합니다.

// 예시: 새로운 계정 생성 후 데이터베이스에서 createdBy와 createdAt이 자동으로 설정되었는지 확인
SELECT createdBy, createdAt FROM accounts;
// 계정 업데이트 후 updatedBy와 updatedAt이 자동으로 업데이트되었는지 확인
SELECT updatedBy, updatedAt FROM accounts;

profile
무슨 생각하며 사니

0개의 댓글