안녕하세요 오늘 포스팅은 SpringBoot와 MongoDB를 연동 방법입니다.


저는 최소한의 설정만을 원칙으로 하기 때문에, 연동에 필요한 부분만 알려드리고자 합니다.


SpringBoot 프레임워크가 이미 구현 해 놓은 API가 있어서 정말 간단합니다.


주의!!

해당 포스팅은 MongoDB Server 다운로드, MongoDB 개념, 사용법 등을 설명하지 않습니다.



SpringBoot 환경과 MongoDB 환경 정보


SpringBoot는 패키지 매니저로 Gradle(4.8.1)을 사용하구요, 

SpringBoot 프레임워크 버전은 2.1.0.RELEASE 입니다.

MongoDB는 윈도우10 x64 전용으로 4.0.4 버전입니다.



SpringBoot 설정


먼저 SpringBoot 프로젝트에 필요한 의존 라이브러리를 build.gradle 파일의 dependencies에 아래와 같이 추가합니다.


버전을 따로 기입 안함으로써, 2.1.0.RELEASE 버전이 제시하는 Default 버전의 라이브러리가 의존됩니다.


dependencies {

...
implementation('org.springframework.boot:spring-boot-starter-data-mongodb')
...
}


그다음, application.properties 파일에 MongoDB 정보를 아래와 같이 기입해야 합니다.


application.properties 파일은 보통 프로젝트/src/main/resource 경로에 있습니다.


spring.data.mongodb.uri=mongodb://[ip 정보]:[port 정보]
spring.data.mongodb.database=[데이터베이스 이름]


몽고 DB의 기본 정보는 localhost(127.0.0.1) ip와 27017 포트 구성을 가집니다.


MongoDB Server에 Database를 만드셨다면, 몽고 DB의 URI 예시는 다음과 같습니다.


mongodb://127.0.0.1:27017/MyDatabase


저는 데이터베이스 이름을 따로 설정했는데요, 아래와 같이 uri 정보에 한번에 기입할 수도 있습니다.


spring.data.mongodb.uri=mongodb://[ip 정보]:[port 정보]/[데이터베이스 이름]


해당 정보는 자바 파일로도 작성 가능합니다.

@Configuration
public class MongoDBConfiguration extends AbstractMongoConfiguration {
@Override
public MongoClient mongoClient() {
return new MongoClient("ip 정보", 포트정보);
}

@Override
protected String getDatabaseName() {
return "데이터베이스 이름";
}
}


MongoDB에 Document에 대응하는 DTO 클래스 만들기.


MongoDB Document가 아래와 같은 구조라 가정한다면,


Person Document


1
2
3
4
{
    "name""Mommoo",
    "job""Developer"
}
cs


DTO Class는 다음과 같이 작성됩니다.


Person.java


1
2
3
4
5
6
7
8
9
public class Person {
    private String name;
    private String job;
 
    @Override
    public String toString() {
        return "name is " + name + " job is " + job;
    }
}
cs


주의!!


보통은 Document 어노테이션을 통해, class와 매치되는 Collection을 맵핑 해주어야 합니다.

ex) @Document(collection="myCollection")


Document에 들어있는 모든 필드를 기입했다면, Document 어노테이션을 적지 않아도 됩니다만,

만약 필요한 필드만 기입하면 Document 어노테이션을 반드시 기술 해주어야 합니다.


DTO 클래스에 DB 데이터를 넣어 줄 Repository 객체 작성하기.


정말 간단하게, 아래와 같이 코딩하면 됩니다. 


특징으로는, MongoRepository 제네릭 부분에 앞서 작성한 DTO Class를 입력하면 됩니다. ( 예시로는 Person )


PersonMongoDBRepository.java


1
2
3
public interface PersonMongoDBRepository extends MongoRepository<Person, String> {
 
}
cs


몇몇 분들은 JPA 방식이라는 것을 눈치채셨을 겁니다. 


MongoDB의 Document 데이터를 호출하는 메서드는 기본적으로 MongoRepository에 이미 기술 되어 있습니다.


MongoDB의 쿼리랑 대응되는 메서드가 기본으로 존재합니다.

(findAll, insert 등등)


SQL문에 Where 조건절에 대응되는 쿼리를 작성하고 싶다면, MongoDB의 Query대로 method를 작성하면 됩니다.

예를들어, name 필드값 기준인 Document만 호출하고 싶다면 아래와 같이 작성됩니다.


findBy + 필드이름


1
2
3
public interface PersonMongoDBRepository extends MongoRepository<Person, String> {
    public Person findByName(String name);
}
cs


더 자세한 쿼리 예시를 보고 싶다면 아래의 사이트의 6.3 Query Methods 부분을 참고해주세요.

https://docs.spring.io/spring-data/mongodb/docs/1.2.0.RELEASE/reference/html/mongo.repositories.html



테스트 해보기.


아래와 같이 테스트 코드를 작성해서 호출한 데이터가 출력되는지 확인합니다.


SpringBootMongoDBTest.java


1
2
3
4
5
6
7
8
9
10
11
@RunWith(SpringRunner.class)
@SpringBootTest()
public class SpringBootMongoDBTest {
    @Autowired()
    private ProjectMongoDBRepository projectMongoDBRepository;
 
    @Test
    public void printProjectData() {
        System.out.println(projectMongoDBRepository.findAll());
    }
}
cs


저는 프로젝트/src/test/java/패키지 안에다가 테스트 class를 만들어 실행했습니다.



지금까지, MongoDB 연동 방법에 대해 알아봤습니다.


제가 소개한 방법은 MongoDB의 특징인 Query 조회와 비슷하게 접근 할 수 있는 방법입니다.

(JPA 방법이죠)


기존 MySQL와 같은 관계형 데이터베이스 방법대로 SQL문으로 조회하는 방법도 있습니다.

구글에 mongoDB template로 검색해보세요.


읽어주셔서 감사합니다.


포스팅이 도움 되셨다면, 커피 한잔 후원해주세요!
더 좋은 포스팅 작성에 큰 힘이 됩니다.

Buy me a coffeeBuy me a coffee

+ Recent posts