본문 바로가기
spring

Spring Data JPA 쿼리메서드 방식으로 MongoDB 연계

by 토망이 2023. 6. 4.

본 글에서는 Spring Data JPA에서 주로 사용하는 쿼리메서드 방식을 통해, Repository 인터페이스에 간단한 네이밍룰을 통해 CRUD 중 R을 구현하여, MongoDB에 저장된 데이터를 간단하게 불러오는 예제를 작성해보겠습니다.

 

우선, MongoDB Cloud Database 설치 및 샘플 데이터는 이전 글을 참고해주세요. 샘플데이터중 airbnb 데이터를 spring에서 불러와보겠습니다. 

MongoDB Cloud Database 설치가이드

 

MongoDB Cloud Database 설치방법 가이드

본 글에서는 Mongo DB 에서 Cloud Database로 제공하고 있는 MongoDB Atlas 설치방법에 대해 다루겠습니다. 실무에서 DB는 Oracle DB를 주로 사용하였고, RDBMS만 사용하다가 No-sql 중 하나인 MongoDB를 사용할 일

dnl1029.tistory.com

 

mongo Compass로 샘플데이터 중에서,, name = "Ribeira Charming Duplex" 인 데이터를 조회해보려 합니다.

Database 명 : sample_airbnb / Collection 명 : listingsAndReviews

 

먼저 spring에서 pom.xml에 의존성을 추가해줍니다.

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

-application.yml

uri에 mongodb Compass에서 접속할때 사용하는 uri 주소에, 끝에 database명도 지정해줘야합니다. 

spring:
  data:
    mongodb:
      uri: mongodb+srv://admin:비밀번호@cluster0.1p17esk.mongodb.net/sample_airbnb

 

 

-Dto

@Document 라는 어노테이션을 통해, collection명을 꼭 지정해줘야합니다. MongoDB에서 컬렉션은 RDBMS로 치면 테이블과 유사합니다.

@Data
@AllArgsConstructor
@NoArgsConstructor
@Document(collection = "listingsAndReviews")
public class AirbnbDto {

    //mongodb에서 자동적으로 생성하는 id
    @Id
    @NotBlank
    private String id;

    @NotBlank
    private String listing_url;

    @NotBlank
    private String name;

    @NotBlank
    private String summary;

}

 

- Repository

: 쿼리 메서드 방식을 통해 Repository를 만듭니다. return은 AirbnbDto라는 위에서 만든 Dto 형식으로 받을겁니다.

@Repository
public interface MyRepository extends MongoRepository<AirbnbDto, String> {
    AirbnbDto findByName(String name);
}

 

 

- Service

서비스는 아래와같이 작성하였습니다. @RequiredArgsContructor를 통해 repository의 의존성을 주입해주고, 파라미터는 name으로 받았습니다.

@Service
@Slf4j
@RequiredArgsConstructor
public class MongoService {
    private final MyRepository myRepository;

    public AirbnbDto getAirbnbData(String name){
        AirbnbDto airbnbDto = myRepository.findByName(name);
        return airbnbDto;
    }

}

 

- Controller

: MongoService의 의존성을 주입해주고, GetMapping을 통해 간단한 restapi를 작성했습니다. 별도의 쿼리 작성이 없어도 쿼리메서드를 통해 쉽게 mongodb에 저장된 데이터를 불러올수있습니다.

@RestController
@RequestMapping("api")
@RequiredArgsConstructor
@Slf4j
public class MongoController {

    private final MongoService mongoService;

    @GetMapping("mongo/test")
    public String apiKeyTest(@RequestParam String name) {
        AirbnbDto airbnbDto = mongoService.getAirbnbData(name);
        log.info("MongoController. airbnbDto : {}",airbnbDto);
        return "ok";
    }

}

 

- restapi 실행(http://localhost:8080/api/mongo/test?name=Ribeira%20Charming%20Duplex)

swagger를 통해서 name을 입력후 실행해보겠습니다.

 

- 결과

정상적으로 Controller의 로그가 찍히네요

 

댓글