Spring

(Springboot 관련) mongoDB 초기 설정

쿠카이든 2022. 10. 1. 21:54
728x90
몽고 DB 초기 설정

 

 

몽고 DB가 설치되면 https://start.spring.io/ 로 이동하여 다음 세 가지를 dependencies를 모두 추가하자.

 

Spring Data JPA도 빼먹지 말고 추가하자.

 

 

이제 project를 open 하여 다음 코드들을 추가해보자. (공식 문서 참조했습니다.)

 

public class Recipe {
	@Id
    public String id;

    public String name;
    public String type;

    public Recipe() {}

    public Recipe(String name, String type) {
        this.name = name;
        this.type = type;
    }
}

 

public interface RecipeRepository extends MongoRepository<Recipe, String> {
    public Recipe findByName(String name);
    public List<Recipe> findAllByName(String name);
}​

 

  • MongoRepository<Recipe, String> 를 적용하면 Key가 string인 Recipe 객체에 대해 CRUD 기능을 자동으로 만들어준다.
  • RecipeRepository는 인터페이스로 선언되어 있지만 스프링 AOP 프록시로 자동으로 구현체가 생성된다.
  • 이 구현체는 컨테이너에도 자동 등록된다.

 

 
@SpringBootApplication
public class TestApplication implements CommandLineRunner {

@Autowired
private CustomerRepository repository;

public static void main(String[] args) {
	SpringApplication.run(TestApplication.class, args);
}

@Override
public void run(String... args) throws Exception {

	repository.deleteAll();
	}
}

 

  • 이제 main 메서드를 실행하면 run()의 코드가 동작한다.
  • 하지만 이를 위해서는 MongoDB를 띄워야 한다.

 

가장 간단한 방법이 MongoDB를 설치했던 MongoDBCompass를 이용하는 것이다.

MongoDBCompass를 실행하면 MongoDB의 기본 port인 27017로 서버를 실행시킬 수 있다.

 

이때 스프링의 DataSource가 DB와 연결하기 위한 데이터를 application.properties에 설정해주어야 자동 연결이 된다.
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017

 

  • 단, 이런 설정을 적용해도 본인은 계속 오류가 발생하였다.
  • 구글링으로 계속 찾아본 결과, 충돌 문제로 인한 오류라고 한다.
  • application.properties에 다음 설정도 추가해주자.
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

 

  • 이제 서버가 정상적으로 동작하고 MongoDBCompass에도 저장하는 데이터들이 표시될 것이다.
  • 이제 테스트 코드를 진행하자.
  • 테스트는 아주 간단하게 Embedded MongoDB Database를 이용하면 된다.
  • 테스트 클래스에 @DataMongoTest 애노테이션만 적용하면 자동으로 내장 MongoDB로 테스트가 수행된다.
 
@DataMongoTest
class RecipeRepositoryTest {

@Autowired
private RecipeRepository repository;

@AfterEach
void afterEach() { //모두 롤백
	repository.deleteAll();
}

@Test
void save(){
    //given
    Recipe recipe = new Recipe("봉골레 파스타", "파스타");
    //when
    Recipe savedRecipe = repository.save(recipe);

    //then
    Assertions.assertThat(savedRecipe).isEqualTo(recipe);
    }
}

 

  • 단, 이것도 설정이 필요하다..
  • test의 application.properties에 내장 DB의 버전만 명시해주면 된다.
  • 여러 버전들마다 차이가 있겠지만 4.0.21 버전으로 진행해 보았다.
spring.mongodb.embedded.version=4.0.21

이제 테스트를 수행하면, 처음에 버전에 맞는 Embedded MongoDB를 다운로드를 하지만 이후에는 다운로드 없이 바로 실행 가능하다.

 

참고 : https://everenew.tistory.com/276

 

[Spring Boot] MongoDB Gradle로 연결하고 Test 수행하기

공식 문서에도 잘 정리되어 있지만, 초심자 입장에서는 알 수 없는 오류를 많이 만나서 정리해본다. 다음 공식 문서를 따라 하면 된다. https://spring.io/guides/gs/accessing-data-mongodb/ Accessing Data with..

everenew.tistory.com

 

728x90