본문 바로가기

SQL

240429 MongoDB 해보기

NoSQL 이란 무엇인가

https://f-lab.kr/insight/understanding-and-utilizing-nosql-databases

 

NoSQL 데이터베이스의 이해와 활용

NoSQL 데이터베이스의 등장 배경, 주요 유형, 활용 사례 및 미래 발전 방향에 대해 탐색합니다.

f-lab.kr

https://www.oracle.com/kr/database/nosql/what-is-nosql/

 

개발자가 NoSQL 데이터베이스를 선호하는 이유

NoSQL 데이터베이스는 변화하는 요구사항에 빠르게 적응하기에 애자일 개발 방법론에 자연스럽게 부합합니다.

www.oracle.com

 

테이블에 저장하던 기존 RDBMS와 달리 NoSQL은 json 형태로 바로 저장하여 데이터에 대한 제약조건을 최소화한 것

MongoDB 해보기

다운로드

https://www.mongodb.com/products/self-managed/community-edition

 

MongoDB Community Server

MongoDB Community Server is a general-purpose document database you can self-manage and host locally or in the cloud.

www.mongodb.com

 

여기서 커뮤니티 버전으로 다운로드 진행

 

이후 설치는 >>> 쭉 진행

 

MongoDB Compass 도 같이 설치 진행해야 함

설치가 완료되면 New Connection 이 뜨는데

일단 여기서 Connect 클릭

 

접속 후 좌측의 Databases에서 + 클릭 후 test DB 추가

 

다음 ADD DATA 를 눌러 칼럼 명과 값을 아무거나 넣고 값 삽입해보기

 

값의 ID와 원하는 칼럼명 + 원하는 내용으로 빠르게 저장된 모습

 

Spring 에서 값 받아보기

전자정부 프레임워크 4.1 에서 Spring Boot 생성하기

타임리프, MongoDB를 사용할 것이라 체크하고 생성 진행

 

포트, 타임리프 위치 등 설정하기

application.properties

spring.application.name=mongoDB_test

# port
server.port = 80

# MongoDB
spring.data.mongodb.url=mongodb://localhost:27017
spring.data.mongodb.database=test

# thymeleaf
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

# 바로 반영 (?) => html에 변경이 있을 때 바로 반영되게 하기
spring.devtools.livereload.enabled=true

 

Spring 서버를 실행하려고 보니 오류 발생

JDBC를 삭제하고 실행하니 해결

 

Controller 만들어서 Board.html 띄워보기

@Controller
public class MongoContoller {
  @GetMapping("/board")
  public String board(Model model) {
    List<Map<String, Object>> list = new ArrayList<>();
    Map<String, Object> map = new HashMap<>();
		
    map.put("id", 1);
    map.put("title", "1번 타이틀");
    map.put("date", "24-04-29");
    map.put("name", "한솔범");
    list.add(map);
		
    model.addAttribute("list", list);
    return "board";
  }
}

 

board.html 에서 타임리프 문법으로 띄워보기

오랜만에 해본다

<div th:each="list : ${list}">
  <div th:text="${list.id}">글 번호</div>
  <div th:text="${list.title}">제목</div>
  <div th:text="${list.date}">작성일</div>
</div>

 

 

DTO도 만들어보기

MongoDB에 맞게 작성

package com.solbum.web.dto;

import java.time.LocalDateTime;

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

import lombok.Data;

@Data
@Document(collection = "board") // 연결하고 싶은 DB 이름 적는 곳
public class BoardDTO {
  @Id
  private String id;
  private String name;
  private String title;
  private String content;
  private LocalDateTime date;
}

 

글 작성하기

먼저 MongoDAO를 인터페이스로 생성 후 MongoDBRepository를 상속함

public interface MongoDAO extends MongoRepository<BoardDTO, String>{
}

 

MongoService와 연결하기

@Service
public class MongoService {
	
  @Autowired
  private MongoDAO mongoDAO;

 

Controller와 연결하기

@Controller
public class MongoContoller {
	
  @Autowired
  private MongoService mongoService;

 

html에서 글 작성하는 form 생성

<form action="/insert" method="post">
  <input type="text" name="title" placeholder="제목" required="required"/>
  <input type="text" name="content" placeholder="내용" required="required"/>
  <input type="text" name="name" placeholder="작성자" required="required"/>
  <button type="submit">작성</button>
</form>

 

Controller에서 값을 받아 Service -> DAO 까지 넘겨서 save하기

상속받은 MongoDBRepository에 save 메소드가 있어 따로 만들지 않아도 됨

@PostMapping("/insert")
public String insert(BoardDTO board) {
  board.setDate(LocalDateTime.now());
  System.out.println(board.toString());
  mongoService.save(board);
  return "redirect:/board";
}
  
public void save(BoardDTO board) {
  mongoDAO.save(board);
}

 

ID는 자동 생성되어 DB에 삽입되는 모습

 

글 삭제하기

글 삭제 버튼 만들기

<div>
  <div th:text="${list.id}">글 번호</div>
  <a th:href="@{/delete(id=${list.id})}">글 삭제</a>
</div>

 

Controller에서 값 받기 > Service > DAO 에서 값 삭제하기

@GetMapping("/delete")
public String delete(@RequestParam("id") String id) {
  BoardDTO board = new BoardDTO();
  board.setId(id);
  mongoService.delete(board);
  return "redirect:/board";
}

public void delete(BoardDTO board) {
  mongoDAO.delete(board);
}

// 상속받은 Repository에 이미 있는 method라 따로 만들지는 않음

 

정상 삭제 완료

 

String ID 값으로만 삭제하기

mongoService.delete(id);

public void delete(String id) {
  mongoDAO.deleteById(id);
}

'SQL' 카테고리의 다른 글

240202 리눅스 서버 만들어보기  (0) 2024.02.02
231129 Oracle  (1) 2023.11.29
231128 Oracle  (0) 2023.11.28
231127 Oracle  (0) 2023.11.27
국비지원학원 3, 4일 차 정리 / ORACLE  (0) 2023.11.26