본문 바로가기

Web Programming

[Web] REST, RESFTful 설계원칙 / 디자인가이드 / 장점

Rest 와 RESTful

https://nordicapis.com/web-service-what-is-a-rest-api-and-how-does-it-work/

REST와 RESTful은 웹 서비스 개발에 널리 사용되는 개념입니다.

오늘 포스팅에서는 REST와 RESTful하다의 의미,

그리고 REST API 설계원칙과 디자인가이드에 대해 알아보겠습니다.

REST (Representational State Transfer)


REST (Representational State Transfer)는 웹 서비스의 아키텍처 스타일 중 하나로, 웹에서 사용되는 자원을 효율적이고 안정적으로 사용할 수 있게 하는 기법입니다. RESTful 웹 서비스는 HTTP를 기반으로 자원에 접근하는 방식을 정의합니다.

 

  1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD 동작을 적용하는 것을 의미합니다.

 

 

 REST는 다음과 같은 6가지 원칙을 따릅니다.

 

원칙설명

클라이언트-서버 구조 (Client-Server) 클라이언트와 서버는 서로 독립된 요소로 구성되어 있으며, 각각의 역할에 집중함으로써 클라이언트와 서버 간의 개발 및 확장성이 증가하고, 서로 간의 종속성이 줄어듦.
무상태 (Stateless) 각 요청은 서버에게 모든 필요한 정보를 포함해야 하며, 서버는 클라이언트의 이전 요청에 대한 상태 정보를 저장하지 않음. 이로 인해 서버의 복잡성이 감소하고, 확장성이 향상됨.
캐시 가능
(Cacheable)
클라이언트는 서버로부터 전달받은 응답을 캐시할 수 있어야 함. 캐싱을 통해 클라이언트와 서버 간의 통신 횟수가 줄어들며, 전체 시스템의 성능과 효율성이 향상됨.
계층화 구조
(Layered System)
시스템은 여러 계층으로 구성될 수 있으며, 각 계층은 독립적인 기능을 수행함. 이러한 구조를 통해 시스템의 유연성이 증가하며, 각 계층 간의 결합도가 낮아짐.
코드 온 디맨드
(Code on Demand, 선택적)
필요한 경우 서버는 클라이언트에게 실행 가능한 코드를 제공할 수 있음. 이를 통해 클라이언트의 기능이 확장되며, 애플리케이션 로직의 일부를 서버에서 클라이언트로 이동할 수 있음. 하지만 이 원칙은 선택적이며, 모든 RESTful 시스템에서 적용되지는 않음.
유니폼 인터페이스 (Uniform Interface) REST는 일관된 인터페이스를 정의함으로써 상호작용의 단순화와 코드의 재사용성을 제공함. 유니폼 인터페이스의 원칙에는 리소스 식별, 자기 설명적 메시지, 하이퍼미디어를 통한 애플리케이션 상태 변경 등이 포함됨.

 

  1. 클라이언트-서버 디커플링. REST API 디자인에서 클라이언트와 서버 애플리케이션은 서로 간에 완전히 독립적이어야 합니다. 클라이언트 애플리케이션이 알아야 하는 유일한 정보는 요청된 리소스의 URI이며, 이는 다른 방법으로 서버 애플리케이션과 상호작용할 수 없습니다. 이와 유사하게, 서버 애플리케이션은 HTTP를 통해 요청된 데이터에 전달하는 것 말고는 클라이언트 애플리케이션을 수정하지 않아야 합니다.

  2. Stateless. REST API는 stateless입니다. 이는 각 요청에서 이의 처리에 필요한 모든 정보를 포함해야 함을 의미합니다. 즉, REST API는 서버측 세션을 필요로 하지 않습니다. 서버 애플리케이션은 클라이언트 요청과 관련된 데이터를 저장할 수 없습니다.

  3. 캐싱 가능성. 가능하면 리소스를 클라이언트 또는 서버측에서 캐싱할 수 있어야 합니다. 또한 서버 응답에는 전달된 리소스에 대해 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 합니다. 이의 목적은 서버측의 확장성 증가와 함께 클라이언트측의 성능 향상을 동시에 얻는 것입니다.

  4. 계층 구조 아키텍처. REST API에서는 호출과 응답이 서로 다른 계층을 통과합니다. 경험에 따르면 클라이언트와 서버 애플리케이션이 서로 간에 직접 연결된다고 가정하지 않는 것이 좋습니다. 통신 루프에는 다수의 서로 다른 중개자가 있을 수 있습니다. REST API는 엔드 애플리케이션 또는 중개자와 통신하는지 여부를 클라이언트나 서버가 알 수 없도록 설계되어야 합니다.

  5. 코드 온디맨드(옵션). REST API는 일반적으로 정적 리소스를 전송하지만, 특정한 경우에는 응답에 실행 코드(예: Java 애플릿)를 포함할 수도 있습니다. 이 경우에 코드는 요청 시에만 실행되어야 합니다.
  6. 균일한 인터페이스. 요청이 어디에서 오는지와 무관하게, 동일한 리소스에 대한 모든 API 요청은 동일하게 보여야 합니다. REST API는 사용자의 이름이나 이메일 주소 등의 동일한 데이터 조각이 오직 하나의 URI(Uniform Resource Identifier)에 속함을 보장해야 합니다. 리소스가 너무 클 필요는 없지만, 이는 클라이언트가 필요로 하는 모든 정보를 포함해야 합니다.

 


RESTful:


RESTful은 REST 원칙을 따르는 웹 서비스를 나타냅니다. 

 RESTful 아키텍처에서는 각 메서드의 사용 목적과 원칙을 엄격하게 따르는 것이 권장되며, 이를 통해 일관성 있는 API 설계를 추구합니다.

RESTful 웹 서비스는 다양한 종류의 자원에 대한 CRUD (Create, Read, Update, Delete) 작업을 수행할 수 있는 표준 HTTP 메서드를 사용합니다. 주요 HTTP 메서드는 다음과 같습니다:

 

  • GET: 자원을 조회, 서버의 리소스 상태에 변경을 주지 않으며, idempotent(멱등)한 성격을 가짐
  • POST: 새로운 자원을 생성, 서버에 데이터를 전송하여 새로운 리소스를 생성할 때 사용, 멱등 x
  • PUT: 자원을 수정
  • DELETE: 자원을 삭제


RESTful 웹 서비스는 이러한 메서드를 사용하여 자원을 조작하고, JSON, XML 등의 형식으로 데이터를 주고받습니다. 이를 통해 클라이언트와 서버 간의 상호작용이 단순화되고, 개발 및 유지보수가 용이해집니다.

 

REST API 디자인 가이드

 

  • URI 정보의 자원을 표현
  •  자원에 대한 행위는 HTTP Method(GET, POST, PUT, PATCH, DELETE) 표현

 

1. URI 리소스명은 동사가 아닌 명사를 사용해야 한다.

2. 슬래시( / )로 계층 관계를 표현한다.

3. URI 마지막 문자로 슬래시 ( / )를 포함하지 않는다.

4. 밑줄( _ )을 사용하지 않고, 하이픈( - )을 사용한다.

5. URI는 소문자로만 구성한다.

6. 클라이언트는  HTTP 응답 상태 코드로 요청에 대한 피드백을 받는다.

7. 파일확장자는 URI에 포함하지 않는다.

 

 

REST API의 장점



표준화된 인터페이스

REST API를 사용하게 되면 API 요청을 보내는 주소만으로도 요청내용을 파악할 수 있게 되므로 

개발자들이 서로 다른 프로젝트와 팀에서도 쉽게 협업하고 이해할 수 있습니다. 이를 통해 개발자 간의 소통이 원활해집니다.

자기 설명적(self-descriptive)

REST API는 명시적이고 직관적인 URI와 HTTP 메서드를 사용하여 각 기능을 쉽게 파악할 수 있도록 합니다. 이로 인해 개발자들은 각 기능이 어떤 작업을 수행하는지 빠르게 이해할 수 있습니다.

REST API는 표준 HTTP 메서드와 상태 코드를 사용하여 응답을 처리하므로, API 호출의 결과 또한 쉽게 해석할 수 있습니다. 

다양한 플랫폼과 언어 지원

REST API는 플랫폼과 프로그래밍 언어에 중립적이므로, 다양한 기술 스택 적용이 가능합니다.



쉬운 테스트 및 디버깅

REST API는 표준 HTTP 프로토콜을 사용하므로, 웹 브라우저, 커맨드라인 도구, API 테스트 도구 등을 사용하여 쉽게 테스트하고 디버깅할 수 있습니다. 이는 작업을 검증하고 문제를 파악하는 데 도움이 됩니다.

 



이러한 장점들 덕분에 REST API는 개발자들 사이의 소통을 원활하게 하여 협업 효율을 높이고 프로젝트의 성공률을 높일 수 있습니다.

 

 


 

Reference

 

https://aws.amazon.com/ko/what-is/restful-api/

 

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

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

aws.amazon.com

 

https://www.ibm.com/kr-ko/topics/rest-apis

 

REST API란? | IBM

이 안내서에서는 네트워크 애플리케이션의 관리를 위한 아키텍처 스타일인 REST API를 통해 소프트웨어 개발 프로세스를 간소화하는 방법을 알아봅니다.

www.ibm.com

https://nordicapis.com/web-service-what-is-a-rest-api-and-how-does-it-work/

 

https://dev-coco.tistory.com/97

 

REST란? REST API 와 RESTful API의 차이점

참고 REST(REpresentational State Transfer)란? REST의 정의 "REpresentational State Transfer" 의 약자로, 자원을 이름(자원의 표현)으로 구분해 해당 자원의 상태(정보)를 주고 받는 모든 것을 의미합니다. 즉, 자원(

dev-coco.tistory.com

 

https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80

 

[네트워크] REST API란? REST, RESTful이란?

REST API란 REST를 기반으로 만들어진 API를 의미합니다. REST API를 알기 위해 REST부터 알아보도록 하겠습니다. REST란? REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상

khj93.tistory.com