[개발상식] CRUD란? DB SQL, REST API, Spring Boot 예시로 총정리

업데이트:

✅ CRUD란?

CRUD는 Create, Read, Update, Delete의 약어로 데이터베이스와 같은 시스템에서 기본적인 데이터 관리 기능을 의미한다.

CRUD는 거의 모든 시스템에 적용되는 가장 기본이 되는 개념이라고 볼 수 있다. 프로젝트를 진행 할 때나 대규모 시스템을 살펴만 봐도 CRUD 개념이 안들어가 있는것을 보기 어렵고, 개발자끼리 회의를 할때도 많이 사용되는 단어이기 때문에 어디서 사용되고 무슨 의미인지 알아두면 좋다.

CRUD 의미 DB (SQL) REST API (HTTP)
Create 생성 INSERT POST
Read 조회 SELECT GET
Update 수정 UPDATE PUT / PATCH
Delete 삭제 DELETE DELETE

✅ DB에서의 CRUD

DB에서의 CRUD

📌 Create (생성) - INSERT


새로운 데이터를 생성한다. 데이터베이스에 새로운 레코드를 추가하는 작업이다.

INSERT INTO users (name, email, age) 
VALUES ('김테드', 'ted@example.com', 27);

📌 Read (읽기) - SELECT


데이터를 조회한다. 저장된 데이터를 검색하고 읽어오는 작업이다.

-- 전체 조회
SELECT * FROM users;

-- 조건 조회
SELECT name, email FROM users WHERE age >= 20;

📌 Update (갱신) - UPDATE


기존 데이터를 수정한다. 데이터베이스에서 기존 레코드를 수정하는 작업이다.

UPDATE users SET email = 'newemail@example.com' WHERE name = '김테드';

📌 Delete (삭제) - DELETE


데이터를 삭제한다. 데이터베이스에서 레코드를 삭제하는 작업이다.

DELETE FROM users WHERE name = '김테드';

✅ REST API에서의 CRUD

클라이언트 <-> 서버간 HTTP 프로토콜을 이용해 REST API를 설계하고 작성할 때에도 CRUD 개념이 사용된다. 클라이언트는 적절한 HTTP 메서드와 URL을 사용하여 서버에 요청을 보내어 데이터를 생성, 조회, 수정, 삭제 할 수 있다.

REST API에서의 CRUD

  1. Create (생성)
    • HTTP 메서드: POST
    • 예시: 새로운 사용자를 생성하는 경우
      • 요청: POST /users
      • 요청 본문(body): 새로운 사용자의 정보를 포함하는 JSON 또는 XML 데이터
      • 응답: 새로운 사용자의 ID와 함께 성공 메시지 또는 적절한 상태 코드 (예: 201 Created)
  2. Read (읽기)
    • HTTP 메서드: GET
    • 예시: 모든 사용자 목록을 가져오는 경우
      • 요청: GET /users
      • 응답: 모든 사용자의 목록을 포함하는 JSON 또는 XML 데이터 또는 적절한 상태 코드와 함께 성공 메시지 (예: 200 OK)
  3. Update (갱신)
    • HTTP 메서드: PUT 또는 PATCH
    • 예시: 특정 사용자의 정보를 업데이트하는 경우
      • 요청: PUT /users/{id} 또는 PATCH /users/{id}
      • 요청 본문: 업데이트할 사용자의 정보를 포함하는 JSON 또는 XML 데이터
      • 응답: 적절한 상태 코드와 함께 성공 메시지 또는 업데이트된 사용자의 정보
  4. Delete (삭제)
    • HTTP 메서드: DELETE
    • 예시: 특정 사용자를 삭제하는 경우
      • 요청: DELETE /users/{id}
      • 응답: 적절한 상태 코드와 함께 성공 메시지 또는 삭제된 사용자의 정보

💡 PUT vs PATCH 차이
PUT은 리소스 전체를 교체하고, PATCH는 일부만 수정한다. 예를 들어 사용자의 이메일만 바꾸고 싶다면 PATCH가 적절하다.

✅ Spring Boot CRUD 예시

실무에서 가장 많이 사용되는 Spring Boot로 간단한 CRUD API를 구현하면 다음과 같다.

📌 Controller


@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

    // Create
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody UserDto dto) {
        return ResponseEntity.status(HttpStatus.CREATED)
                .body(userService.create(dto));
    }

    // Read
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        return ResponseEntity.ok(userService.findById(id));
    }

    // Update
    @PatchMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody UserDto dto) {
        return ResponseEntity.ok(userService.update(id, dto));
    }

    // Delete
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.delete(id);
        return ResponseEntity.noContent().build();
    }
}

✅ 간단한 CRUD 예시

필자가 프로젝트 수행하면서 CRUD를 사용했던 대화 몇개를 차용해보면 보통 이런 흐름이다.

[ 댓글 CRUD ]
A : “테드님이 댓글 CRUD 구현해주세요”
B : “넹”
… ( 뚝딱뚝딱 )
B : “댓글 작성(CRUD의 C)이랑 댓글 조회(CRUD의 R)까지 구현했고, 댓글 수정(CRUD의 U)이랑 삭제(CRUD의 D)는 구현중입니다~”
A : “나머지 댓글 수정이랑 삭제도 빨리해주세요!”

[ 게시글 CRUD ]
A : “테드님이 게시글 CRUD 구현해주세요”
B : “넹”
… ( 뚝딱뚝딱 )
B : “게시글 작성, 조회, 수정, 삭제 전부다 구현 완료했습니다~”

이런 흐름으로 보통 CRUD라는 단어를 사용하곤 한다. 엄청나게 어려운 개념은 아니지만 되게 많이 사용되는 단어이기 때문에 어떤 의미인지 정확하게 알아두면 좋다.

댓글남기기