RESTful API는 REST (Representational State Transfer) 원칙을 따르는 API를 의미.
즉, 클라이언트와 서버가 HTTP를 사용하여 데이터를 주고받는 방식을 정의하는 것! 🚀
📌 REST의 기본 원칙 (6가지)
1️⃣ 클라이언트-서버 구조 (Client-Server Architecture)
• 클라이언트(프론트엔드)와 서버(백엔드)를 분리하여 독립적으로 개발 가능하도록 함.
• 예: React (클라이언트) ↔️ Node.js API (서버)
2️⃣ 무상태성 (Stateless)
• 서버는 클라이언트의 상태를 저장하지 않음 → 요청(Request)만 보고 처리해야 함.
• 예: 로그인 정보를 서버에서 기억하는 것이 아니라, 매 요청마다 토큰(JWT)을 포함해야 함.
3️⃣ 캐시 가능 (Cacheable)
• 동일한 요청이 반복될 경우, 클라이언트는 캐시된 데이터를 사용할 수 있어야 함.
• 예: Cache-Control 헤더를 활용하여 브라우저가 API 응답을 캐싱하도록 설정.
4️⃣ 계층화된 시스템 (Layered System)
• 클라이언트는 API 서버와 직접 통신하는 것이 아니라 여러 계층(예: 로드 밸런서, 보안 계층 등)을 거칠 수 있음.
5️⃣ 일관된 인터페이스 (Uniform Interface)
• RESTful API는 일관된 규칙을 가지고 있어야 함.
• 예: 동일한 데이터에 대해 같은 방식 (GET /users/1)으로 접근할 수 있도록 설계.
6️⃣ 코드 온 디맨드 (Code on Demand, 선택적)
• 서버가 클라이언트에 코드를 전송하여 실행할 수 있도록 허용 (예: JavaScript 실행).
• 일반적인 RESTful API에서는 잘 사용되지 않음.
📌 RESTful API의 HTTP 메서드
메서드 목적
GET 데이터를 조회
POST 데이터를 생성
PUT 데이터를 전체 수정
PATCH 데이터를 부분 수정
DELETE 데이터를 삭제
✅ 예제 (사용자 관련 RESTful API 설계)
기능 HTTP 메서드 엔드포인트 (URL)
사용자 목록 조회 GET /users
특정 사용자 조회 GET /users/{id}
새 사용자 생성 POST /users
사용자 정보 수정 PUT /users/{id}
사용자 일부 수정 PATCH /users/{id}
사용자 삭제 DELETE /users/{id}
📌 RESTful API 예제 (Node.js + Express)
const express = require("express");
const app = express();
app.use(express.json()); // JSON 파싱
let users = [{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }];
// 사용자 목록 조회 (GET /users)
app.get("/users", (req, res) => {
res.json(users);
});
// 특정 사용자 조회 (GET /users/:id)
app.get("/users/:id", (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).json({ error: "User not found" });
res.json(user);
});
// 새 사용자 생성 (POST /users)
app.post("/users", (req, res) => {
const newUser = { id: users.length + 1, name: req.body.name };
users.push(newUser);
res.status(201).json(newUser);
});
// 사용자 전체 수정 (PUT /users/:id)
app.put("/users/:id", (req, res) => {
let user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).json({ error: "User not found" });
user.name = req.body.name;
res.json(user);
});
// 사용자 삭제 (DELETE /users/:id)
app.delete("/users/:id", (req, res) => {
users = users.filter(u => u.id !== parseInt(req.params.id));
res.json({ message: "User deleted" });
});
app.listen(3000, () => console.log("Server running on port 3000"));
📌 이제 /users 엔드포인트를 통해 RESTful API를 사용할 수 있음!
📌 RESTful API vs. REST API 차이점
비교 항목 REST API RESTful API
정의 REST 원칙을 따르는 API REST 원칙을 “충실히” 따르는 API
상태 관리 상태 저장 가능 무상태 (Stateless) 원칙 준수
URL 설계 제한 없음 리소스를 중심으로 설계 (/users/1 등)
응답 형식 자유로움 (XML, JSON) 보통 JSON 사용
🚀 즉, “RESTful API”는 REST 원칙을 엄격하게 지키는 API를 의미!
📌 RESTful API의 장점
✅ 클라이언트-서버 분리 → 프론트엔드와 백엔드 독립 개발 가능
✅ 확장성 (Scalability) → 다양한 클라이언트(웹, 모바일)와 쉽게 연결 가능
✅ 유지보수 용이 → URL과 HTTP 메서드 기반으로 이해하기 쉬움
✅ 캐싱 가능 → 성능 최적화 가능
하지만 너무 엄격하게 RESTful 원칙을 따르려다가 개발이 복잡해질 수도 있음.
그래서 최근에는 RESTful API 대신 GraphQL 같은 대체 기술도 많이 사용돼.
📌 RESTful API 요약
✅ RESTful API는 HTTP를 활용한 API 설계 방식
✅ 리소스 중심으로 URL을 설계 (/users/1 같은 형식)
✅ 무상태 (Stateless) 원칙을 지켜야 함
✅ HTTP 메서드 (GET, POST, PUT, DELETE 등)를 의미에 맞게 사용
✅ JSON 응답을 주로 사용 (XML도 가능하지만 거의 안 씀)
'개발공부 > CS' 카테고리의 다른 글
Docker란? (0) | 2025.02.15 |
---|---|
API란? (0) | 2025.02.15 |
TDD: 테스트 주도 개발. (0) | 2025.02.15 |
OOP의 5가지 설계 원칙 (0) | 2025.02.15 |
OOP란? (0) | 2025.02.15 |