겸쨔

[mongodb] Spring Data MongoDB 연동 본문

db/mongodb

[mongodb] Spring Data MongoDB 연동

겸쨔 2024. 7. 22. 13:10
반응형

안녕하세요.

Spring에서 몽고디비를 연동해봅시다.

Spring Data MongoDB라는 라이브러리를 사용할거에요.

 

Maven

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

 

 

우선 몽고랑 매핑될 entity를 작성해볼게요.

보통 디비랑 왔다 갔다하는 애를 entity라고 하지요?

근데 몽고에선 Collection이라고 하는거 같긴 해요.

import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Document(collection = "test") // 매핑할 컬렉션의 이름 지정
public class MongoTest {

    private String id;

    private String name;
}

 

 

그리고 몽고디비 설정 파일을 작성해볼게요.

import com.mongodb.ConnectionString;
import com.mongodb.MongoClientSettings;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import java.util.Collection;
import java.util.Collections;


@Configuration 
@EnableTransactionManagement // 트랜잭션 관리 기능 활성화
public class Db2DataSourceConfig extends AbstractMongoClientConfiguration // 몽고디비 클라이언트 설정을 제공하는 스프링프레임워크 추상 클래스 {

// 사용할 디비 이름을 반환
    @Override
    protected String getDatabaseName() {
        return "DB명";
    }

    public MongoClient mongoClient() {

				// 접속할 host, port, DB명을 문자열로 기입
        ConnectionString connectionString = new ConnectionString("mongodb://id:pwd@host:port/DB명");

				// 세팅해줌
        MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
                                                                .applyConnectionString(connectionString)
                                                                .build();
				// 인자로 세팅한 MongoClientSettings 할당 후 생성
        return MongoClients.create(mongoClientSettings);
    }

		// 매핑할 대상 패키지 문자열로 기입
		// 이 패키지 내의 도메인 객체가 MongoDB의 컬렉션과 매핑
    public Collection getMappingBasePackages() {
        return Collections.singleton("com.chat.core");
    }

}

 

코드에 주석으로 설명을 달긴 했어요.

한 가지 눈 여겨 보셔야할건 getMappingBasePackages() 인데요.

위에서 작성한 몽고랑 매핑될 entity의 패키지 경로를 넣어 주시면 돼요.

코드를 보니 저렇게 해야 싱글톤으로 관리가 되는 것 같네요.

 

이 다음엔 repository를 만들어 볼게요.

MongoRepository를 상속 받아요.

제네릭 타입으로는 위에서 @Document를 넣어준 entity를 넣으면 돼요.

JPA랑 흡사하지요?

public interface TestRepository extends MongoRepository<MongoTest, String> {
}

 

 

이게 끝입니다.

jpa랑 마찬가지로 몽고에서도 MongoRepository에 여러가지 기본적인 함수가 있어요.

findById() 같은거요.

 

그리고 querydsl처럼 원하는 함수를 생성해줄 수 있는데요.

그건 다음 글에서 다룰게요.

반응형