MongoDB 2장 mlab 무료 클라우드
MongoDB 3장 간단 CRUD with Spring
MongoDB 4장 QueryDsl with Spring

4장에 이어서 Spring Mongodb Audit을 적용해보자

git-hub-code

5장 MongoDB 5장 Audit with Spring

auditing은 몽고디비뿐만 아니라 다른 디비를 쓸경우 audit을 지원한다.
audit은 감시한다라는 뜻을 가지고 있으며 aop이다.

1. MongoAuditConfig 추가

1
2
3
4
@Configuration
@EnableMongoRepositories("com.beanbroker.mongo.user.repositoy")
@EnableMongoAuditing
public class MongoAuditConfig {}

2. 특정 auditor 추가

1
2
3
4
5
6
7
8
9
@Component("userAuditor")
public class UserAuditor implements AuditorAware<String> {

@Override
public Optional<String> getCurrentAuditor() {

return Optional.of("beanbroker");
}
}

위처럼 셋팅 후에 당연히 정상작동할 것이라 기대하였는데 아래처럼 createdAt, createdBy field가 추가되지 않았다.

123213

위의 내용을 확인 해보니

https://stackoverflow.com/questions/59641703/spring-mongo-auditing-not-working-createddate-createdby 를 통해 해결

3. Version annotation 추가

  • UserCollection에 Version 추가
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
32
33

@QueryEntity
@Document(collection = "user")
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserCollection {

@Id @Field private String id;

@Field private String userId;

@Field private String userName;

@Field private String email;

@Field private String address;

@Field private Integer age;

@Field @CreatedBy private String createBy;
@Field @CreatedDate private LocalDateTime createdAt;
@Field @LastModifiedBy private String updatedBy;
@Field @LastModifiedDate private LocalDateTime updatedAt;

@Version
private Integer version;

@Field("isDeleted")
private int isDeleted;
}

Version 추가 후 생성 및 업데이트

32131

위와같이 셋팅하게 될경우 디비에 생성 및 업데이트 시간을 어플리케이션 레이어에서 핸들링 하게 된다.
생성 또는 업데이트시 by -> server데이터 로우가 생기며 추후 운영시에 운영개발자가 직접 디비를 만졌는지 또는 서버에서 디비가 핸들링되었는지 알수 있는 장점을 가지고 있다.