반응형
RESTful API의 개념과 주요 제약 조건
RESTful API의 개념
REST(Representational State Transfer)는 네트워크 기반 애플리케이션을 설계하기 위한 아키텍처 스타일로, HTTP 프로토콜의 장점을 활용하여 자원(Resource)을 표준화된 방식으로 관리합니다. RESTful API는 REST 원칙을 준수하는 API로, 다음과 같은 특징을 가집니다:
- 자원(Resource) 중심: 모든 데이터나 서비스는 URI(Uniform Resource Identifier)로 식별됩니다.
- HTTP 메서드 활용: GET, POST, PUT, DELETE 등을 통해 CRUD(Create, Read, Update, Delete) 연산을 수행합니다.
- 표현(Representation): JSON, XML 등으로 데이터를 전달하며, 클라이언트와 서버가 독립적으로 진화할 수 있습니다.
RESTful API의 6가지 주요 제약 조건
Roy Fielding이 정의한 REST의 핵심 제약 조건은 다음과 같습니다.
1. Client-Server Architecture (클라이언트-서버 분리)
- 클라이언트(UI/UX)와 서버(비즈니스 로직, 데이터 저장)의 역할을 명확히 분리합니다.
- 장점: 독립적인 진화 가능 (예: 모바일 앱과 웹에서 동일한 API 사용).
2. Statelessness (무상태성)
- 각 요청은 독립적이며, 서버는 클라이언트의 세션 상태를 저장하지 않습니다.
- 예시: 로그인 토큰을 매 요청마다 헤더에 포함시켜 인증합니다.
3. Cacheability (캐시 가능성)
- 응답 데이터는 캐시 가능 여부를 명시해야 합니다.
- 장점: 불필요한 요청 감소 → 성능 향상 (예: Cache-Control 헤더 사용).
4. Layered System (계층화)
- 클라이언트는 서버와 직접 통신하는지, 중개자(로드 밸런서, CDN)를 거치는지 알 수 없습니다.
- 장점: 보안, 확장성, 유연성 향상.
5. Uniform Interface (일관된 인터페이스)
- 다음 4가지 하위 조건을 포함합니다:
- 자원 식별: URI로 자원을 명확히 식별 (예: /users/1).
- 표현을 통한 조작: 클라이언트는 자원의 표현(JSON 등)으로 서버와 통신합니다.
- Self-descriptive Messages: 메시지 자체로 목적을 이해할 수 있어야 함 (예: HTTP 메서드와 상태 코드 명시).
- HATEOAS (Hypermedia as the Engine of Application State): 응답에 관련 자원의 링크를 포함 (예: 사용자 목록 조회 시 상세 보기 링크 제공).
6. Code on Demand (선택적 제약)
- 서버가 실행 가능한 코드(예: JavaScript)를 클라이언트에 전달하여 기능을 확장할 수 있습니다.
- 실제 사용 예: 웹에서 동적으로 위젯을 로드하는 경우.
RESTful API의 장점
- 확장성: 무상태성과 계층화로 대규모 트래� 처리에 적합합니다.
- 간결성: HTTP 표준을 따르므로 학습 및 구현이 용이합니다.
- 유연성: 다양한 클라이언트(모바일, 웹, IoT)에서 동일한 API 사용 가능.
RESTful API의 실제 예시
GET /users/123 HTTP/1.1 → 사용자 123 정보 조회 (200 OK)
POST /users HTTP/1.1 → 새 사용자 생성 (201 Created)
PUT /users/123 HTTP/1.1 → 사용자 123 정보 수정 (200 OK)
DELETE /users/123 HTTP/1.1 → 사용자 123 삭제 (204 No Content)
주의 사항
- 흔한 오해: "RESTful = JSON을 사용하는 API"가 아닙니다. 핵심은 제약 조건 준수입니다.
- HATEOAS 미구현: 대부분의 API는 HATEOAS를 생략하지만, 엄격한 REST 수준은 아닙니다.
- Richardson 성숙도 모델: REST 구현 수준을 0~3단계로 평가 (3단계가 HATEOAS 완전 적용).
결론
RESTful API는 표준화된 제약 조건을 통해 유연성과 확장성을 확보합니다. 현실에서는 트레이드오프를 고려해 일부 조건만 적용하기도 하지만, 핵심 원칙(무상태성, 자원 기반 설계)을 준수하는 것이 중요합니다.
반응형
'개발이야기 > 웹개발' 카테고리의 다른 글
[코드잇 스프린트 풀스택 4기] MVC 패턴이란? (0) | 2025.03.30 |
---|---|
[코드잇 스프린트 풀스택 4기] OAuth의 개념과 사용 이유 (0) | 2025.03.30 |
[코드잇 스프린트 풀스택 4기] React 애플리케이션에서 JWT를 사용하여 인증 시스템 구현하기 (0) | 2025.03.30 |
[코드잇 스프린트 풀스택 4기] 세션 기반 인증과 토큰 기반 인증 (0) | 2025.03.30 |
[코드잇 스프린트 풀스택 4기] Next.js를 사용하는 이유 (0) | 2025.01.20 |