스프링 부트 몽고디비 설정

1. JPA EnableMongoAuditing를 쓰지 않을경우 아래와같이 설정파일을 셋해주면 정상적으로 몽고디비가 붙는다.

application.properties

1
2
3
4
5
6
spring.data.mongodb.host=localhost
spring.data.mongodb.port=port
spring.data.mongodb.database=dbname
spring.data.mongodb.username=user
spring.data.mongodb.password=1234
spring.data.mongodb.authentication-database=dbname

2. JPA EnableMongoAuditing를 쓸경우

위의 설정파일을 추가 후 AbstractMongoConfiguration 클래스 생성

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@Configuration
@EnableMongoRepositories(basePackageClasses = ActivityDataRepository.class)
@EnableMongoAuditing(modifyOnCreate=false)
public class MongoConfig extends AbstractMongoConfiguration {




@Value("${spring.data.mongodb.database}")
private String dbName;

@Value("${spring.data.mongodb.host}")
private String mongoHost;

@Value("${spring.data.mongodb.port}")
private int mongoPort;

@Value("${spring.data.mongodb.username}")
private String username;

@Value("${spring.data.mongodb.password}")
private String password;
@Override
protected String getDatabaseName() {
return this.dbName;
}

@Override
public Mongo mongo() throws Exception {
MongoCredential credential = MongoCredential.createCredential(username, dbName, password.toCharArray());

ServerAddress serverAddress = new ServerAddress(mongoHost, mongoPort);
return new MongoClient(serverAddress, Arrays.asList(credential));
}

@Bean
public MongoExceptionTranslator exceptionTranslator() {
return new MongoExceptionTranslator();
}

@Bean
public LoggingEventListener logginEventListener(){
return new LoggingEventListener();
}




}

EnableMongoAuditing를 쓰게되면?

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

위를 쓰게 될경우 entity에 추가

1
2
3
4
5
6
7
8
9
10
11
12

@CreatedBy
private String createBy;

@CreatedDate
private Date createdAt;

@LastModifiedBy
private String updatedBy;

@LastModifiedDate
private Date updatedaAt;

auditor추가 (시큐리티)

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

@Override
public String getCurrentAuditor() {
return "server";
}
}

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