SpringBoot와 MongoDB 연동하기
MongoDB 이해하기
MongoDB는 데이터가 하드디스크 아니라 메모리에 저장된다. 바쁘지 않을 때 데이터를 간헐적으로 하드디스크에 저장하기 때문에 셀렉트할 때 매우 빠르다. 명령어를 기억하고 있어 컴퓨터가 갑자기 꺼지는 일이 있어도 다시 기록할 수 있다. MongoDB는 데이터를 넣을 때 제이슨을 바이너리(이진수)로 바꿔서 넣는다. 이를 bson 타입이라고 부른다. 자동으로 FK 설정을 해주는데 해시로 들어간다. 데이터를 넣을 때 순서에 상관없이 무작위로 넣기 때문에 인덱스에 의미가 없다.
RDB와 NoSQL 비교하기RDB와 NoSQL 비교하기
RDB(Relational Database)
관계형 데이터베이스(Relational ...
프로젝트 생성하기
1.Spring Starter Project로 ‘mongoapp’을 만든다.
데이터 소스 설정
2.src/main/resources 폴더 안에 application.yml 파일을 만들어 데이터 소스 설정을 한다.
server: port: 8000 spring: data: mongodb: host: localhost port: 27017 database: greendb
모델 만들기
3.com.cos.mongoapp.domain 패키지 안에 Board.java(class) 와 BoardRepository.java(interface)를 만든다.
package com.cos.mongoapp.domain; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import lombok.Data; @Data @Document(collection = "board") public class Board { @Id public String _id; private String title; private String content; }
package com.cos.mongoapp.domain; import org.springframework.data.mongodb.repository.MongoRepository; public interface BoardRepository extends MongoRepository<Board, String>{ }
DTO 만들기
4.com.cos.mongoapp.web.dto 패키지 안에 BoardSaveDto.java를 만든다.
package com.cos.mongoapp.web.dto; import com.cos.mongoapp.domain.Board; import lombok.Data; @Data public class BoardSaveDto { private String title; private String content; public Board toEntity() { Board board = new Board(); board.setTitle(title); board.setContent(content); return board; } }
컨트롤러 만들기
5.com.cos.mongoapp.web 패키지 안에 BoardController.java(class) 파일을 만들어준다.
package com.cos.mongoapp.web; import java.util.List; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import com.cos.mongoapp.domain.Board; import com.cos.mongoapp.domain.BoardRepository; import com.cos.mongoapp.web.dto.BoardSaveDto; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor //DI @RestController //데이터 리턴 서버 public class BoardController { //DI private final BoardRepository boardRepository; //수정 @PutMapping("/board/{id}") public Board update(@RequestBody BoardSaveDto dto, @PathVariable String id) { Board board = dto.toEntity(); board.set_id(id); //같은 아이디면 수정 return boardRepository.save(board); } //삭제 @DeleteMapping("/board/{id}") public int deleteById(@PathVariable String id) { boardRepository.deleteById(id); //내부적으로 실행되다가 오류 Exception 발동 return 1; // 1 : 성공, -1 : 실패 } //한건조회 @GetMapping("/board/{id}") public Board findById(@PathVariable String id) { return boardRepository.findById(id).get(); } //전체조회 @GetMapping("/board") public List<Board> findAll() { //리턴을 JavaObject로 하면 스프링 내부적으로 Json으로 자동 변환해준다. return boardRepository.findAll(); } //추가 @PostMapping("/board") public Board save(@RequestBody BoardSaveDto dto) { //{"title":"제목3","content":"내용3"} return boardRepository.save(dto.toEntity()); } }
테스트
1.데이터 베이스를 선택한다.
use greendb
2.테스트를 위한 데이터를 2개 정도 넣어준다.
db.board.save({title:"제목1", content:"내용1"});
db.board.save({title:"제목2", content:"내용2"});
3.서버를 실행시켜 확인해본다.
브라우저에서 json 예쁘게 정렬해서 보기 : 구글 JSON Viewer
MongoDB 기본 명령어몽고디비 접속하기부터 기본 명령어 show, use, save, find, update, remove 를 소개합니다....
Postman 사용해서 테스트
전체조회 테스트
한건 조회 테스트
추가 테스트
삭제 테스트
수정 테스트