몽고 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