MongoDB

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

MongoTemplate를 주입받아 사용할 수 있다.

Account를 만들어 값을 준 후, MongoTemplate.insert를 사용해 값을 넣어줄 수 있다.

실행 후, mongoDB 서버에서 db.collection이름.find({}) 명령어로 확인해보면 값이 들어가있음을 볼 수 있다.

MongoRepository

AccountRepository를 만들어주고, MongoRepository를 extends한다. MongoRepository의 값은 이용할 클래스와, key타입으로 준다.

그 후, AccountRepository를 주입받아, insert를 사용해 데이터를 넣어준다.

MongoTemplate을 사용할 때와 마찬가지로 데이터가 들어가 있음을 볼 수 있다.

내장형 MongoDB

테스트가 필요할 때 운영용 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의 데이터에 추가된 정보가 없는 것을 볼 수 있다.

0개의 댓글