mongoDB는 json기반의 도큐먼트 데이터베이스라 스키마가 존재하지 않는다.
새로 프로젝트를 생성해주고 아래의 의존성을 추가해준다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
그 후, docker를 사용하여 mongoDB를 설치하고 실행해보겠다.
아래의 명령어로 mongoDB를 설치한다.
docker run -p 27017:27017 --name mongo_boot -d mongo
그 후, 아래의 명령어로 mongoDB를 실행한다.
docker exec -i -t mongo_boot bash
그 후, mongo
를 입력해준다.
ApplicationRunner를 통해 mongoDB를 실행해보려고 한다.
그 후, Account 클래스를 만들어주고, @Document를 붙여준다. @Document에 collection 값을 주어야하는데, 관계형DB로 치면 테이블 개념이라고 생각하면 된다.
Account는 Redis(https://velog.io/@max9106/Spring-Boot-Redis)에서 만들었던 것과 동일한 구조이다.
스프링에서 mongoDB를 사용하려면 여러 설정을 해줘야하지만, 스프링부트에서는 MongoTemplate, MongoRepository 등의 기능을 지원해준다.
MongoTemplate를 주입받아 사용할 수 있다.
Account를 만들어 값을 준 후, MongoTemplate.insert를 사용해 값을 넣어줄 수 있다.
실행 후, mongoDB 서버에서 db.collection이름.find({})
명령어로 확인해보면 값이 들어가있음을 볼 수 있다.
AccountRepository를 만들어주고, MongoRepository를 extends한다. MongoRepository의 값은 이용할 클래스와, key타입으로 준다.
그 후, AccountRepository를 주입받아, insert를 사용해 데이터를 넣어준다.
MongoTemplate을 사용할 때와 마찬가지로 데이터가 들어가 있음을 볼 수 있다.
테스트가 필요할 때 운영용 MongoDB에 데이터를 넣고 빼면 문제가 발생할 수 있다.
이것을 위해 내장형 MongoDB가 존재한다.
먼저 아래의 의존성을 추가해준다. 그러면 슬라이싱 테스트(참고: https://velog.io/@max9106/Spring-Boot-%ED%85%8C%EC%8A%A4%ED%8A%B8-dek6b0a1zd)를 작성할 수 있다.
<dependency>
<groupId>de.flapdoodle.embed</groupId>
<artifactId>de.flapdoodle.embed.mongo</artifactId>
<scope>test</scope>
</dependency>
그 후, 테스트를 만들어준다.
그리고, @DataMongoTest 애노테이션을 붙여준다. 그러면 MongoRepository 관련된 Bean들만 전부 등록이된다.
따라서 AccountRepository를 주입받아 테스트할 수 있다.
이렇게 테스트를 실행시키면, 운영용 DB에 들어간게 아니라, 테스트용DB(내장형 DB)에 데이터가 들어간다.
따라서, MongoDB의 데이터에 추가된 정보가 없는 것을 볼 수 있다.