본 글에서는 Spring Data JPA에서 주로 사용하는 쿼리메서드 방식을 통해, Repository 인터페이스에 간단한 네이밍룰을 통해 CRUD 중 R을 구현하여, MongoDB에 저장된 데이터를 간단하게 불러오는 예제를 작성해보겠습니다.
우선, MongoDB Cloud Database 설치 및 샘플 데이터는 이전 글을 참고해주세요. 샘플데이터중 airbnb 데이터를 spring에서 불러와보겠습니다.
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의 로그가 찍히네요
'spring' 카테고리의 다른 글
spring mybatis로 RDB select 해보기 (0) | 2023.06.25 |
---|---|
spring graceful shutdown (0) | 2023.06.25 |
spring bean 초기화, 소멸(lifecycle) (0) | 2023.06.25 |
spring jasypt를 활용한 DB접속정보 암호화 (0) | 2023.06.25 |
spring RequestBodyAdviceAdapter를 통한 apiKey 인증인가 적용 (0) | 2023.06.04 |
spring Filter에 @RequestBody 불러오기 / apiKey 인증인가 적용 (0) | 2023.06.04 |
spring 파라미터와 Request정보가 같이 필요할 때 처리방법 (1) | 2023.05.20 |
spring Interceptor (0) | 2023.05.20 |
댓글