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

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

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개의 댓글