본문 바로가기
spring boot

[Spring Boot] CRUD 개념 정리 + 실습 예제 코드

by zzingni 2025. 4. 5.

 

 

 

오늘은 데이터 처리의 기본인 CRUD에 대해 알아보려고 한다.

 

 

CRUD란


 

CRUD란, 데이터를 처리하는 기본 작업 4가지를 말한다.

 

1. Create : 데이터를 생성(추가)하는 작업

2. Read : 데이터를 읽거나 조회하는 작업

3. Update : 기존 데이터를 수정하는 작업 

4. Delete : 데이터를 삭제하는 작업 

 

 

CRUD가 왜 중요한가?


CRUD 기능은 데이터 관리의 기본이며, 모든 데이터 기반 애플리케이션에서 필수적으로 구현되어야 한다. 이 기능을 통해 사용자는 데이터를 효율적으로 조작하고, 애플리케이션은 데이터의 일관성과 무결성을 유지할 수 있다.

 

왜냐하면 CRUD 작업을 통해 데이터의 정확성을 보장하고, 사용자의 요구를 만족시키는 동시에 데이터 보안을 강화할 수 있기 때문이다. 또한, CRUD 기능의 구현은 애플리케이션의 유지 보수와 확장성에도 중요한 영향을 미친다.

 

애플리케이션의 데이터 처리 로직이 명확하고 효율적일수록, 개발자는 새로운 기능을 추가하거나 기존 기능을 개선하는 데 더 쉽게 접근할 수 있다. 따라서, CRUD 기능은 소프트웨어 개발의 기본이자, 효과적인 데이터 관리를 위한 핵심 요소이다.

 

 

 

CRUD와 HTTP 메서드의 관계


CREAT(생성)

 

  • HTTP 메서드 : POST
  • 예시 : 새로운 사용자를 생성하는 경우
    • 요청 : POST /users
    • 요청 본문(body): 새로운 사용자의 정보를 포함하는 JSON 또는 XML 데이터
    • 응답: 새로운 사용자의 ID와 함께 성공 메시지 또는 적절한 상태 코드 (예: 201 Created)

 

READ(읽기)

 

  • HTTP 메서드 : GET
  • 예시 : 모든 사용자 목록을 가져오는 경우
    • 요청 : GET /users
    • 응답: 모든 사용자의 목록을 포함하는 JSON 또는 XML 데이터 또는 적절한 상태 코드와 함께 성공 메시지 (예: 200 OK)

 

UPDATE(갱신)

 

  • HTTP 메서드 : PUT 또는 PATCH
  • 예시 : 특정 사용자의 정보를 업데이트 하는 경우 
    • 요청 : PUT /users/{id} 또는 PATCH /users/{id}
    • 요청 본문 : 업데이트할 사용자의 정보를 포함하는 JSON 또는 XML 데이터
    • 응답 : 적절한 상태 코드와 함께 성공 메시지 또는 업데이트된 사용자의 정보

 

DELETE(삭제)

 

  • HTTP 메서드 : DELETE
  • 예시 : 특정 사용자를 삭제하는 경우
    • 요청: DELETE /users/{id}
    • 응답: 적절한 상태 코드와 함께 성공 메시지 또는 삭제된 사용자의 정보

 

 

CRUD API 예제 (Spring boot + JPA)


 

 

기본 파일 구조

src/
└── main/
    ├── java/
    │   └── com.example.crud/
    │       ├── CrudApplication.java
    │       ├── controller/
    │       │   └── PostController.java
    │       ├── entity/
    │       │   └── Post.java
    │       ├── repository/
    │       │   └── PostRepository.java

 

Post.Java (Entity)

package com.example.crud.entity;

import jakarta.persistence.*;
import lombok.*;

@Entity
@Getter @Setter
@NoArgsConstructor
@AllArgsConstructor
public class Post {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String content;
}

 

  • DB의 테이블과 1:1로 매핑되는 자바 클래스 (Post라는 클래스가 있으면 DB에는 Post 테이블이 생김)

 

PostRepository.java (Repository)

package com.example.crud.repository;

import com.example.crud.entity.Post;
import org.springframework.data.jpa.repository.JpaRepository;

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

 

  • JpaRepository를 상속받아서 CRUD 메서드를 자동으로 제공해줌
  • 직접 SQL을 쓰지 않아도 findAll(), save(), deleteById() 같은 걸 쓸 수 있음.

 

PostController.java (Controller)

package com.example.crud.controller;

import com.example.crud.entity.Post;
import com.example.crud.repository.PostRepository;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/posts")
public class PostController {

    private final PostRepository repo;

    public PostController(PostRepository repo) {
        this.repo = repo;
    }

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

    // Read all
    @GetMapping
    public List<Post> getAll() {
        return repo.findAll();
    }

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

    // Update
    @PutMapping("/{id}")
    public Post update(@PathVariable Long id, @RequestBody Post post) {
        Post existing = repo.findById(id).orElseThrow();
        existing.setTitle(post.getTitle());
        existing.setContent(post.getContent());
        return repo.save(existing);
    }

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

 

  • 사용자 요청을 받아서 처리하고 응답을 돌려주는 역할
  • @RestController, @RequestMapping, @PostMapping 같은 어노테이션을 HTTP로 요청받음.

 

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

 

  • 사용자가 POST /posts로 요청을 보내면, 이 메서드가 실행되고 PostRepository의 save()가 호출되어 Entity를 DB에 저장함.

 

CrudApplication.java

package com.example.crud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class CrudApplication {
    public static void main(String[] args) {
        SpringApplication.run(CrudApplication.class, args);
    }
}

 

  • @SpringBootApplication이 붙어 있는 진입점.
  • 여기서 애플리케이션을 실행하면 Spring이 모든 컴포넌트를 자동으로 스캔하고 연결해줌.

 

 

Reference


 

 

[개발상식] CRUD란?

CRUD란 무엇이고 예시와 함께 알아보자. REST API에서의 CRUD, DB에서의 CRUD에 대해 알아보자.

idkim97.github.io

 

'spring boot' 카테고리의 다른 글

스프링부트(spring boot) 기본기 다지기  (0) 2025.05.27