JAVA

SpringBoot와 MongoDB 연동하기

SpringBoot와 MongoDB 연동하기

MongoDB 이해하기

MongoDB는 데이터가 하드디스크 아니라 메모리에 저장된다. 바쁘지 않을 때 데이터를 간헐적으로 하드디스크에 저장하기 때문에 셀렉트할 때 매우 빠르다. 명령어를 기억하고 있어 컴퓨터가 갑자기 꺼지는 일이 있어도 다시 기록할 수 있다. MongoDB는 데이터를 넣을 때 제이슨을 바이너리(이진수)로 바꿔서 넣는다. 이를 bson 타입이라고 부른다. 자동으로 FK 설정을 해주는데 해시로 들어간다. 데이터를 넣을 때 순서에 상관없이 무작위로 넣기 때문에 인덱스에 의미가 없다.

MongoDB
RDB와 NoSQL 비교하기RDB와 NoSQL 비교하기 RDB(Relational Database) 관계형 데이터베이스(Relational ...

프로젝트 생성하기

1.Spring Starter Project로 ‘mongoapp’을 만든다.
springwithmongodb springwithmongodb

데이터 소스 설정

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.서버를 실행시켜 확인해본다.
browser

브라우저에서 json 예쁘게 정렬해서 보기 : 구글 JSON Viewer

MongoDB
MongoDB 기본 명령어몽고디비 접속하기부터 기본 명령어 show, use, save, find, update, remove 를 소개합니다....

Postman 사용해서 테스트

전체조회 테스트
postman
한건 조회 테스트
postman
추가 테스트
postman
삭제 테스트
postman
수정 테스트
postman

 

최신글