
✅ CRUD란?
1. Create (생성)
- 새로운 데이터를 추가
- HTTP 메서드 ➡️
POST- SQL ➡️
INSERT INTO
2. Read (조회)
- 저장된 데이터를 가져오기
- HTTP 메서드 ➡️
GET- SQL ➡️
SELECT
3. Update (수정)
- 기존 데이터를 변경
- HTTP 메서드 ➡️
PUT- SQL ➡️
UPDATE
4. Delete (삭제)
- 데이터를 제거
- HTTP 메서드 ➡️
DELETE- SQL ➡️
DELETE FROM
📹 참고한 강의 영상
https://youtube.com/playlist?list=PLZzruF3-_clsWF2aULPsUPomgolJ-idGJ&si=HxO42ZOY7KdrU57y
1. 프로젝트 구조
2. 프로젝트 폴더 구조
📂 src
┣ 📂 main
┃ ┣ 📂 java
┃ ┃ ┣ 📂 com.study.board
┃ ┃ ┃ ┣ 📂 controller // 컨트롤러 (요청 처리)
┃ ┃ ┃ ┣ 📂 service // 서비스 (비즈니스 로직)
┃ ┃ ┃ ┣ 📂 repository // DB 저장소
┃ ┃ ┃ ┣ 📂 entity // 엔티티 (데이터 모델, DB 테이블과 매핑)
┃ ┃ ┃ ┗ 📂 config // 설정 파일
┃ ┣ 📂 resources
┃ ┃ ┣ 📂 static // CSS, JS
┃ ┃ ┗ 📂 templates // HTML (Thymeleaf)
3. CRUD 핵심 코드 정리
📌 Create (생성)
-사용자가 글을 작성하고 DB에 저장하는 기능
1. 사용자가/board/write페이지에서 글 작성
2. 작성된 데이터가/board/writepro로 전송됨
3.boardRepository.save(board)를 통해 DB에 저장
// 글 작성 폼 반환
@GetMapping("/board/write")
public String boardWriteForm() {
return "boardwrite"; // templates/boardwrite.html 반환
}
// 글 저장 (DB에 저장)
@PostMapping("/board/writepro")
public String boardWritePro(Board board) {
boardRepository.save(board); // DB에 저장
return "redirect:/board/list"; // 저장 후 목록으로 이동
}
📌 Read (조회)
-저장된 글 목록을 조회하고, 개별 글을 볼 수 있는 기능
1./board/list-> 모든 글 목록 조회
2./board/view?id=1-> 특정 글 상세 조회
// 전체 글 목록 조회
@GetMapping("/board/list")
public String boardList(Model model) {
model.addAttribute("list", boardRepository.findAll()); //모든 글 조회
return "boardlist"; // templates/boardlist.html 반환
}
// 개별 글 조회
@GetMapping("/board/view")
public String boardView(Model model, Integer id) {
model.addAttribute("board", boardRepository.findById(id).orElse(null));
return "boardview"; // templates/boardview.html 반환
}
📌 Update (수정)
-사용자가 기존 글을 수정하는 기능
1./board/modify/{id}-> 기존 글 불러오기
2./board/update/[id>-> 글 수정 후 저장
// 수정할 글 불러오기
@GetMapping("/board/modify/{id}")
public String boardModify(@PathVariable("id") Integer id, Model model) {
model.addAttribute("board", boardRepository.findById(id).orElse(null));
return "boardmodify"; // templates/boardmodify.html 반환
}
// 글 수정 처리
@PostMapping("/board/update/{id}")
public String boardUpdate(@PathVariable("id") Integer id, Board board) {
Board boardTemp = boardRepository.findById(id).orElse(null);
if (boardTemp != null) {
boardTemp.setTitle(board.getTitle()); // 제목 수정
boardTemp.setContent(board.getContent()); // 내용 수정
boardRepository.save(boardTemp); // 수정 후 저장
}
return "redirect:/board/list"; // 수정 후 목록으로 이동
}
📌 Delete (삭제)
-글을 삭제하는 기능
1. 사용자가/board/delete?id=1요청
2.boardRespository.deleteById(id)로 DB에서 삭제
// 게시글 삭제
@GetMapping("/board/delete")
public String boardDelete(Integer id) {
boardRepository.deleteById(id); // ID로 삭제
return "redirect:/board/list"; // 삭제 후 목록으로 이동
}
🚨
@Data를 사용했는데getter/setter가 자동으로 생성되지 않음
-board.getTitle()호출이 안 됨
🔧 해결 방법
File->Settings->Plugins->Lombok검색 후 설치Lombok라이브러리는 Getter/Setter, 생성자, toString 같은 메서드를 자동으로 생성해줌
✅ Spring Boot의 기본적인 프로젝트 구조를 이해하게 됨
✅ CRUD 기능을 직접 구현하면서 Controller, Service, Respository의 역할을 구분함
✅ Lombok을 활용하면 코드를 더 간결하게 만들 수 있음
폴더 구조 보기 편해서 좋았어요