NoSQL 이란 무엇인가
https://f-lab.kr/insight/understanding-and-utilizing-nosql-databases
https://www.oracle.com/kr/database/nosql/what-is-nosql/
테이블에 저장하던 기존 RDBMS와 달리 NoSQL은 json 형태로 바로 저장하여 데이터에 대한 제약조건을 최소화한 것
MongoDB 해보기
다운로드
https://www.mongodb.com/products/self-managed/community-edition
여기서 커뮤니티 버전으로 다운로드 진행
이후 설치는 >>> 쭉 진행
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 |