Link
Today
Total
02-01 04:48
Archives
관리 메뉴

초보개발자 긍.응.성

MongoRepository를 이용한 MongoDB와 Spring boot 연동 본문

MongoDB

MongoRepository를 이용한 MongoDB와 Spring boot 연동

긍.응.성 2020. 10. 25. 18:42
반응형

SpringBoot와 MongoDB를 연결하고 MongoRepository를 사용해보자.

의존성 주입

pom.xml에 spring-boot-starter-data-mongodb를 추가합니다.

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

MongoDB 접속 정보 세팅

application.yml에 spring.data.mongodb 하위 mongodb 설정 값들을 세팅해줍니다. 자세한 properties에 대하여 알고 싶다면 org.springframework.boot.autoconfiguration.mongo.MongoPropertie s를 참고하시기 바랍니다.

# spring
spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/test

spring.data.mongodb.uri는 mongodb://[ip 정보]:[port 정보]/[데이터베이스 이름]으로 지정합니다. 빈의 자동 설정 단계에서 MongoAutoConfiguration이 MongoProperties의 설정을 읽어와 MongoClientFactory를 설정하고 MongoClient 빈을 생성해줍니다.

Model 객체 생성

유저의 성(firstName)과 이름(lastName)을 갖는 Customer 도큐먼트를 정의합시다. DB에 저장될 document의 이름은 @Documemt 애노테이션을 통하여 지정해줍니다. MongoDB의 모든 도큐먼트는 반드시 _id 라는 주키를 갖게 됩니다. @Id 애노테이션은 해당 필드에 대해 주키로 지정하겠다는 의미를 가집니다.

@Document(collection = "customer")
public class Customer {
   @Id
   private String id;

   private String firstName;
   private String lastName;

   public Customer(String firstName, String lastName) {
      this.firstName = firstName;
      this.lastName = lastName;
   }

   public String getId() {
      return id;
   }

   public String getFirstName() {
      return firstName;
   }

   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }

   public String getLastName() {
      return lastName;
   }

   public void setLastName(String lastName) {
      this.lastName = lastName;
   }

   @Override
   public String toString() {
      return "Customer{" +
         "firstName='" + firstName + '\'' +
         ", lastName='" + lastName + '\'' +
         '}';
   }
}

Repository 생성

MongoRepository를 이용해 Customer에 대한 Repository를 생성합니다. naming convention에 맞추어 find메서드를 생성해줍니다.

public interface CustomerRepository extends MongoRepository<Customer, String> {
   public List<Customer> findByFirstName(String firstName);
}

Run

CommandLineRunner를 상속하여 repository 기능만을 확인해 보겠습니다. MongoRepository를 상속하여 만든 커스텀한 Repostiory는 @Indexed 애노테이션덕에 모두 빈으로 등록되어있습니다. @Autowired를 통해 CustomerRepository를 주입받습니다.

@SpringBootApplication
public class Application implements CommandLineRunner {

   @Autowired
   private CustomerRepository customerRepository;

   public static void main(String[] args) {
      SpringApplication.run(Application.class, args);
   }

   @Override
   public void run(String... args) throws Exception {
     Customer customer1 = new Customer("son", "changwoo");
     Customer customer2 = new Customer("son", "jeehoon");

      // insert
      customerRepository.insert(Arrays.asList(customer1, customer2));
     
      // get
      List<Customer> result = customerRepository.findByFirstName("son");
      System.out.println(result);
   }
}

Spring Data의 Repository는 Naming Convention에 맞게 선언한 메서드에 대해서 Runtime시 동적으로 data access 대한 implementation을 제공합니다. insert와 findByFirstName을 실제로 구현하지 않았지만 삽입, 조회가 잘 동작하는 것을 확인할 수 있습니다.

console - findByFirstName 결과
compass - db에 삽입된 결과 확인

 

반응형
Comments