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