DB/MongoDB

몽고DB 15강. 스프링 연결

JJJAEOoni 2022. 5. 11. 11:07
반응형

몽고 DB와 RDB의 차이

 

자바 세상에서 RDB로 값을 넣을 때는 DB에 오브젝트를 저장할 수 없었다.

자바는 오브젝트 안에 오브젝트를 넣을 수 있지만,

DB는 테이블안에 테이블을 넣을 수 없기 때문이다.

 

이런 점이 상이했다.

 

그래서 ORM을 사용했다.

JPA가 ORM이 아니라 ORM을 가지고 있는 것이다.

 

몽고 DB는 오브젝트 안에 오브젝트를 저장할 수 있다.

자바와 똑같이 오브젝트 안에 오브젝트를 넣을 수 있어서

DB에 그대로 넣을 수 있고 그대로 받아올 수 있다.

그래서 JPA가 필요 없다.

 

 

프로젝트를 생성하고 몽고 DB를 연결하자.

매우 간단하다.

 

spring:
  data:
    mongodb:
      host: localhost
      port: 27017
      database: greendb

 

나중에 샤딩을 구축하고 나서 port 번호는 20000번으로 바뀌면 되겠다.

 

database 이름도 아무거나 해도 상관없다.

어차피 만들어진다.

 

RDB와 다르게 기본 스키마가 없기 때문이다.

 

package site.metacoding.mongocrud.domain;

import org.springframework.data.mongodb.repository.MongoRepository;

public interface NaverRepository extends MongoRepository<Naver, String> {

}
package site.metacoding.mongocrud.domain;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@AllArgsConstructor
@NoArgsConstructor
@Data
@Document(collection = "navers") // 몽고의 greendb에 연결
public class Naver {

    @Id
    private String _id; // 몽고 PK는 String 해시값
    private String company;
    private String title;
}
package site.metacoding.mongocrud.web;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import lombok.RequiredArgsConstructor;
import site.metacoding.mongocrud.domain.Naver;
import site.metacoding.mongocrud.domain.NaverRepository;

@RequiredArgsConstructor
@RestController
public class NaverApiController {
    private final NaverRepository naverRepository;

    @GetMapping("/navers")
    public ResponseEntity<?> findAll() {
        return new ResponseEntity<>(naverRepository.findAll(), HttpStatus.OK); // 200
    }

    @PostMapping("/navers")
    public ResponseEntity<?> save(@RequestBody Naver naver) {
        // DB에 save된 데이터를 리턴해주기 때문에 id가 들어가있는 상태
        return new ResponseEntity<>(naverRepository.save(naver), HttpStatus.CREATED); // 201
    }
}

 

이제 포스트맨으로 테스트해보자.

 

만약 포스트맨을 사용하기 귀찮으면 스프링부트 swagger 라이브러리를 사용하자.

 

 

 

데이터 2건 save

 

내가 필드를 임의로 추가해도 된다.

스키마가 없는 비정형 데이터베이스이기 때문이다.

 

findAll

 

 

 

[출처]

 

https://cafe.naver.com/metacoding

 

메타코딩 : 네이버 카페

코린이들의 궁금증

cafe.naver.com

메타 코딩 유튜브

https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9

 

메타코딩

문의사항 : getinthere@naver.com 인스타그램 : https://www.instagram.com/meta4pm 깃헙 : https://github.com/codingspecialist 유료강좌 : https://www.easyupclass.com

www.youtube.com

 
반응형