Spring Boot로 CRUD 게시판 만들기

양현민·2025년 3월 17일
1

1. CRUD 정의


CRUD란?

  • CRUD(Create, Read, Update, Delete)는 데이터를 조작하는 기본적인 기능
  • 대부분의 웹 애플리케이션에서 데이터 관리를 위한 필수 개념

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

2. CRUD 게시판 만들기

📹 참고한 강의 영상
https://youtube.com/playlist?list=PLZzruF3-_clsWF2aULPsUPomgolJ-idGJ&si=HxO42ZOY7KdrU57y

1. 프로젝트 구조

  • Backend : Spring Boot, JPA
  • Database : MariaDB
  • Frontend : Thymeleaf

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"; // 삭제 후 목록으로 이동
}

3. 오류 해결 과정

🚨 @Data를 사용했는데 getter/setter가 자동으로 생성되지 않음
-board.getTitle() 호출이 안 됨

🔧 해결 방법

  • File -> Settings -> Plugins -> Lombok 검색 후 설치
  • Lombok 라이브러리는 Getter/Setter, 생성자, toString 같은 메서드를 자동으로 생성해줌

4. 마무리

✅ Spring Boot의 기본적인 프로젝트 구조를 이해하게 됨
✅ CRUD 기능을 직접 구현하면서 Controller, Service, Respository의 역할을 구분함
✅ Lombok을 활용하면 코드를 더 간결하게 만들 수 있음

2개의 댓글

comment-user-thumbnail
2025년 3월 17일

폴더 구조 보기 편해서 좋았어요

답글 달기
comment-user-thumbnail
2025년 3월 18일

예제코드부터 오류해결과정까지 깔끔하게 정리되어 읽기 쉬웠어요!

답글 달기