1. 개요
- 현대 시스템 간 연동 방식으로 웹 기반 API가 보편화
- 그중 REST API는 가장 널리 사용되는 아키텍처 스타일 중 하나
- 클라이언트-서버 간 통신 단순화 및 표준화에 기여
2. REST 개념 및 정의
- REST(Representational State Transfer)의 약자
- 2000년 로이 필딩(Roy Fielding)의 박사학위 논문에서 제안된 웹 아키텍처 스타일
- HTTP 프로토콜 기반의 자원(Resource) 지향 접근 방식
- 클라이언트와 서버 간 상태 정보를 주고받으며 자원을 표현
3. REST의 구성 요소
- 자원(Resource)
- URI(Uniform Resource Identifier)를 통해 표현
- 고유 식별자 형태로 관리됨
- 행위(Verb)
- HTTP 메서드 사용 (GET, POST, PUT, DELETE 등)
- CRUD(Create, Read, Update, Delete)와 매핑
- 표현(Representation)
- 자원 상태를 표현하는 데이터
- JSON, XML, HTML 등 다양한 포맷 사용
- 메시지
- 요청(request)과 응답(response) 구조로 구성
- Header, Body 등을 통해 부가 정보 전달 가능
4. REST의 6가지 아키텍처 제약 조건
- 클라이언트-서버 구조
- 역할 분리로 확장성과 독립성 확보
- 무상태성(Stateless)
- 각 요청은 독립적이며, 서버는 클라이언트 상태 저장하지 않음
- 캐시 처리 가능(Cacheable)
- 응답 데이터에 캐싱 정보 포함하여 성능 최적화 가능
- 계층화 시스템(Layered System)
- 클라이언트는 중간 서버 존재를 인지하지 못함
- 인터페이스 일관성(Uniform Interface)
- 일관된 URI 및 HTTP 메서드 활용
- 코드 온 디맨드(Optional)
- 클라이언트에 스크립트 코드 전달 가능 (선택 사항)
5. REST API의 작동 방식 예시
- URI:
/users/123
GET /users/123
: 사용자 정보 조회POST /users
: 사용자 생성PUT /users/123
: 사용자 정보 갱신DELETE /users/123
: 사용자 삭제
6. REST API의 장점
- HTTP 기반으로 별도 프로토콜 불필요
- 플랫폼 및 언어 독립적 구조
- 경량(Lightweight) 구조로 모바일/IoT 환경에 적합
- 구조적 단순성으로 빠른 개발 및 유지보수 가능
- 표준 URI 및 HTTP 메서드를 활용한 명확한 인터페이스 정의 가능
7. REST API의 단점 및 한계
- 무상태성으로 인해 인증 처리 시 매 요청마다 인증 필요
- 복잡한 트랜잭션 처리 및 비동기 처리가 어려움
- URI 설계에 대한 명확한 가이드 없을 경우 난해한 구조 발생 가능
- 표준화가 미흡하여 개발자 간 구현 방식 상이
8. RESTful 설계 시 고려사항
- 자원의 개념을 명확하게 식별하고 URI로 표현
- HTTP 메서드를 올바르게 사용하도록 설계
- 상태코드(HTTP Status Code)를 표준에 따라 정확히 반환
- URI는 명사 중심, 메서드는 동사 중심으로 사용
- 메시지 포맷은 JSON을 기본으로 하되 확장성 고려
- 인증은 OAuth2, JWT 등 별도 보안 계층 통해 처리
9. REST API와 유사/대체 기술 비교
항목 | REST API | SOAP | GraphQL |
---|---|---|---|
구조 | 경량, URI 기반 | 무겁고 복잡 | 유연한 질의 언어 |
표준 | HTTP 표준 기반 | XML 기반의 엄격한 표준 | 자체 스키마 정의 |
메시지 포맷 | JSON, XML 등 | XML만 지원 | JSON 기반 |
확장성 | 높은 수준 | 복잡한 확장 구조 | 뛰어난 질의 유연성 |
10. REST API 적용 사례
- 구글, 페이스북, 트위터, 슬랙 등 글로벌 IT 기업
- 공공데이터포털 및 민간 오픈 API 서비스
- 마이크로서비스(MSA) 구조에서 각 서비스 간 통신 수단으로 활용
- 모바일 백엔드와 클라이언트 앱 간 통신
11. 결론
- REST API는 단순성과 명확성을 갖춘 현대 웹 시스템의 핵심 통신 방식
- 아키텍처 제약 조건을 충실히 지키는 설계가 중요
- RESTful한 설계와 구현을 통해 시스템 간의 상호 운용성과 확장성을 보장할 수 있음
- 향후 GraphQL, gRPC 등 신기술과의 병행 사용 고려 필요
'IT Study > SW 개발 및 프로그래밍' 카테고리의 다른 글
🧰 LLM 기반 개발 도구 (Copilot, Tabnine, Devin 등) (1) | 2025.04.02 |
---|---|
🌐 웹어셈블리(WebAssembly) (0) | 2025.04.01 |
💻 Rust 프로그래밍 언어 (0) | 2025.04.01 |
💻 DevOps(Development Operations) (0) | 2025.03.27 |
💻 객체 지향 프로그래밍(Object-Oriented Programming) (1) | 2025.03.27 |