
✅ 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을 활용하면 코드를 더 간결하게 만들 수 있음
폴더 구조 보기 편해서 좋았어요