Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
티스토리 뷰
공식 문서에도 잘 정리되어 있지만, 초심자 입장에서는 알 수 없는 오류를 많이 만나서 정리해본다.
다음 공식 문서를 따라 하면 된다.
https://spring.io/guides/gs/accessing-data-mongodb/
일단 몽고 DB를 설치하자.
하진쓰님의 게시글을 따라 하면 쉽다.
본인의 경우에는 6.0 버전을 설치했지만 제대로 설치가 되지 않아 5.0 버전을 설치하였다.
몽고 DB가 설치되면 https://start.spring.io/ 로 이동하여 다음 세 가지를 dependencies를 모두 추가하자.
Spring Data JPA도 빼먹지 말고 추가하자.
이제 project를 open 하여 다음 코드들을 추가해보자. (공식 문서 참조했습니다.)
MongoRepository<Recipe, String> 를 적용하면 Key가 string인 Recipe 객체에 대해 CRUD 기능을 자동으로 만들어준다.
RecipeRepository는 인터페이스로 선언되어 있지만 스프링 AOP 프록시로 자동으로 구현체가 생성된다.
이 구현체는 컨테이너에도 자동 등록된다.
이제 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
이제 테스트 코드를 진행하자.
테스트는 아주 간단하게 Embedded MongoDB Database를 이용하면 된다.
테스트 크래스에 @DataMongoTest 애노테이션만 적용하면 자동으로 내장 MongoDB로 테스트가 수행된다.
단, 이것도 설정이 필요하다..
test의 application.properties에 내장 DB의 버전만 명시해주면 된다.
여러 버전들마다 차이가 있겠지만 4.0.21 버전으로 진행해 보았다.
spring.mongodb.embedded.version=4.0.21
이제 테스트를 수행하면, 처음에 버전에 맞는 Embedded MongoDB를 다운로드를 하지만 이후에는 다운로드 없이 바로 실행 가능하다.
참조
https://docs.spring.io/spring-boot/docs/current/reference/html/data.html#data.nosql.mongodb
'개발 > Spring DataBase' 카테고리의 다른 글
[Spring Boot] MongoDB GridFS로 이미지 저장, 불러오기 (0) | 2022.08.21 |
---|---|
[Spring Boot] MongoDB에서 참조 관계 설정하기 (0) | 2022.08.16 |
[Spring DB] 12. 스프링 트랜잭션 전파 (0) | 2022.07.31 |
[Spring DB] 11. Spring Transaction (0) | 2022.07.30 |
[Spring DB] 10. Spring Data JPA와 Querydsl (0) | 2022.07.28 |