REST와 RESTful

1. REST

REST(Representational State Transfer)는 분산 네트워크에서 자원을 표현하고 상태를 전송하는 방식입니다.

모든 자원은 고유한 식별자(URI)를 갖고 있으며, 이를 통해 자원에 접근합니다. 자원은 데이터, 서비스, 또는 시스템을 나타낼 수 있습니다. 자원은 여러 형태의 표현을 가질 수 있으며, JSON이나 XML과 같은 형식으로 표현될 수 있습니다.

각 요청 간에 클라이언트의 상태를 서버에 저장하지 않으며, 각 요청은 필요한 모든 정보를 포함해야 하며 일관된 인터페이스를 통해 서버와 클라이언트가 상호작용할 수 있도록 하는 것이 중요합니다. 이를 위해 리소스 식별, 표현을 통한 자원 조작, 자기 서술적 메시지 및 하이퍼미디어를 사용합니다.

또한, 시스템을 계층으로 구성하여 각 계층이 독립적으로 개선될 수 있도록 하는 계층화 원칙도 포함됩니다. REST는 주로 HTTP를 기반으로 하며, HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 조작합니다. RESTful API는 REST의 원칙을 따르는 API를 의미하며, 클라이언트와 서버 간의 효율적인 통신을 가능하게 합니다.

REST의 특징점

자원(Resource) 기반

REST는 모든 자원을 고유한 식별자(URI)를 통해 표현하며, 클라이언트는 URI를 사용하여 자원에 접근합니다. 예를 들어, "/users"는 사용자 자원을 나타내고, "/users/1"은 ID가 1인 특정 사용자를 나타냅니다.

상태 없음(Stateless)

서버는 각 클라이언트 요청을 독립적으로 처리하며, 클라이언트의 상태를 저장하지 않습니다. 이는 서버의 확장성과 클라이언트의 상태 관리의 단순화를 가능하게 합니다.

통일된 인터페이스

REST는 통일된 인터페이스를 제공하여 클라이언트와 서버 간의 상호 작용을 단순화합니다. 이를 위해 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 원하는 동작을 지정하고, HTTP 상태 코드를 사용하여 요청의 성공 또는 실패를 나타냅니다.

캐시 가능(Cacheable)

REST는 HTTP 프로토콜의 기본 기능을 활용하여 응답을 캐싱할 수 있습니다. 이는 서버의 응답 성능을 향상시키고 네트워크 대역폭을 절약할 수 있습니다.

계층 구조(Layered System)

REST 아키텍처는 서버와 클라이언트 사이에 중간 계층(로드 밸런서, 캐시 서버 등)을 포함할 수 있습니다. 이는 시스템의 확장성, 보안성, 로드 균형을 개선하는 데 도움을 줍니다.

REST는 주로 웹 서비스와 API 개발에서 많이 사용되며, 클라이언트가 HTTP 프로토콜을 통해 자원을 요청하고 서버는 해당 자원에 대한 적절한 응답을 반환하는 방식으로 동작합니다.

2. RESTful API

RESTful API(Representational State Transfer API)는 네트워크 애플리케이션을 설계하기 위한 아키텍처 스타일입니다. 이는 확장 가능하고 상호 운용 가능한 웹 서비스를 구축하기 위한 표준화된 접근 방식을 제공하는 REST 아키텍처 스타일의 원칙을 기반으로 합니다.

RESTful API는 상태 비저장 클라이언트-서버 통신 모델을 촉진하는 일련의 제약 조건 및 지침을 따릅니다. 다음은 RESTful API의 몇 가지 주요 특성입니다.

  1. 리소스 기반: RESTful API는 고유한 URL(Uniform Resource Locator)로 식별되는 리소스를 중심으로 합니다. 각 리소스는 일반적으로 시스템의 특정 엔터티 또는 개념과 연결됩니다.

  2. CRUD 작업: RESTful API는 리소스와 상호 작용하기 위한 네 가지 기본 CRUD(만들기, 읽기, 업데이트, 삭제) 작업을 지원합니다. 이러한 작업은 각각 POST, GET, PUT 및 DELETE와 같은 표준 HTTP 메서드를 사용하여 수행됩니다.

  3. 상태 비저장: RESTful API는 상태 비저장입니다. 즉, 서버는 요청 간에 클라이언트 컨텍스트를 저장하지 않습니다. 클라이언트의 각 요청에는 서버가 이를 이해하고 처리하는 데 필요한 모든 정보가 포함되어야 합니다. 세션 상태는 전적으로 클라이언트 측에서 유지됩니다.

  4. 통일된 인터페이스: RESTful API에는 표준 HTTP 프로토콜 및 규칙을 따르는 통일되고 일관된 인터페이스가 있습니다. 여기에는 특정 작업에 대한 HTTP 메서드 사용, 요청 결과를 나타내는 HTTP 상태 코드 사용, 데이터 표현을 위한 JSON 또는 XML과 같은 표준 데이터 형식 사용이 포함됩니다.

  5. HATEOAS(Hypermedia as the Engine of Application State): HATEOAS는 API 응답에 하이퍼미디어 링크를 포함하도록 제안하는 REST의 원칙입니다. 이러한 링크는 클라이언트에게 탐색 정보를 제공하여 관련 리소스를 동적으로 검색하고 상호 작용할 수 있도록 합니다.

이러한 원칙을 준수함으로써 RESTful API는 확장 가능하고 상호 운용 가능한 웹 서비스 구축 방식을 제공합니다. 표준 HTTP 프로토콜을 통해 클라이언트-서버 통신을 가능하게 하여 다양한 시스템과 플랫폼이 서로 쉽게 상호 작용할 수 있도록 합니다.

개발자는 HTTP 요청(예: GET, POST, PUT, DELETE)을 특정 URL로 전송하여 RESTful API와 상호 작용할 수 있으며 서버는 요청된 데이터로 응답하거나 요청된 작업을 수행합니다. RESTful API는 단순성, 확장성 및 다양한 프로그래밍 언어 및 프레임워크 전반에 걸친 광범위한 지원으로 인해 널리 채택되었습니다.

Last updated