RESTful API란 무엇인가?

현대의 대부분의 웹 서비스는 RESTful API 구조로 만들어져 있습니다.
앱에서 데이터를 주고받거나, 백엔드 서버와 통신하는 거의 모든 구조가 여기에 해당하죠.
그렇다면 RESTful API란 정확히 무엇을 의미할까요?


REST란 무엇인가

REST(Representational State Transfer)는
2000년 로이 필딩(Roy Fielding)의 박사 논문에서 제시된 웹 아키텍처 원칙입니다.
쉽게 말해, “웹에서 자원을 다루는 표준적인 방법” 을 정의한 개념이에요.

웹의 모든 것은 ‘자원(Resource)’ 으로 표현됩니다.
예를 들어,

  • /users → 사용자 목록
  • /users/1 → ID가 1인 사용자
    처럼 각각의 URL이 자원의 위치를 나타냅니다.

REST는 이런 자원을 다룰 때 일관된 방식(HTTP 메서드) 으로 동작하도록 정의합니다.
즉, “무엇을(URI)” + “어떻게(HTTP Method)” 로 표현합니다.


RESTful이란 무엇인가

RESTful은 단순히 REST를 사용했다는 뜻이 아닙니다.
REST의 설계 원칙을 충실히 따르는 구조를 의미하죠.

📘 예를 들어,
/getUserInfo?id=1 같은 URL은 RESTful하지 않습니다.
올바른 방식은 /users/1 입니다.

즉, URI에는 동사 대신 명사를 쓰고,
행위(조회, 생성, 수정, 삭제)는 HTTP 메서드로 구분해야 RESTful한 구조입니다.

restful architecture img

HTTP 메서드와 CRUD 관계

동작HTTP 메서드예시 URL설명
조회(Read)GET/users , /users/1데이터 가져오기
생성(Create)POST/users새 데이터 생성
수정(Update)PUT , PATCH/users/1기존 데이터 수정
삭제(Delete)DELETE/users/1데이터 삭제

이렇게만 봐도 RESTful API는
데이터 중심의 구조를 단순하고 예측 가능하게 만드는 패턴임을 알 수 있습니다.


상태 비저장 (Stateless)

RESTful API의 가장 중요한 특징 중 하나는 Stateless 입니다.
즉, 서버가 클라이언트의 상태(Session)를 기억하지 않습니다.
매 요청은 완전히 독립적이며,
서버는 요청에 필요한 모든 정보를 요청 본문(body) 이나 헤더(header) 에서 받습니다.

이 덕분에 서버 확장(Scaling)이 훨씬 용이해집니다.


RESTful API 예시

GET /products           # 상품 전체 목록
GET /products/3         # ID 3번 상품 정보
POST /products          # 상품 등록
PUT /products/3         # 상품 정보 수정
DELETE /products/3      # 상품 삭제

이처럼 RESTful API는 URL만 봐도 “무엇을” 하고 있는지 직관적으로 알 수 있습니다.
이를 통해 프론트엔드·백엔드 개발자 간의 협업이 훨씬 간결해집니다.


REST vs RESTful

구분RESTRESTful
의미자원 중심의 설계 철학REST를 실제로 잘 구현한 API
특징개념적 원칙실제 구현 방식
예시URL만 자원 구조를 따름HTTP 메서드, 규칙, 일관성 모두 충족

즉, 모든 REST API가 RESTful 한 것은 아닙니다.
RESTful이란 “REST의 정신을 제대로 지킨 API”를 뜻합니다.


// 📁 server.js
// RESTful API 예제 — User 관리용 API

import express from "express";
const app = express();
const PORT = 3000;

app.use(express.json());

// 임시 데이터베이스 (메모리)
let users = [
  { id: 1, name: "Alice", email: "alice@example.com" },
  { id: 2, name: "Bob", email: "bob@example.com" },
];

//  1. 전체 사용자 조회 (GET)
app.get("/users", (req, res) => {
  res.json(users);
});

//  2. 특정 사용자 조회 (GET)
app.get("/users/:id", (req, res) => {
  const user = users.find(u => u.id === Number(req.params.id));
  user ? res.json(user) : res.status(404).json({ message: "User not found" });
});

//  3. 새 사용자 추가 (POST)
app.post("/users", (req, res) => {
  const newUser = { id: Date.now(), ...req.body };
  users.push(newUser);
  res.status(201).json(newUser);
});

//  4. 사용자 정보 수정 (PUT)
app.put("/users/:id", (req, res) => {
  const id = Number(req.params.id);
  const index = users.findIndex(u => u.id === id);
  if (index === -1) return res.status(404).json({ message: "User not found" });

  users[index] = { ...users[index], ...req.body };
  res.json(users[index]);
});

//  5. 사용자 삭제 (DELETE)
app.delete("/users/:id", (req, res) => {
  const id = Number(req.params.id);
  users = users.filter(u => u.id !== id);
  res.json({ message: `User ${id} deleted` });
});

// 서버 실행
app.listen(PORT, () => console.log(`🚀 RESTful API Server running on port ${PORT}`));

마무리

정리하자면 RESTful API는

“HTTP 기반으로 자원을 명확하게 구분하고, 일관된 메서드로 접근하는 설계 방식”입니다.

이 방식은 웹 표준에 맞고, 직관적이며, 유지보수가 쉬워서
오늘날 대부분의 백엔드 시스템이 RESTful 구조를 따릅니다.