Rest API
REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미합니다. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고, HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.
Rest API의 특징
- HTTP의 표준만 따른다면 어떠한 기술이던지 접목하여 사용할 수 있기 때문에 플랫폼이나 언어에 따른 제약이 없음.
- 서버는 클라이언트의 상황을 고려하지 않고 API 요청에 대해서만 처리하면 되기 때문에 구현이 간결해집니다.
- 캐싱 기능을 적용할 수 있습니다. GET메소드를 Last-Modified 값과 함께 보낼 경우 컨텐츠의 변화가 없을 때 캐시된 값을 사용하기 때문에 API 서버에 요청을 발생시키지 않아 부담이 덜합니다.
- 많은 서버 개발자들이 사용해오던 아키텍처이기에 GraphQL보다 훨씬 많은 곳에서 사용중이며 많은 개발자들에게 친숙합니다.
- 데이터 요청시 서버에서 응답하는 모든 데이터를 수신해야합니다.
- 모든 경우의 엔드포인트를 개발하고 여러가지 경우의 수를 고려해 개발해야 합니다.
GraphQL
GraphQL은 페이스북이 개발한 API용 쿼리 언어입니다. GraphQL은 특정한 데이터베이스나 특정한 스토리지 엔진과 관계되어 있지 않으며 기존 코드와 데이터에 의해 대체됩니다.
SQL이 데이터베이스 시스템으로부터 데이터를 가져오는 목적을 가진다면, GraphQL은 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 합니다.
클라이언트가 요청시 모든 데이터를 수신해야하는 Rest와 달리 클라이언트에서 특정 데이터만 요청하고 해당 데이터만 수신할 수 있습니다. 따라서 더 효율적인 데이터 송수신이 가능합니다.
GraphQL의 특징
- Rest는 클라이언트가 서버에서 데이터 수신시 서버 개발자가 정해놓은 데이터를 모두 수신해야만 합니다. 그러나 GraphQL은 클라이언트에서 원하는 데이터만 요청해 수신이 가능해 네트워크를 통해 전송되는 데이터의 양을 줄이고 API의 효율성을 높일 수 있습니다
- GraphQL은 쿼리의 구조와 복잡성 측면에서 REST API보다 더 유연하다고 볼 수 있습니다. GraphQL을 사용하면 클라이언트 사이드에서 여러 리소스와 관계를 포함하는 복잡한 쿼리를 만들 수도 있으며, 쿼리 중첩을 통해 계층적 방식으로 데이터를 검색할 수도 있습니다.
- REST API는 보통 여러 엔드포인트를 가지며 각각의 엔드포인트가 동일한 응답을 반환합니다.
하지만, GraphQL은 보통 하나의 엔드포인트만을 사용하며 요청하는 쿼리에 따라 다른 응답을 반환하는 방식입니다.
- 캐싱이 Rest보다 복잡합니다
- Multipart 방식의 전송이 허용되지 않아 파일 업로드, 이미지, 영상 등의 처리가 약합니다.
무엇을 사용할까?
Rest를 보안하기 위해 개발된 GrapghQL이지만 완전한 대체는 무리인것 같습니다.
각 프로젝트의 특성을 파악해 간단한 요청만 처리하는 경우에 GrapghQL을 사용하고 파일 처리나 외부 서버와의 연동 등은 RestAPI가 적합한 것으로 보입니다.