[개발상식] 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
📌 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을 사용하여 서버에 요청을 보내어 데이터를 생성, 조회, 수정, 삭제 할 수 있다.
- Create (생성)
- HTTP 메서드:
POST - 예시: 새로운 사용자를 생성하는 경우
- 요청:
POST /users - 요청 본문(body): 새로운 사용자의 정보를 포함하는 JSON 또는 XML 데이터
- 응답: 새로운 사용자의 ID와 함께 성공 메시지 또는 적절한 상태 코드 (예: 201 Created)
- 요청:
- HTTP 메서드:
- Read (읽기)
- HTTP 메서드:
GET - 예시: 모든 사용자 목록을 가져오는 경우
- 요청:
GET /users - 응답: 모든 사용자의 목록을 포함하는 JSON 또는 XML 데이터 또는 적절한 상태 코드와 함께 성공 메시지 (예: 200 OK)
- 요청:
- HTTP 메서드:
- Update (갱신)
- HTTP 메서드:
PUT또는PATCH - 예시: 특정 사용자의 정보를 업데이트하는 경우
- 요청:
PUT /users/{id}또는PATCH /users/{id} - 요청 본문: 업데이트할 사용자의 정보를 포함하는 JSON 또는 XML 데이터
- 응답: 적절한 상태 코드와 함께 성공 메시지 또는 업데이트된 사용자의 정보
- 요청:
- HTTP 메서드:
- Delete (삭제)
- HTTP 메서드:
DELETE - 예시: 특정 사용자를 삭제하는 경우
- 요청:
DELETE /users/{id} - 응답: 적절한 상태 코드와 함께 성공 메시지 또는 삭제된 사용자의 정보
- 요청:
- HTTP 메서드:
💡 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라는 단어를 사용하곤 한다. 엄청나게 어려운 개념은 아니지만 되게 많이 사용되는 단어이기 때문에 어떤 의미인지 정확하게 알아두면 좋다.
댓글남기기