상세 컨텐츠

본문 제목

Restful api

Web

by doongeon 2025. 6. 19. 10:06

본문

JSON 주고받는 걸 넘어서

그동안 나는 REST API를 "그냥 JSON 주고받는 방식" 정도로 이해하고 있었다.
하지만 실제로 REST는 단순한 형식이나 기술이 아니라 웹 아키텍처의 설계 스타일이다. 이번 기회에 REST가 정확히 무엇인지, 그리고 왜 그렇게 설계되었는지를 정리해보려 한다.


REST?

REST는 REpresentational State Transfer의 약자다.
직역하면 "자원의 상태를 표현하고 전달하는 방식"인데, 이게 무슨 말인지 쉽게 풀어보자.

  • Resource (자원): 서버가 관리하는 모든 것. 예: 사용자, 게시글, 상품 등
  • Representation (표현): 자원을 표현한 형태. 예: JSON, XML, HTML 등
  • State Transfer (상태 전달): 클라이언트가 HTTP 요청을 통해 자원의 상태를 조회하거나 변경하는 것

즉, 클라이언트는 서버에게 "자원의 현재 상태를 표현한 결과"를 요청하고, 서버는 그것을 적절한 형식으로 응답해주는 구조다.


여섯가지 조건

REST는 단순한 API 스타일이 아니라, 제약 조건을 따른다.

1. Client-Server 구조 클라이언트와 서버는 역할을 명확히 분리한다.
2. Stateless (무상태성) 서버는 이전 요청의 상태를 저장하지 않는다. 모든 요청은 독립적이다.
3. Cacheable 응답은 캐시가 가능한지 명시되어야 한다.
4. Uniform Interface 일관된 인터페이스를 통해 자원에 접근한다. (핵심 조건) ⚠️
5. Layered System 클라이언트는 중간 서버가 있어도 상관없이 동작해야 한다.
6. Code on Demand (선택적) 서버가 클라이언트에게 코드를 전송해 실행하게 할 수도 있다. (거의 사용되지 않음)
 

RESTful한 API?

REST 원칙을 잘 지킨 API를 흔히 RESTful API라고 부른다.
RESTful한 API는 다음과 같은 특징을 가진다:

  • URI는 자원을 명사형으로 표현:
    예: /users/123, /posts/42/comments
  • HTTP 메서드를 자원 조작에 사용:
    • GET /users/1 → 사용자 1 조회
    • POST /users → 사용자 생성
    • PUT /users/1 → 사용자 1 전체 수정
    • PATCH /users/1 → 사용자 1 일부 수정
    • DELETE /users/1 → 사용자 1 삭제
  • 표현 형식은 JSON, XML, HTML 등 다양
    • 요청 헤더 Accept에 따라 응답 형식을 조절할 수 있음

REST는 JSON과 동일한 것이 아니다!

REST는 데이터 형식에 대한 규약이 아니다. REST에서는 HTML, XML, JSON 등 어떤 표현도 가능하다.

예를 들어 다음과 같은 요청이 가능하다:

GET /greeting HTTP/1.1 Accept-Language: ko Accept: text/plain
  • Accept-Language: ko → "안녕하세요"
  • Accept-Language: en → "Hello"
  • Accept: text/html → <body>안녕하세요</body>
  • Accept: application/json → { "greeting": "안녕하세요" }

서버는 같은 자원(/greeting)이라도 요청에 맞춰 다양한 표현(Representation) 을 제공할 수 있다.
이것이 바로 Representational State Transfer가 의미하는 바다.


 

 

참고자료

 

RESTful API란 무엇인가요? - RESTful API 설명 - AWS

Amazon API Gateway는 어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지 관리, 모니터링 및 보안 유지할 수 있도록 하는 완전관리형 서비스입니다. API Gateway를 사용하면 실시간 양방향 통신 애

aws.amazon.com

 

영어로 보기를 권장한다.

 

 

 

REST의 representation이란 무엇인가

사실 서버가 보내준 것은 리소스가 아니다. 다음과 같은 HTTP GET 요청을 서버에 보내서 GET Host: example.org Accept: text/plain, text/html; q=0.9 *; q=0.1 Accept-Language: en, ko; q=0.9, *; q=0.1 “hello”라는 메시지를 

blog.npcode.com

'Web' 카테고리의 다른 글

HTTP (HyperText Transfer Protocol)  (0) 2025.04.14
GET vs POST (Http Methods)  (0) 2024.08.24
발더스 게이트 3 아이템 사전  (0) 2024.05.03

관련글 더보기