Kim-Baek 개발자 이야기

MongoDB Audit 본문

컴퓨터 공학/DB

MongoDB Audit

김백개발자 2024. 12. 10. 13:46

Spring Data MongoDB: @EnableMongoAuditing

@EnableMongoAuditing는 Spring Data MongoDB에서 도큐먼트의 생성 및 수정과 관련된 정보를 자동으로 기록할 수 있게 해주는 어노테이션입니다. 이 기능을 통해 데이터가 생성되거나 변경될 때 자동으로 타임스탬프와 사용자 정보를 관리할 수 있습니다.

주요 기능

  1. 생성일 및 수정일 자동 기록
    • @CreatedDate: 도큐먼트가 처음 생성될 때, 현재 날짜와 시간을 기록합니다.
    • @LastModifiedDate: 도큐먼트가 수정될 때마다 현재 날짜와 시간을 기록합니다.
  2. 생성자 및 수정자 정보 기록
    • @CreatedBy: 도큐먼트를 생성한 사용자의 정보를 기록합니다.
    • @LastModifiedBy: 도큐먼트를 수정한 사용자의 정보를 기록합니다.

설정 방법

기본적으로 @EnableMongoAuditing는 Spring Application 설정 클래스에 추가하여 사용합니다.

import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.EnableMongoAuditing;

@Configuration
@EnableMongoAuditing
public class MongoConfig {
    // 기타 MongoDB 설정
}

작동 방식

  • 데이터에 대한 자동 기록: 어노테이션이 적용된 도큐먼트는 변경 시 자동으로 관련 필드가 업데이트됩니다.
  • 사용자 정보 제공: @CreatedBy@LastModifiedBy는 보통 Spring Security를 통해 사용자 정보를 제공합니다.

요약

@EnableMongoAuditing는 MongoDB 도큐먼트의 생성 및 수정과 관련된 메타데이터 관리를 자동화하여 개발자가 수동으로 코드를 작성해야 하는 부담을 덜어줍니다. 특히 대규모 애플리케이션에서 데이터 추적이 필요한 경우 유용한 도구입니다.

@CreatedDate, @LastModifiedDate, @CreatedBy, @LastModifiedBy는 데이터가 데이터베이스에 저장되거나 업데이트 될 때 자동으로 관련 정보를 기록해주는 어노테이션입니다. 이 어노테이션들은 Spring Data MongoDB의 감사(auditing) 기능을 활용하여 애플리케이션 내의 변경 사항을 손쉽게 추적할 수 있도록 돕습니다.

아래는 각각의 어노테이션들이 실전에서 어떻게 활용될 수 있는지 설명하는 예시입니다.

예제: 사용자의 게시글 관리 시스템

도큐먼트 설정

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.annotation.CreatedBy;
import org.springframework.data.annotation.LastModifiedBy;
import org.springframework.data.mongodb.core.mapping.Document;

import java.time.LocalDateTime;

@Document(collection = "posts")
public class Post {

    private String id;
    private String title;
    private String content;

    @CreatedDate
    private LocalDateTime createdDate;

    @LastModifiedDate
    private LocalDateTime lastModifiedDate;

    @CreatedBy
    private String createdBy;

    @LastModifiedBy
    private String lastModifiedBy;

    // Getters and setters
}

기능 설명

  1. @CreatedDate
    • createdDate 필드는 도큐먼트(Post)가 처음 생성될 때의 날짜와 시간 정보를 자동으로 기록합니다.
    • 예를 들어, 사용자가 새로운 게시글을 생성하면 createdDate 필드가 해당 시점의 날짜와 시간으로 자동 설정됩니다.
    • { "id": "1", "title": "첫 번째 게시글", "content": "Hello, World!", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": null, "createdBy": null, "lastModifiedBy": null }
  2. @LastModifiedDate
    • lastModifiedDate 필드는 도큐먼트가 수정될 때마다 자동으로 날짜와 시간을 업데이트합니다.
    • 게시글의 내용을 수정할 때마다 이 필드는 현재 시각으로 갱신됩니다.
    • { "id": "1", "title": "첫 번째 게시글", "content": "수정된 콘텐츠", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": "2023-10-06T11:20:45", "createdBy": null, "lastModifiedBy": null }
  3. @CreatedBy
    • createdBy 필드는 도큐먼트를 처음 생성한 사용자의 정보를 기록합니다.
    • 예를 들어, 사용자가 로그인한 상태로 게시글을 작성하면 그 사용자의 ID나 이름이 createdBy 필드에 저장됩니다.
    • { "id": "1", "title": "첫 번째 게시글", "content": "Hello, World!", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": null, "createdBy": "user123", "lastModifiedBy": null }
  4. @LastModifiedBy
    • lastModifiedBy 필드는 도큐먼트를 마지막으로 수정한 사용자의 정보를 기록합니다.
    • 사용자가 게시글을 수정할 때마다, 이 필드는 현재 로그인한 사용자의 정보로 갱신됩니다.
    • { "id": "1", "title": "첫 번째 게시글", "content": "수정된 콘텐츠", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": "2023-10-06T11:20:45", "createdBy": "user123", "lastModifiedBy": "user456" }

사용자 정보와의 통합

@CreatedBy@LastModifiedBy 필드는 보통 Spring Security와의 통합을 통해 자동으로 설정됩니다. Spring Security는 현재 인증된 사용자의 정보를 Security Context에 보관하고 있기 때문에, 이를 활용하여 자동으로 사용자 정보를 기록할 수 있습니다. 이를 위해서는 앞서 설명한 AuditorAware<T> 인터페이스를 구현하면 됩니다.

이러한 감사 기능들은 데이터의 무결성을 높이고, 각 도큐먼트의 변경 이력을 추적할 수 있어 데이터 관리의 효율성을 크게 높여줍니다.

반응형

'컴퓨터 공학 > DB' 카테고리의 다른 글

RDB, NoSQL, CAP, PACELC, ACID, 정규화  (0) 2020.10.13
Comments