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);
}