본문 바로가기
Study/Knowledge

API란? - SOAP, REST, GraphQL, gRPC 비교 - 총정리

1. API란?

서비스와 서비스끼리의 통신을 위해, 약속 되어 있는 다양한 종류의 인터페이스를 API라고 부른다.

인터페이스란?

사람과 장치 간의 소통을 위한 창구를 인터페이스라고 한다.

사용자와 컴퓨터 장치간의 마우스, 키보드같은 인터페이스 장치가 있고,

사용자와 컴퓨터 하드웨어 자원을 연결하는 OS의 그래픽 유저 인터페이스(GUI) 가 있고,

WEB, APP 화면도 마찬가지로 사용자와 서비스를 이어주는 다양한 인터페이스중 하나이다.

 

그런데 사람과 장치뿐 아니라,

소프트웨어와 소프트웨어 사이에도 소통을 위한 인터페이스가 있다.

서비스와 서비스끼리의 요청/명령을 받기위한 인터페이스를 바로 API라고 부른다. 

 

만약 잘 이해 되지 않는다면, 여기 영상을 참고하시길 바랍니다.

 

2. API 종류

 

소프트웨어간의 효율적인 개발과 데이터 통신을 위해 API 형식이 계속적으로 발전되어 왔다.

현재 SOAP은 거의 사용되지 않지만, 어떤 이유로 대체되고 지금 시장에서는 무엇을 유용하게 쓰고있는지 알아보자!  

 

SOAP API

SOAP(Simple Object Access Protocol)는 다양한 장점과 약점을 가지고 있다.

HTTP Method중 POST만을 이용하여 데이터의 CRUD를 처리하는 특징이 있다.

다양한 오류에 대한 처리가 가능하고, stateful / stateless 모두 지원한다. 

 

장점

1. 웹 기반 서비스를 생성하는 HTTP프로토콜을 사용하므로 언어와 플랫폼에 독립적이다. 

2. SOAP은 사용을 위한 복잡한 표준이 정해져 있어, 러닝커브가 큰 편이고 지식의 전문성을 가진다.

3. WS-Security, SSL 등의 기능을 지원하여 메세지 수준에서 암호화가 가능하고 개인 정보 보호 및 무결성을 제공한다,

4. SOAP은 엄격한 보안성을 가지고있기에 , 금융, 통신, 마케팅, 결제 시스템과 같은 기업용 서비스에 사용되는 장점이있다.

 

단점

1. XML 형식만 사용할 수 있다.

2. 캐시기능을 사용할 수 없다.

3. 많은 리소스와 대역폭을 필요로 하므로 오버헤드가 큰 편이다.

4. SOAP API 서버 구축을 위해서는 매우 제한된 규칙에 대해 전문적이고 깊은 이해가 필요하다.

 

 

 

REST API

SOAP은 진입장벽도 높고 사용하기 어려우며, 많은 리소스를 사용하기에 무거운 통신이 될 수 밖에 없지만,  

반면 REST (REpresentational State Transfer)란 형식의 API는 상대적으로 적은 리소스를 사용하고, 개방적이며 다양한 포맷의 데이터를 주고 받을 수 있다.

REST는 리소스를 얻어올때 URI, query의 정보를 데이터를 가져오기에 쉽게 해석이 가능하며, 캐시사용이 가능하다.

REST API는 HTTP Method중 GET, POST, PUT ,PATCH, DELETE 를 사용하여 통신한다.

Client의 요청에 정보를 넘기는 형식이므로 보안에 취약하여, 기상정보, 약국정보와 같은 공공데이터,

보안성에 문제되지 않는 비즈니스 분야의 데이터 등을 REST API형식으로 제공/사용 합니다.

 

SOAP vs REST

 

 

GraphQL

그래프QL은 API를 위한 쿼리언어로 2012년 페이스북에서 개발하여 REST API를 대체할 수 있습니다.

기존의 REST API의 경우, 정의된 요청에 대한 응답만 가능했다면,

GQL은 필요한 컬럼에 대해서만 선택적으로 요청할수 있어 불필요한 데이터를 받지 않고, 필요한 데이터만 받을 수 있습니다.

GraphQL은 REST와는 다르게 Resource에 대한 엔드포인트가 따로 존재하지 않고, 하나의 엔드포인트만 존재합니다.

또한 해당 엔드포인트로 요청 시, 원하는 리소스와 해당 리소스에서 원하는 필드를 특정하는 GraphQL query를 함께 보냅니다.

/graphql?query={ book(id: "1") { title, author { firstName } } }


{
  "title": "Black Hole Blues",
  "author": {
    "firstName": "Janna",
  }
}

위의 gql을 통해, JSON형식으로 id = 1 인 book의 title과 author의 firstName 만 가져올 수 있습니다.

GraphQL은 여러 Depth의 조인이 필요한 복잡한 요청 데이터도 할 수 있어서, 효율적으로 데이터를 주고 받을 수 있습니다.

 

 

gRPC

gRPC은 Google에서 개발한 Remote Procedure Calls로 오픈소스 원격 프로시저 호출 시스템입니다.

지금까지의 API는 데이터를 요청/응답 받아 통신했다면,

gRPC는 클라이언트의 요청으로 서버의 정의되어있는 함수를 수행시켜 단순히 데이터만 주고받는게 아닌, 

클라이언트가 서버에게 원하는 일들을 훨씬 폭넓고 다양하게 시킬수가 있습니다. 

 

 

RPCStub을 이용해 IDL 호출규약을 정의하고,

클라이언트에서 구현된 원시코드 형태의 함수가 Server에 동시구현되며,

만들어진 Stub코드는 Cli/Svr에서 동시 컴파일 되어

클라이언트의 요청으로 Server내에 원격 프로시저가 호출이 되고, 결과값을 반환 받습니다.

클라이언트는 서버에서만 가능했던 업무를 자신의 Local처럼 활용하며,

다양한 기능을 구현하고 실행시킬수 있게 되는것입니다.  

gRPC : 참고 1,  참고 2

 

API 종류별 정리표

 

 

 

 

 

참조 사이트