RESTful API
May 26, 2023
ETC
RESTful하다 라는 말을 자주 듣게 되는데, 이때마다 의도는 알 수 있어도 그 의미는 분명하지 않았다. 하지만 RESTful 하다는 의미를 어느정도 알고난 뒤에 생각해 보니, 프론트엔드를 공부하면서 사실 restful 하지 못한 api를 써본 경험이 없는것 같다. 외부 서비스를 이용할 때, 날씨, youtube 등 몇가지 api를 써봤을때도 rest api를 제공 받았고, 학원에서 프로젝트를 진행 할 때에도 백엔드에서 제공하는 api들은 모두 rest api라고 여겨진다.(적어도 나는 그렇게 사용했다.)
REST 아키텍처
rest api는 rest 아키텍처를 준수하는 api를 말한다. 이는 api가 만들어 질 때 어떤 방식, 언어, 라이브러리등과 상관없이 REST가 요구하는 원칙을 준수하며 만들기만 하면 그만이다. 다음은 대표적인 REST 아키텍처의 원칙이다.
-
Client-Server: 클라이언트와 서버는 서로 독립적으로 존재하며, 각자가 발전하고 변화하는데 서로가 영향을 주지 않아야 합다.
-
Stateless: 각 요청은 모든 필요한 정보를 포함해야 한다. 즉, 서버는 클라이언트의 상태를 저장하거나 이전 요청을 기억하지 않는다.
-
Cacheable: 서버는 클라이언트가 응답을 재사용할 수 있도록 응답 데이터의 캐시 가능성을 명시해야 한다.
-
Uniform Interface: REST API는 일관된 인터페이스를 제공해야 한다.
프론트엔드 관점
위의 원칙들과 더불어 어떤 원칙들은 사실 프론트엔드 입장에서는 잘 느끼지 못하는 경우가 있다. 특히 Cacheable의 서버 메모리측 캐싱 측면에서는 서버 메모리에 캐싱되어 클라이언트의 동일 요청에 서버 자원을 소모하지 않는 방법이라, 이런 경우는 클라이언트가 느끼기 힘든 부분이다. 아래는 프론트엔드 관점에서 보는 RESTful한 api의 특징들이다.
-
자원 중심적(Resource Oriented): REST API는 웹의 자원을 URL로 표현하며, 이를 통해 웹 자원에 대한 쉬운 접근이 가능합니다. 이러한 접근 방식은 프론트엔드 개발자가 필요한 데이터를 쉽게 찾아볼 수 있게 합니다.
-
표준 HTTP 메소드 사용: REST API는 표준 HTTP 메소드(GET, POST, PUT, DELETE 등)를 이용하여 자원에 대한 CRUD(Create, Read, Update, Delete) 연산을 수행한다.
-
플랫폼 독립적: REST API는 플랫폼에 독립적이다. 따라서, 프론트엔드 개발자는 다양한 언어와 프레임워크(예: React, Vue, Angular 등)에서 동일한 REST API를 사용할 수 있다.
-
스케일아웃이 용이: REST는 무상태(Stateless) 통신 방식을 사용하므로 서버의 확장이 쉽다. 이는 프론트엔드 개발자가 사용자 수가 많아져도 API가 안정적으로 동작한다는 보장을 받게 한다.
-
캐시 사용 가능: REST API의 응답은 캐시 가능하므로, 프론트엔드 개발자는 이를 활용해 애플리케이션의 성능을 향상시킬 수 있다.
-
Self-descriptive: REST API는 그 자체로 메시지가 충분한 정보를 포함하고 있어서 어떻게 처리해야 할지를 알 수 있다. 이는 프론트엔드 개발자가 API를 쉽게 이해하고 사용할 수 있도록 한다.
다시말해 사용하기 편하고 독립적이며 확장성이 있는 "좋은" api를 만들라는 뜻이며 개발자들이 추구해야 할 권장되는 원칙 같은 것이다.