MongoDB 초기 Data 세팅하기

알파로그·2023년 10월 13일
0

Database

목록 보기
16/19

✏️ 필요성

  • 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() {

				// 이곳에 실행시킬 method 를 호출
    }

		@Component
    @RequiredArgsConstructor
    static class InitService{

				// 이곳에 실행시킬 method 를 구현
		}
}

📍 초기화 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() { ... }
}
profile
잘못된 내용 PR 환영

0개의 댓글