1. RESTful API란?
REST(Representational State Transfer)는 웹의 장점을 최대한 활용하기 위해 로이 필딩(Roy Fielding)이 2000년 박사 논문에서 제안한 아키텍처 스타일이다. 웹 자원을 URI로 식별하고, HTTP 메서드로 접근하며, 표현 형태를 통해 데이터를 주고받는 방식이다.
RESTful API는 REST의 아키텍처 원칙을 따르는 API를 의미한다. HTTP 프로토콜 기반으로, 웹 기술을 최대한 활용해 확장성과 일관성을 가진 시스템을 구축할 수 있다.
RESTful API의 기본 구성 요소
- 자원(Resource): URI(Uniform Resource Identifier)로 식별되는 데이터
- 행위(Verb): HTTP 메서드(GET, POST, PUT, DELETE)로 정의되는 작업
- 표현(Representation): JSON, XML 등으로 표현되는 데이터 형식
2. REST의 6가지 제약 조건
2.1 클라이언트-서버 구조
클라이언트와 서버의 역할을 분리하여 개발의 독립성과 유연성을 확보한다. 클라이언트는 사용자 인터페이스와 사용자 경험에 집중하고, 서버는 데이터 저장과 비즈니스 로직을 담당한다.
2.2 무상태성(Stateless)
각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않는다. 모든 요청은 필요한 정보를 포함해야 하며, 세션 정보는 클라이언트가 관리해야 한다.
2.3 캐시 처리 가능(Cacheable)
서버는 응답에 캐시 가능 여부를 명시해야 한다. 적절한 캐시는 서버 부하를 줄이고 클라이언트의 응답 속도를 향상시킨다.
2.4 통합 인터페이스(Uniform Interface)
시스템 전체에서 일관된 인터페이스를 제공하여 아키텍처를 단순화한다.
- 리소스 식별: URI를 통해 개별 자원을 식별
- 표현을 통한 자원 조작: 클라이언트는 자원 상태를 표현한 메시지를 통해 조작 가능
- 자기 서술적 메시지(Self-Descriptive Messages): 메시지는 그 자체로 처리 방법을 설명해야 한다
- HATEOAS: 클라이언트가 서버와 상호작용하는 방식을 하이퍼링크로 제공하여 동적으로 탐색 가능
2.5 계층화된 시스템(Layered System)
시스템을 여러 계층으로 구성하여 보안, 로드 밸런싱, 캐시 등의 기능을 추가할 수 있다. 클라이언트는 서버가 아닌 프록시나 게이트웨이를 통해 요청을 전달받을 수도 있다.
2.6 코드 온 디맨드(Code-On-Demand, 선택사항)
서버는 JavaScript 같은 코드를 클라이언트에게 전송하여 동적으로 실행시킬 수 있다. 이는 선택사항이며, 클라이언트의 기능을 확장하는 데 활용된다.
3. RESTful API의 특징과 장점
- HTTP 기반이므로 별도의 인프라 없이 구현 가능
- 플랫폼에 구애받지 않는 호환성과 확장성
- 명확한 역할 분리로 유지보수성과 재사용성 향상
- 단순한 URI 설계와 HTTP 메서드 사용으로 직관적인 이해 가능
4. RESTful API 설계 시 주의할 점
- URI는 명사형으로 자원을 나타내야 하며, 동사는 사용하지 않는다 (예:
/users) - HTTP 메서드는 의미에 맞게 사용한다 (GET, POST, PUT, DELETE 등)
- 상태 정보를 클라이언트에 유지하도록 설계한다
- 적절한 응답 코드와 메시지를 제공한다
- HATEOAS와 자기 서술적 메시지 원칙을 가능한 지킨다
5. 결론
RESTful API는 웹의 기본 프로토콜인 HTTP를 기반으로, 일관성과 확장성을 확보할 수 있도록 설계된 아키텍처 스타일이다. 6가지 제약 조건을 충실히 지킬 때 비로소 RESTful한 시스템이라 할 수 있다. 이를 통해 유지보수성과 확장성이 뛰어난 웹 서비스를 구축할 수 있으며, 표준화된 인터페이스를 통해 개발자 간 협업이 쉬워진다.
하지만 단순히 HTTP를 사용한다고 해서 RESTful하다고 볼 수 없으며, 각 제약 조건을 정확히 이해하고 적용해야 한다.
'코딩 > 기초' 카테고리의 다른 글
| [Web] MVC 아키텍처 패턴 정리: Model, View, Controller 분리 원칙 (1) | 2025.09.01 |
|---|---|
| [Web Security] OAuth란? 개방형 인증/인가 프레임워크 이해하기 (0) | 2025.09.01 |
| [React] JWT를 활용한 사용자 인증 시스템 설계 및 구현 (3) | 2025.07.14 |
| [web] 세션 기반 인증과 토큰 기반 인증의 차이점 (1) | 2025.07.14 |
| [DB] 관계형 데이터베이스 사용 이유 (0) | 2025.06.09 |