RESTful API로 CRUD 애플리케이션 구축하기
Overview
RESTful API를 이용한 CRUD 애플리케이션 구축은 백엔드 개발의 핵심을 이해하는 데 중요한 과정입니다. CRUD는 Create, Read, Update, Delete의 약자로, 데이터의 기본적인 조작을 담당하는 네 가지 주요 기능을 의미합니다. 이 설명에서는 RESTful API의 개념과 CRUD 기능을 구현하는 방법을 자세히 다루겠습니다.
1. RESTful API 개념
REST(Representational State Transfer)란, 웹에서 리소스를 정의하고 조작하기 위한 아키텍처 스타일입니다. RESTful API는 HTTP 프로토콜을 이용하여 클라이언트와 서버 간의 통신을 수행하며, 리소스는 URI(Uniform Resource Identifier)를 통해 식별됩니다. 주요 HTTP 메서드는 다음과 같습니다:
- GET: 서버에서 리소스를 조회
- POST: 새로운 리소스를 생성
- PUT: 기존 리소스를 수정
- DELETE: 리소스를 삭제
2. CRUD 기능 구현
2.1. Create
새로운 데이터를 생성할 때 사용합니다. 예를 들어, 사용자가 새로운 블로그 포스트를 작성하는 경우를 생각해 봅시다.
HTTP Method: POST
Endpoint: /posts
Request Body:
{
"title": "새로운 포스트",
"content": "포스트의 내용입니다."
}
응답 예시: 성공 시 새로 생성된 포스트의 정보와 HTTP 상태 코드 201(Created)을 반환합니다.
에러 처리: 만약 필수 필드가 누락되었거나 잘못된 데이터가 입력된 경우, HTTP 상태 코드 400(Bad Request)을 반환하고, 에러 메시지를 응답 본문에 포함시킵니다.
2.2. Read
기존 데이터를 조회할 때 사용합니다. 특정 블로그 포스트를 조회하는 예를 들어보겠습니다.
HTTP Method: GET
Endpoint: /posts/{id}
Response:
{
"id": 1,
"title": "새로운 포스트",
"content": "포스트의 내용입니다."
}
에러 처리: 만약 요청한 리소스가 존재하지 않는다면, HTTP 상태 코드 404(Not Found)를 반환합니다.
2.3. Update
기존 데이터를 수정할 때 사용합니다. 예를 들어, 블로그 포스트의 내용을 수정하는 경우를 봅시다.
HTTP Method: PUT
Endpoint: /posts/{id}
Request Body:
{
"title": "수정된 포스트 제목",
"content": "수정된 포스트 내용입니다."
}
응답 예시: 성공 시 수정된 포스트의 정보와 HTTP 상태 코드 200(OK)을 반환합니다.
에러 처리: 리소스가 존재하지 않을 경우, HTTP 상태 코드 404(Not Found)을 반환합니다. 또한, 입력된 데이터가 유효하지 않은 경우에는 400(Bad Request)을 반환합니다.
2.4. Delete
기존 데이터를 삭제할 때 사용합니다. 예를 들어, 특정 블로그 포스트를 삭제하는 경우입니다.
HTTP Method: DELETE
Endpoint: /posts/{id}
응답 예시: 성공적으로 삭제된 경우, HTTP 상태 코드 204(No Content)를 반환합니다.
에러 처리: 삭제할 리소스가 존재하지 않는 경우, HTTP 상태 코드 404(Not Found)를 반환합니다.
3. 구현 예제
다음은 Node.js와 Express를 이용한 간단한 RESTful API의 예제입니다.
const express = require('express');
const app = express();
app.use(express.json());
let posts = []; // In-memory store for example purposes
// Create
app.post('/posts', (req, res) => {
const { title, content } = req.body;
if (!title || !content) return res.status(400).json({ error: 'Title and content are required' });
const newPost = { id: posts.length + 1, title, content };
posts.push(newPost);
res.status(201).json(newPost);
});
// Read
app.get('/posts/:id', (req, res) => {
const post = posts.find(p => p.id === parseInt(req.params.id));
if (!post) return res.status(404).json({ error: 'Post not found' });
res.json(post);
});
// Update
app.put('/posts/:id', (req, res) => {
const { title, content } = req.body;
const post = posts.find(p => p.id === parseInt(req.params.id));
if (!post) return res.status(404).json({ error: 'Post not found' });
if (!title || !content) return res.status(400).json({ error: 'Title and content are required' });
post.title = title;
post.content = content;
res.json(post);
});
// Delete
app.delete('/posts/:id', (req, res) => {
const index = posts.findIndex(p => p.id === parseInt(req.params.id));
if (index === -1) return res.status(404).json({ error: 'Post not found' });
posts.splice(index, 1);
res.status(204).end();
});
app.listen(3000, () => console.log('Server running on port 3000'));
이 코드는 CRUD 작업을 모두 처리할 수 있는 간단한 서버를 만듭니다. posts
배열은 메모리에 저장된 데이터를 관리합니다.
참고문서
'Study Information Technology' 카테고리의 다른 글
손글씨 숫자 인식 TensorFlow와 PyTorch를 활용한 신경망 구현 (1) | 2024.08.25 |
---|---|
자연어 처리 기능을 갖춘 챗봇 설계하기 (1) | 2024.08.25 |
안전한 개인 반영을 위한 암호화된 디지털 저널다이어리 애플리케이션 구축 (1) | 2024.08.25 |
클라우드 동기화 기능을 갖춘 메모장 앱 만들기 (1) | 2024.08.25 |
복잡한 데이터 세트를 이해하기 쉽게 표현하는 데이터 시각화 도구 구현하기 (1) | 2024.08.25 |