2. REST의 특성
: 위에서 REST의 기본적인 개념과 구성에 대해서 알아보았다면 REST가 가지고 있는 특성을 알아보자. 특성을 알아야 더욱 좋은 API를 설계할 수 있으며 더 좋은 개발 산출물을 만들 수 있을 것이다.
1> Uniform Interface
REST는 HTTP 표준을 지원한다면 그외 어떠한 기술, 언어, OS 등..에 대한 제약을 받지 않는 인터페이스 스타일이다.
예를 들어 HTTP + JSON형식으로 REST를 정의 하였다면 개발자가 C++, Python과 같은 언어와 상관없이 해당 개발이 가능하며 iOS, Android, Window, Linux 할 것 없이 어디서든지 사용이 가능하다는 뜻이다.
이와 같은 특성으로 REST API를 사용할 경우 서비스간에 느슨한 결합 형태로 구성이 가능하다는 장점이 있다.
• REST라고 말하면 많은 사람들이 HTTP + JSON을 손쉽게 떠올리며 꼭 JSON만 사용해야 되는 줄 아는 경우가 있다. 하지만 JSON은 하나의 옵션 사항일 뿐이다. xml과 같은 다른 형식을 사용하여도 전혀 무방하다. 단, 요즘에는 JSON 대부분 많이 사용하고 있다는 것은 알아두자.
2> Stateless
REST는 말 그대로 상태값을 저장하지 않는다.
REST API 사용자에 컨텍스트를 서버쪽에서 유지하지 않는다는 뜻이다. 예를 들면 HTTP의 Session와 같은 저장소에 로그인 상태 정보, 로그인한 사용자 정보와 같은 다양한 정보들이 저장되어 사용되는 것들이 REST API에서는 불가능하다는 것이다.
이와 같이 상태 정보를 저장하지 않으면 어떤 좋은점이 있을까?
REST API에 상태 저장을 하지 않게 되면 API서버는 들어오는 요청에 메세지가 의미하는 것만 수행하면 된다. 즉 다양한 상태 정보들을 신경쓸 필요가 없어짐으로 구현이 단순해 지는 것이다.
3> Cacheable
REST는 HTTP의 웹표준을 사용하고 있기 때문에 웹에서 사용하고 있는 HTTP 캐싱 기능이 적용 가능하다.
구현은 Last-Modified태그나 E-Tag를 이용하면 사용할 수 있다.
예를 들어 살펴보자.
Client에서 Last-Modified 태그 정보를 담아 GET API를 호출하게 되면 서버는 Last-Modified 태그에 명시된 시간 이후로 상태 변경이 없을 경우 '304 Not Modified'를 리턴하게 된다. 이와 같이 리턴을 받게된 Client는 자신이 가지고 있는 캐쉬값을 활용하서 지속적으로 서비스 하게 되는 것이다.
일반적인 서비스 시스템을 보면 대부분의 요청이 조회(GET)에 해당하는 경우가 많다. 이와 같이 조회 요청이 많을 경우 특히 캐슁 기능을 잘 활용 하면 용량이나 성능에 많은 장점을 가지고 올 수 있다.
4> Self-descriptiveness
REST의 가장 큰 특징 중 하나로 REST API 자체가 쉬워서 API만 보아도 API 속에 담고 있는 의미를 쉽게 파악할 수 있다는 것이다.
특히 REST API에서 많이 쓰이는 JSON 또한 가독성이 좋기 때문에 아주 좋은 궁합이라고 말할 수 있다.
외부로 REST API를 통해 서비스를 제공하는 것을 고려하고 있다면 이와 같은 특성은 아주 큰 장점으로 다가올 것이다.
5> Client - Server 구조
일반적으로 Rest 서버는 API를 통해 사용자에게 다양한 기능을 서비스 제공 하게 된다. 즉, 서버는 API를 통해 전달된 요청을 비즈니스 로직에 맞게 수행하고 관련 데이터를 저장하며 사용자는 서버에서 제공해주는 API를 호출하고 응답을 받아 처리하면 되는 것이다.
이와 같은 구조로 제공을 한다는 것은 서버와 클라이언트(사용자)의 역할이 명확히 구분된다는 의미이기도 하다.
- 클라이언트: 사용자 인증, 세션과 로그인과 같은 정보를 직접 관리 등..
- 서버 : 비즈니스 로직 실행, 데이터 관리 등..
Client - Server 구조의 특성으로 인해 REST는 계층형 구조의 장점도 가질 수 있다.
이것은 서버가 다중 계층으로 구성될 수 있다는 의미인데 예를 들면 순수한 비즈니스 로직을 제공해주는 API 서버가 있다면 그 앞에 사용자 인증, 암호화, 로드 밸런싱 등을 하는 계층을 추가하는 것과 같이 구조적으로 유연하게 기능을 추가 할 수 있다는 의미이다.
*마이크로서비스 아키텍쳐의 api gateway나 간단한 기능을 제공해 줄 경우에는 HA Proxy, Apache와 같은 Reverse Proxy를 이용하여 구현 한다.
'API' 카테고리의 다른 글
RPS와 TPS의 차이점 무엇일까? (0) | 2024.01.25 |
---|---|
[부하테스트] Locust란 무엇인가? (0) | 2023.12.12 |
[API] REST API 보안 (0) | 2019.01.15 |
[API] REST API 설계 해보기 (0) | 2019.01.09 |
[API] REST API (개념 및 구성 요소) (0) | 2018.12.24 |