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
728x90
'Spring' 카테고리의 다른 글
SpringBoot + JPA 멀티 연동하기 (0) | 2023.01.12 |
---|---|
RestTemplate과 WebClient(feat. 서버 간 데이터 주고 받기) (0) | 2022.12.02 |
AOP - 관점 지향 프로그래밍 (0) | 2022.09.13 |
[스프링 부트와 AWS로 혼자 구현하는 웹 서비스] p.62 실행 오류 해결법 (0) | 2022.05.16 |
[마이바티스] @Alias 어노테이션 (0) | 2022.03.22 |