막개발글

API Gateway 란? (\w reverse proxy, MSA, Gateway)

leexx 2024. 1. 18. 00:15

들어가며

많이 들어봤지만 잘 모르는 API Gateway 에 대해 알아보았습니다.

 

의미로 접근해보기

API Gateway 는 API 와 gateway 의 합성어 입니다. API 는 아실테니 넘어가고... gateway 만 보겠습니다.

 

API Gateway 의 gateway 는 (네트워크에서 사용하는 Gateway 로써의 의미가 아닌) 사전적인 의미의 gateway 입니다. gateway 의 사전적인 의미는 입구, 출입구, 관문 등 입니다.

 

출처: 네이버 영어 사전 - gateway

 

API Gateway 란 API 를 호출할 때 거치는 관문이라 생각할 수 있겠습니다.

 

API Gateway 란

API Gateway 는 여러 서비스 (혹은 서버) 들의 앞에 위치하여, 각기 다른 곳에서 배포되어 서비스 되고 있는 API 들을 하나의 엔드포인트로 통합하여 보다 쉽게 사용할 수 있도록 합니다.

 

출처:  https://medium.com/design-microservices-architecture-with-patterns/api-gateway-pattern-8ed0ddfce9df

 

즉 이 그림에서, Catalog, ShoppingCart, Discount, Ordering 은 각각 다른 곳에서 실행되는 서비스 입니다. (domain name 이 다르거나, port 번호가 다르거나 등등) 만약 쇼핑카트의 정보를 불러오고 싶다면 ShoppingCart 의 서비스가 돌아가고 있는 서비스로 요청을 보내는 것이 아닌, API Gateway 로 보내면 됩니다. Discount, Ordering, Catalog 도 동일합니다.

 

이처럼 다른 곳에서 돌아가는 서비스일지라도 각각의 서비스로 요청을 보내는 것이 아니라, API Gateway 로 보내면 됩니다. API Gateway 로 요청을 보내면 API Gateway 에서 적절한 서비스로 요청을 보내줍니다.

 

API Gateway 의 주요 기능

API Gateway 는 여러 서비스의 앞단에 위치하므로 공통으로 무언가를 처리하거나, 분배하는 등의 업무(?) 를 처리합니다.

  • 인증/인가 및 토큰을 발급
  • 공통 로직 처리
  • 로드밸런싱
  • 메디에이션

 

API Gateway, reverse proxy 그리고 MSA

그런데 보다보면... reverse proxy 가 생각이 나기도 하는데요, 그런데 또 찾아보다보면 MSA 와도 떼놓을 수 없는 사이인 것 같습니다. 이는 API Gateway 의 MSA 등장에 따른 역할 변화와 관련 이 있습니다.

 

API Gateway 는 MSA 등장 이전에는 reverse proxy 와 거의 유사하였고, MSA 의 등장 이후에는 보다 복잡한 기능들을 갖추어 MSA 환경에서 보다 적합해졌습니다.

 

MSA 등장 이전

MSA 이전에는 reverse proxy 의 역할을 많이 수행하였습니다. reverse proxy 는 주로 단일 또는 여러 서버의 앞에서 보안, 부하 분산, 캐싱 등을 수행합니다.

  • 라우팅: 클라이언트의 요청을 적절한 백엔드 서버나 서비스로 라우팅하는 기본적인 역할을 수행했습니다. 이는 리버스 프록시의 주요 기능 중 하나입니다.
  • 부하 분산: 클라이언트로부터의 요청을 여러 서버 간에 분산시키는 기능을 제공했습니다. 이를 통해 서버의 부하를 줄이고, 서비스의 가용성과 신뢰성을 향상시킬 수 있었습니다.
  • 보안: 클라이언트와 백엔드 서버 사이에 위치하여, 서버의 보안을 강화하고 외부로부터의 공격으로부터 보호하는 역할을 했습니다.
  • 캐싱: 자주 요청되는 데이터나 정적 콘텐츠를 캐싱하여, 성능을 향상시키고 서버의 부하를 줄이는 기능을 제공했습니다.

 

MSA 등장 이후

MSA는 여러 개의 작은 서비스로 구성되어 각 서비스가 독립적으로 개발되고 배포되는 구조 입니다. 하나의 서비스에서 개발되는 모놀리식 아키텍쳐와 대비되는 구조입니다. <- 내용 출처 (MSA 는 다음에 더 자세히 다루겠습니다)

 

[MSA] 마이크로서비스 아키텍처(MSA)란 뭘까?

마이크로서비스 아키텍처(MSA)는 작고 독립적인 서비스들의 집합으로 구성된 애플리케이션 구조이다 이번 포스팅에서는 마이크로서비스 아키텍처(Microservice Architecture)와 모놀리식 아키텍처(Monol

mozzi-devlog.tistory.com

 

이는 여러 서비스의 API 를 하나의 엔드포인트로 통합하는 API Gateway 와 아주 합이 좋아보입니다! 때문에 API Gateway 는 MSA 환경에서 보다 복잡한 기능을 갖추게 되었습니다.

 

MSA 환경에서의 API Gateway 는 각 서비스 (마이크로서비스) 간에 통신을 조정하고, 각 서비스의 특성에 맞게 라우팅하며, 인증과 권한 부여, API 버전 관리, 서비스 모니터링 등의 고급 기능을 제공하게 되었습니다.

 

Reverse proxy API Gateway

MSA 의 등장으로 API Gateway 는 기존의 reverse proxy 와의 유사한 역할에서 보다 복잡한 기능들이 추가되었습니다. 따라서 현재의 API Gateway 는 의미론적으로는 reverse proxy 를 포함한다고 볼 수 있습니다.

 

그리고 infrastructure 내에서 둘의 위치는 같다고 볼 수 있다고도 합니다.

출처:  https://www.baeldung.com/cs/api-gateway-vs-reverse-proxy

 

Gateway 란?

API Gateway 와 (네트워크 용어의) Gateway 의 의미는 비슷한 듯 하면서도 조금 다릅니다.

 

Gateway 는 네트워크에서 서로 다른 통신망, 프로토콜을 사용하는 네트워크 간에 통신을 가능하게 해주는 것을 말합니다. 즉 다른 네트워크로 들어가는 관문(입구) 역할을 하는 네트워크 포인트 입니다.

 

예시로 요청이 HTTP 인데 서버에서 FTP 통신이 필요하면 게이트웨이가 호환 가능하게 만들어줍니다.

클라이언트 HTTP 요청 -> 게이트웨이가 FTP 서버 요청 -> 서버가 FTP 응답 -> 게이트웨이가 HTTP 로 응답 전달

- https://jisu-log.tistory.com/3

 

reverse proxy 와 gateway 의 차이점

이 글을 보던 중 리버스 프록시와 게이트웨이가 자세히 어떻게 다른 지 궁금해졌다. 기존에는 둘 다 클라이언트가 여러 과정을 거져 서버로 접속하기 전 서버 앞에 있는 중개자 정도의 개념으로

jisu-log.tistory.com

 

이는 해외여행으로 예시를 들 수 있겠습니다. 해외여행을 가려면 공항에서 비행기를 타야합니다.

공항까지 바퀴를 이용해서 이동하는 것을 프로토콜 A 라고 정의하고, 비행기를 타고 공중에서 이동하는 것을 프로토콜 B 라고 정의하겠습니다.

 

공항을 통해 A -> B 로 전환함으로써, 다른 프로토콜로 전환하였다고 볼 수 있습니다.

 

API Gateway 와 Gateway 의 예시 (흐름도)

Gateway 는 프로토콜 변환을 수행합니다. 따라서 HTTP 에서 FTP 로 변환하는 경우를 예시로 보겠습니다.

 

 

목적은 클라이언트가 서비스 A 로부터 profile.png 이미지를 다운받는 것 입니다.

  1. 클라이언트가 A 로부터 profile.png 파일을 다운받으려 합니다.
  2. client 의 request 는 API Gateway 에서 Application server 로 요청을 보내도록 합니다.
  3. Application server 에서 File server 로 파일을 가져오기 위한 요청을 합니다. 이 때 Gateway 를 통해 (기존과 다른 프로토콜인) FTP 로 접근할 수 있게 됩니다.
  4. File Server 에서 Application server 로 profile.png 를 보내줍니다.
  5. Application Server 는 Client 에게 profile.png 를 보내줍니다.

❗️API Gateway 가 reverse proxy 역할도 하는 아키텍처라면 5번에서 파일을 보내줄 때 API Gateway 를 거칩니다. 그러나 만약 그렇지 않다면, API Gateway 를 거치지 않고 Client 에게 바로 전달됩니다. 일반적으로는 API Gateway 를 거치지 않는다고 합니다. (아마 reverse proxy 가 별도로 있어서 그런게 아닐까합니다)

 

참고