우당탕탕

[JPA] JPA로 게시글 CRUD 만들기 – 10분 만에 따라하기 본문

Tech/Spring

[JPA] JPA로 게시글 CRUD 만들기 – 10분 만에 따라하기

모찌모찝 2025. 7. 29. 11:15
1JPA로 게시글 CRUD 만들기 – 10분 만에 따라 하기

 

안녕하세요 오늘은 백엔드를 처음 시작하는 분들도 무리 없이 따라 할 수 있도록, Spring Data JPA를 활용한 게시글 CRUD(Create, Read, Update, Delete) 예제를 준비했습니다.
해당 프로젝트를 시작하기 앞서 아래 링크에서 프로젝트 구성을 먼저 진행해 주세요! 
(프로젝트 구성이 되어있다면 스킵하셔도 됩니다) 

프로젝트 구성은 해당 링크에서 구성하실 수 있습니다! -> https://mozzi-devlog.tistory.com/46

JPA

1. CRUD가 뭐예요?

• C(Create): 데이터 생성
 → 블로그 게시글을 새로 작성하는 것처럼
DB에 새로운 데이터를 넣는 작업을 의미해요.
• R(Read): 데이터 읽기(조회)
→ 이미 저장된 게시글을 “조회”하는 것이죠.
• U(Update): 데이터 수정
→ 기존 게시글 내용을 “수정”하는 것.
• D(Delete): 데이터 삭제
→ 게시글을 “삭제”하는 것.

이번에 만들어보는 게시글에 대입해 보면 

• Create(생성) → 새 글을 쓰고 ‘등록’ 버튼을 누르는 행위
• Read(조회) → 글 목록이나 상세 보기로 정보를 보는 행위
• Update(수정) → 이미 올라간 글 내용을 바꾸는 것
• Delete(삭제) → 글을 DB에서 완전히 지우는 것

즉, 게시글을 작성하는 것 = 데이터(게시글)를 생성(Create)입니다!
CRUD에서 “생성”은 단순히 게시글을 의미하는 게 아니라, “DB에 새로운 데이터를 만드는 모든 행위”를 가리켜요.
게시판, 회원, 상품, 댓글 등 모든 데이터 구조에 적용됩니다.

2. 프로젝트 세팅

build.gradle 파일에 아래 의존성을 넣어주세요

implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("com.h2database:h2")

3. Entity와 Repository 만들기

게시물 엔티티

import javax.persistence.*;

@Entity
public class Post {
    @Id @GeneratedValue
    private Long id;
    private String title;
    private String content;

    // 기본 생성자, getter/setter 생략
}

JPA 레포지토리

import org.springframework.data.jpa.repository.JpaRepository;

public interface PostRepository extends JpaRepository<Post, Long> {
}

여기까지 하면 DB 코드 없이도, 기본 CRUD 기능이 다 자동생성됩니다!

4. 컨트롤러 작성

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/posts")
public class PostController {
    private final PostRepository repo;
    public PostController(PostRepository repo) { this.repo = repo; }

    @PostMapping
    public Post create(@RequestBody Post post) { return repo.save(post); }

    @GetMapping("/{id}")
    public Post read(@PathVariable Long id) { return repo.findById(id).orElse(null); }

    @PutMapping("/{id}")
    public Post update(@PathVariable Long id, @RequestBody Post post) {
        post.setId(id); return repo.save(post);
    }

    @DeleteMapping("/{id}")
    public void delete(@PathVariable Long id) { repo.deleteById(id); }
}

별도의 DB 설치 없이, 프로젝트를 실행(./gradlew bootRun  또는 IDE에서 Run 버튼)하기만 하면 자동으로 H2 데이터베이스가 메모리상에 올라갑니다.

* H2 콘솔 접속은  http://localhost:8080/h2-console에서 가능합니다.

이후 테스트를 위해 Postman을 설치하고, 아래처럼 요청을 보내면 CRUD가 각각 동작하는지 확인하면 완성입니다.
•  POST /posts 로 새 게시글 등록(Body에 title, content JSON)
•  GET /posts/1 로 특정 게시글 조회
•  PUT /posts/1 로 수정
•  DELETE /posts/1 로 삭제

참고 링크
• Spring Data JPA 공식 가이드 - https://spring.io/projects/spring-data-jpa

Comments