✏️ 필요성
- MongoDB 를 사용한 프로젝트 개발환경에서 서버를 재실행 할 때 마다 데이터가 초기화 되지 않아 정확한 검증이 쉽지 않다.
- 정확한 검증을 하기 위해서 서버가 재실행 되면 데이터를 초기화 시킬 필요가 있다.
- 또 편의를 위해 재실행시 data 를 세팅시켜둘 필요가 있다.
✏️ Post Construct 를 사용한 data 세팅
@PostConstruct
를 선언한 객체는 spring boot 서버 실행시 자동으로 실행되는 특징이 있다.
- 이 기능을 이용해 db 를 초기화하고, 원하는 data 를 세팅시킬 수 있다.
📍 InitData 객체 생성
@Profile
을 선언해 원하는 환경에서만 해당 객체가 실행될 수 있도록 설정한다.
Init
method 에 @PostConstruct
를 선언하고 원하는 method 를 InitService
를 통해 호출한다.
InitService
에 실행시킬 method 를 구현한다.
@Profile("dev")
@Component
@RequiredArgsConstructor
public class initData {
private final InitService initService;
@PostConstruct
public void init() {
}
@Component
@RequiredArgsConstructor
static class InitService{
}
}
📍 초기화 method 구현
- mongo template 을 사용해 DB내의 모든 Collection 명을 조회한다.
- 조회한 Collection 명을 기준으로 모든 문서를 삭제한다.
private final InitService initService;
@PostConstruct
public void init() {
initService.reset_data();
}
@Component
@RequiredArgsConstructor
static class InitService{
private final MongoTemplate mongoTemplate;
public void reset_data() {
Set<String> collections = mongoTemplate.getCollectionNames();
for (String collection : collections)
mongoTemplate.remove(new Query(), collection);
}
📍 편의 data 세팅
- 개발의 편의를 위해 이미 검증이 끝난 api 는 자동으로 세팅되도록 설정할 수 있다.
- 이 방법으로 원하는 data 를 세팅하거나, 또는 주석을 통해 잠시 비활성화 시키는 등 편리하게 작업을 수행할 수 있다.
private final InitService initService;
@PostConstruct
public void init() {
initService.reset_data();
initService.posts1_setting();
}
@Component
@RequiredArgsConstructor
static class InitService{
private final MongoTemplate mongoTemplate;
private final PostsCreateUseCase postsCreateUseCase;
public void reset_data() { ... }
public void posts1_setting() { ... }
}