데이터를 생성하고, 읽고, 수정하고, 삭제하는 네 가지 기본 동작을 묶은 말이다.
이건 마치 우리가 블로그를 운영하면서 관리하는 것과 같다고 이해하면 쉽다.
간단하게, 블로그를 관리하는 상황으로 예를 들었다.
우리가 블로그를 운영한다고 생각해보자.
새 글을 작성하고, 작성된 글을 보고, 수정 및 삭제하는 과정이 모두 CRUD 이다.
| 단계 | 설명 | 실제 의미 (API 기준) |
|---|---|---|
| 새 글 작성 | 새로운 블로그 글을 작성함 | 👉 Create (POST) |
| 글 조회 | 블로그 글을 읽고 확인함 | 👉 Read (GET) |
| 글 수정 | 내용을 바꾸거나 제목을 고침 | 👉 Update (PUT / PATCH) |
| 글 삭제 | 게시글을 블로그에서 삭제함 | 👉 Delete (DELETE) |
CRUD 동작은 REST API의 핵심 설계 원칙이다.
각 동작마다 HTTP 메서드를 연결하면 자연스럽게 API로 이어진다.
| 기능 | HTTP Method | URL 예시 | 설명 |
|---|---|---|---|
| Create | POST | /orders | 새로운 주문 등록 |
| Read | GET | /orders/1 | 주문 상세 조회 |
| Update | PUT or PATCH | /orders/1 | 주문 내용 수정 |
| Delete | DELETE | /orders/1 | 주문 삭제 |
이런 API 구조는 직관적이고 유지보수도 쉽고,
GET이면 조회, POST면 생성이라는 식으로 쉽게 이해할 수 있다.
POST /todos
Content-Type: application/jsonPOST /todos
Content-Type: application/json{
"title": "팀 프로젝트 준비",
"content": "회의 자료 준비 및 발표 연습",
"username": "홍길동",
"memberId": 123
}{
"title": "팀 프로젝트 준비",
"content": "회의 자료 준비 및 발표 연습",
"username": "홍길동",
"memberId": 123
}📥 응답:
{
"id": 1,
"title": "팀 프로젝트 준비",
"content": "회의 자료 준비 및 발표 연습",
"username": "홍길동",
"memberId": 123,
"createdAt": "yyyy-mm-dd",
"modifiedAt": "yyyy-mm-dd"
}{
"id": 1,
"title": "팀 프로젝트 준비",
"content": "회의 자료 준비 및 발표 연습",
"username": "홍길동",
"memberId": 123,
"createdAt": "yyyy-mm-dd",
"modifiedAt": "yyyy-mm-dd"
}GET /todos/1GET /todos/1📥 응답:
{
"id": 1,
"title": "팀 프로젝트 준비",
"content": "회의 자료 준비 및 발표 연습",
"username": "홍길동",
"memberId": 123,
"createdAt": "yyyy-mm-dd",
"modifiedAt": "yyyy-mm-dd"
}{
"id": 1,
"title": "팀 프로젝트 준비",
"content": "회의 자료 준비 및 발표 연습",
"username": "홍길동",
"memberId": 123,
"createdAt": "yyyy-mm-dd",
"modifiedAt": "yyyy-mm-dd"
}PUT /todos/1
Content-Type: application/jsonPUT /todos/1
Content-Type: application/json{
"title": "팀 프로젝트 준비 - 계획 변경",
"content": "발표 중심으로 내용 수정",
"memberId": 123
}{
"title": "팀 프로젝트 준비 - 계획 변경",
"content": "발표 중심으로 내용 수정",
"memberId": 123
}📥 응답:
{
"id": 1,
"title": "팀 프로젝트 준비 - 계획 변경",
"content": "발표 중심으로 내용 수정",
"username": "홍길동",
"memberId": 123,
"createdAt": "yyyy-mm-dd",
"modifiedAt": "yyyy-mm-dd"
}{
"id": 1,
"title": "팀 프로젝트 준비 - 계획 변경",
"content": "발표 중심으로 내용 수정",
"username": "홍길동",
"memberId": 123,
"createdAt": "yyyy-mm-dd",
"modifiedAt": "yyyy-mm-dd"
}DELETE /todos/1DELETE /todos/1📥 응답:
{
"message": "삭제 완료"
}{
"message": "삭제 완료"
}@PostMapping("/todos")
public ResponseEntity<?> createTodo(@RequestBody TodoRequestDto dto) {
// 일정 등록 로직
}
@GetMapping("/todos/{id}")
public ResponseEntity<TodoResponseDto> getTodo(@PathVariable Long id) {
// 일정 조회 로직
}
@PutMapping("/todos/{id}")
public ResponseEntity<?> updateTodo(@PathVariable Long id, @RequestBody TodoRequestDto dto) {
// 일정 수정 로직
}
@DeleteMapping("/todos/{id}")
public ResponseEntity<?> deleteTodo(@PathVariable Long id) {
// 일정 삭제 로직
}@PostMapping("/todos")
public ResponseEntity<?> createTodo(@RequestBody TodoRequestDto dto) {
// 일정 등록 로직
}
@GetMapping("/todos/{id}")
public ResponseEntity<TodoResponseDto> getTodo(@PathVariable Long id) {
// 일정 조회 로직
}
@PutMapping("/todos/{id}")
public ResponseEntity<?> updateTodo(@PathVariable Long id, @RequestBody TodoRequestDto dto) {
// 일정 수정 로직
}
@DeleteMapping("/todos/{id}")
public ResponseEntity<?> deleteTodo(@PathVariable Long id) {
// 일정 삭제 로직
}처음엔 CRUD가 그냥 외워야 할 단어 같았는데,
이전에 했던 일정 관리 프로젝트를 다시 복습해보면서 흐름을 다시 정리하게 됐다.
이제 곧 최종 프로젝트를 앞두고 있어, 복습 차원에서 CRUD 개념을 다시 점검하면서 앞으로의 작업에 더 자신감이 생긴거같다..! 😹
CRUD는 아래 키워드만 기억하자
CRUD란?
👉 데이터를 만들고, 조회하고, 수정하고, 삭제하는 기본 동작
왜 중요한가?
👉 API 설계의 뼈대가 되고, 백엔드 개발의 기본 흐름이 되기 때문
추가로 기억할 것
👉 PUT은 전체 수정, PATCH는 필요한 부분만 수정할 때 사용!