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 사용해서 테스트
전체조회 테스트
한건 조회 테스트
추가 테스트
삭제 테스트
수정 테스트