일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 예제로 배우는 스프링 입문
- 자바스크립트
- 스프링
- Spring
- Effective Java 3
- 알고리즘정렬
- Sort
- 스프링 핵심원리
- 김영한
- 엘라스틱서치
- ElasticSearch
- 카카오 면접
- k8s
- 이차전지관련주
- 자바
- 이펙티브 자바
- Effective Java
- 이펙티브자바
- 티스토리챌린지
- kubernetes
- java
- 스프링핵심원리
- 코딩테스트
- JavaScript
- effectivejava
- 클린아키텍처
- 스프링부트
- 카카오
- 오블완
- 알고리즘
- Today
- Total
Kim-Baek 개발자 이야기
MongoDB Audit 본문
Spring Data MongoDB: @EnableMongoAuditing
@EnableMongoAuditing
는 Spring Data MongoDB에서 도큐먼트의 생성 및 수정과 관련된 정보를 자동으로 기록할 수 있게 해주는 어노테이션입니다. 이 기능을 통해 데이터가 생성되거나 변경될 때 자동으로 타임스탬프와 사용자 정보를 관리할 수 있습니다.
주요 기능
- 생성일 및 수정일 자동 기록
@CreatedDate
: 도큐먼트가 처음 생성될 때, 현재 날짜와 시간을 기록합니다.@LastModifiedDate
: 도큐먼트가 수정될 때마다 현재 날짜와 시간을 기록합니다.
- 생성자 및 수정자 정보 기록
@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
}
기능 설명
@CreatedDate
createdDate
필드는 도큐먼트(Post)가 처음 생성될 때의 날짜와 시간 정보를 자동으로 기록합니다.- 예를 들어, 사용자가 새로운 게시글을 생성하면
createdDate
필드가 해당 시점의 날짜와 시간으로 자동 설정됩니다. { "id": "1", "title": "첫 번째 게시글", "content": "Hello, World!", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": null, "createdBy": null, "lastModifiedBy": null }
@LastModifiedDate
lastModifiedDate
필드는 도큐먼트가 수정될 때마다 자동으로 날짜와 시간을 업데이트합니다.- 게시글의 내용을 수정할 때마다 이 필드는 현재 시각으로 갱신됩니다.
{ "id": "1", "title": "첫 번째 게시글", "content": "수정된 콘텐츠", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": "2023-10-06T11:20:45", "createdBy": null, "lastModifiedBy": null }
@CreatedBy
createdBy
필드는 도큐먼트를 처음 생성한 사용자의 정보를 기록합니다.- 예를 들어, 사용자가 로그인한 상태로 게시글을 작성하면 그 사용자의 ID나 이름이
createdBy
필드에 저장됩니다. { "id": "1", "title": "첫 번째 게시글", "content": "Hello, World!", "createdDate": "2023-10-05T10:15:30", "lastModifiedDate": null, "createdBy": "user123", "lastModifiedBy": null }
@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 |
---|