Kim VamPa

[1]REST API란?(의미, 구성, 특징) 본문

코드저장/백엔드

[1]REST API란?(의미, 구성, 특징)

Kim VamPa 2020. 5. 3. 17:00
728x90
반응형

개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다.


목표

  • REST API가 무엇인지 설명할 수 있습니다.
  • 'REST ful 하다'는 의미를 이해합니다.
  • REST API 구성에 대해 알아봅니다.
  • REST API 지켜야하는 원칙, 특징에 대해 알아봅니다.

목차

1. REST란?

2. REST API 구성

3. REST API 원칙(or 특성)

 

 

1. REST란?

웹의 장점을 최대한 활용하기 위한 소프트웨어 아키텍처

 시스템에서 '아키텍처'란 시스템의 최적화를 목표로 하고 시스템 구성과 동작원리 구성환경에 대해 설명하고 설계하는 설계도입니다. 이에 근거하여 REST의 정의를 풀어서 설명하면 웹의 장점을 최대한 끌어내어 최적화를 목표로 하고 시스템 구성, 동작원리, 구성환경을 설명 및 설계하는 설계도입니다. 

 REST는 HTTP의 주요 저자 중 한명인 로이 필딩(Roy Fielding)이 2000년도에 박사학위 논문에서 최초로 소개되었습니다. 당시 그는 웹(HTTP) 설계의 우수성에 비해 제대로 제대로 사용되지 되지 못하고 있다고 생각하였고, 웹의 장점을 최대한 활용하는 아키텍처로서 REST를 발표하였습니다. 

 

REST API란?

 REST API는 REST라는 설계도를 구현한 API를 말합니다. 좀 더 자세히 살펴보면 REST API는 웹 애플리케이션이 제공하는 각각의 데이터를 리소스(자원)으로 간주하고 각각의 자원에 고유한 URI(통합 자원 식별자)를 할당함으로써 이를 표현한 API입니다. 여기서 중요한 부분은 웹 애플리케이션의 데이터를 리소스로 간주하고 각각의 자원에 고유한 URI를 할당하는 것입니다. REST에선 추구하는 6가지 원칙이 있는데, 원칙에 근거하여 해당 부분(URI 설계)을 얼마나 잘 해내냐가 REST가 추구하는 웹의 장점을 얼마나 끌어 낼 수 있는지를 결정하기 때문입니다. 

 

 

REST API 최근 들어 주목 받는 이유

 과거에는 주로 웹을 이용하기위해 컴퓨터의 웹 브라우저를 사용하였기 때문에, 단순히 하나의 브라우저만 지원하면 되었습니다. 하지만 최근 들어 서비스/애플리케이션의 개발 흐름은 멀티 플랫폼, 멀티 디바이스 시대로 넘어왔습니다. 따라서 개발자는 브라우저뿐만 아니라 아이폰, 안드로이드 애플리케이션 또한 고려해야 합니다. 각각의 플랫폼, 디바이스에 최적의 서비스를 제공하기 위해선 각각의 서버를 새로 만들어야만 합니다. 하지만 REST API는 범용적인 사용성을 보장하기 때문에 이러한 수고를 줄여주어서 개발자들이 많이 사용합니다. 

 그리고 최근들어 전통적인 JSP 웹 애플리케이션처럼 하나의 프로젝트로 전체 애플리케이션을 구현하는 설계보다는 클라이언트와 서버 간의 역할 분리 및 서버 애플리케이션의 안전성 확장성, 그리고 *고가용성을 고려한 분산 애플리케이션/API 서버의 구현이 일반적으로 되어 가고 있습니다. 이러한 트렌드에 적합한 기술이 REST API입니다.

*고가용성 : 시스템이 상당히 오랜 기간 동안 지속정으로 정상 운영이 가능한 성질

 

요약

1. 범용적인 사용성을 보장하는 서버의 수요 늠.

2. 서버와 클라이언트 간의 역할 분리된 서버의 구현이 일반적 이어 짐.

 

RESTful 하다의 의미

 RESTful은 'REST 한'이란 의미인데, 풀이를 하면 'REST API가 추구하는 원칙(or특성)을 명확히 지켜주는 것'이라는 의미입니다. REST API 추구하는 원리는 아래에서 살펴보겠습니다. 

 

2. REST API 구성

 REST API는 다음의 3가지로 구성되어 있습니다.

  • 자원(Resource)
     - 표현방법 : HTTP URI
     - REST API의 수행 대상으로서 JSON, XML 문서이거나 혹은 이미지 파일, 비디오 파일일 수도 있습니다.
     - 이러한 자원을 URI(Uniform Resource Identifier, 통합 자원 식별자로) 정의하여 사용합니다. 
  • 행위(Verb)
     - 표현방법 : HTTP Method
     - 리소스(Resource)에 대한 행위에 대한 정의입니다.
    (예를 들면 리소스를 생성할 것인지, 지울 것인지, 수정할 것인지와 같은 행위를 정의합니다.)
    - 종류는 HTTP Method 중에 GET, POST, PUT, DELETE 4가지를 사용할 수 있습니다.
  • 메시지(Representations)
     - 표현방법 : HTTP MEssage Pay Load
     - 자원이 어떠한 것인지 명확히 하기 위해 자원의 형태를 정의합니다.
     - 예를 들어 자원이 JSON파일이면 REST API의 헤더(Header) 부분에 "Content-Type:application/json"을 추가하여 서버가 해당 자원(JSON파일) 해석할 수 있도록 해줍니다.

 

3. REST API 원칙(특징)

1) 인터페이스 일관성(Uniform)

 URI(통합 자원 식별자)로 지정한 리소스 종류에 상관없이 동일한 API 메소드를 갖도록 합니다. 의미는 리소스가 JSON, XML, 음악파일, 비디오 파일 무엇이든 처리가 일관된 형태로 요청된다는 것입니다.

 

2) 무상태(Stateless)

 각 요청 간 클라이언트의 콘텍스트(Context)가 서버에 저장되지 않습니다. 따라서 API는 단순히 들어오는 요청만 처리하게 됩니다. 이로 인해 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다. (콘텍스트가 필요하다면 클라이언트가 자체적으로 관리해야 합니다. )

 

3) 캐시 처리 가능(Cacheable)

 기존에 존재하는 HTTP Method(GET, POST, PUT, DELETE)를 사용하기 때문에 웹의 인프라를 그대로 사용할 수 있습니다. 따라서 REST API는 HTTP의 기능인 '캐싱'기능을 사용할 수 있습니다. 동일한 URI에 대한 요청을 여러 번 하였을 경우, URI 리소스를 매번 서버로 요청하지 않고, 클라이언트의 HTTP 캐시에서 미리 가져온 정보를 반환합니다.

 

4) 자체 표현 구조(Self-descriptivness)

 주석과 같은 다른 부연 설명 없이 REST API의 메시지만 보고도 이해가 가능하도록 설계됩니다.

 

5) 클라이언트-서버 구조(Client - server)

  서버는 오로지 API만 제공, 클라이언트는 콘텍스트(세션, 로그인 정보)등을 직접 관리하여 각각의 역할이 명확하게 구분되도록 합니다. 이로 인해 서버에서 개발해야 할 내용이 명확해지고 서로 간 의존성이 줄어들게 됩니다.

 

6) 계층형 구조(Layered System)

 REST API는 다중 계층(Multi layer)으로 구성될 수 있습니다. 클라이언트는 보통 대상 서버에 연결되었는지, 도는 중간 서버를 통해 연결되었는지를 알 수 없습니다. 중간 서버는 *로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상하는데 유용합니다. 

*로드 밸런싱(부하분산) : 컴퓨터 네트워크 기술의 일종입니다. 둘 혹은 셋 이상의 중앙 처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미합니다.

 

 

4. 장단점

장점

1. Open API를 제공하기 쉽습니다.

2. 멀티플랫폼 지원 및 연동이 용이합니다.

3. 원하는 타입으로 데이터를 주고받을 수 있습니다.

4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있습니다.

 

단점

1. 사용할 수 있는 메서드가 4가지 밖에 없습니다.

2. 분산 환경에는 부적합합니다.

3. HTTP 통신 모델에 대해서만 지원합니다.

 

 

5. 정리

 REST란 웹의 장점을 최대한 활용하도록 하는 소프트웨어 아키텍처입니다. REST에선 추구하는 6가지 원칙이자 특징으로 유니폼 인터페이스, 무상태성, 캐시 기능, 자체 표현구조, 클라이언트-서버 구조, 계층형 구조가 있습니다. 이러한 원칙을 가진 REST를 통해서 구현한 API가 REST API입니다. 

 개발자들이 흔히 말하는 'RESTful 하게 서버를 설계한다'는 의미는 REST의 6가지 원칙을 준수하는 서버를 개발한다는 의미입니다.

 최근 들어 다양한 플랫폼, 디바이스 사용으로 인해 범용성 있는 서버 구축의 필요성이 커졌습니다. 그와 더불어 서버와 클라이언트가 명확히 분리되도록 설계되는 것이 일반적으로 되고 있습니다. 이러한 요구들을 충족하는 것이 REST API이기 때문에 수요가 계속 커져 가고 잇는 추세입니다.

 

 

Reference

 

Date

  • 2020.05.03 wkrtjd

 

 

 

 

728x90
반응형
Comments