Programming/Spring Cloud

API Gateway란? 개념과 주요 기능

Jan92 2022. 11. 20. 00:45

API Gateway란

1. API Gateway란?

최근 많은 서비스들이 독립적인 기능을 수행하는 작은 단위의 서비스들로 구성된 마이크로 서비스 아키텍처(Micro Service Architecture) 형태로 구축되면서 서비스의 복잡도를 줄일 수 있게 되었고, 변경에 따른 영향을 최소화하면서 개발과 배포를 할 수 있다는 장점도 얻게 되었는데요.

하지만 여기서 말하는 작은 단위의 서비스가 50개, 100개가 되었을 때, 이 많은 서비스들의 엔드포인트를 관리하는 데 있어서 어려움이 생기고, 또 각각의 서비스마다 공통적으로 들어가는 기능(ex 인증/인가, 로깅 등)들을 중복으로 개발해야 한다는 문제점이 발생합니다.

 

이러한 문제점을 해결하기 위해 등장한 것이 바로 API Gateway로 API Gateway는 위 이미지와 같이 클라이언트와 각각의 서비스들 사이에 위치하게 되는데요.

클라이언트는 각 서비스의 엔드포인트 대신 API Gateway로 요청을 보내게 되며, 요청을 받은 API Gateway는 설정에 따라 각 엔드포인트로 클라이언트를 대신하여 요청하고, 응답을 받으면 다시 클라이언트에게 전달하는 프록시(proxy) 역할을 합니다.

// API Gateway가 단일 진입점 역할을 한다는 설명도 잘 와닿았습니다.

 

이처럼 API Gateway는 클라이언트의 요청을 라우팅 하는 것 외에도 단일 진입점의 이점으로 인해 추가로 구현했을 때 유용한 기능들이 많은데요. 이어지는 내용을 통해 API Gateway의 주요 기능 몇 가지를 살펴보겠습니다.

 

/*

클라이언트와 직접적으로 요청을 주고받는 것이 API Gateway가 되는데요. 이는 내부 서비스의 아키텍처를 외부에 감추는 캡슐화로도 볼 수 있으며, 정보 은폐의 측면에서 장점으로 적용됩니다.

*/

 

 

 

2. API Gateway의 주요 기능

  • 인증/인가 및 토큰 발급

먼저 인증/인가의 경우, 각 서비스마다 공통으로 구현되어야 하는 필수적인 기능이 되는데요.

각각의 서비스마다 인증/인가 처리를 구현하는 것은 매우 비효율적이기 때문에 API Gateway에서 이 처리를 하게 되는 것입니다.

//Spring으로 예를 들자면 각각의 서비스에 Spring Security 의존성을 추가해 해당 기능을 구현하는 것

 

인증 서버

또한 API 사용을 위한 토큰 발급 기능도 마찬가지 이유로 API Gateway에서 처리되는데요.

실제로 토큰 발급 기능은 인증을 위한 서비스(= 인증 서버)를 하나 두고 거기에서 처리되게 됩니다.

 

/*

인증(Authentication) : 해당 사용자가 본인이 맞는지를 확인하는 절차

인가(Authorization) : 인증된 사용자가 요청한 자원에 접근 가능한지를 확인하는 절차

*/

 

 

 

  • 공통 로직 처리

인증/인가 외에도 여러 서비스에서 공통적으로 처리해야 할 기능들이 있는데요.

공통되는 기능을 각각의 서비스마다 구현하는 것은 번거로울 일일뿐더러 코드 수정이 필요할 때, 각각의 서비스를 다 수정해야 하는 등, 유지보수 측면에서의 어려움도 존재합니다.

 

공통 로직 처리

때문에 공통적으로 사용되는 로직의 경우 API Gateway에서 구현되는 것이 효율적이며, 개발 중복을 줄이는 것뿐만 아니라 표준 준수도 쉽다는 장점을 가지고 있습니다.

 

/*

최근 API 호출 로깅을 통한 클라이언트의 API 호출 패턴을 분석하여 활용하는 것은 빅데이터의 특면에서 중요한 자산으로도 다뤄지고 있습니다.

*/

 

 

 

  • 로드밸런싱

대용량 처리 서비스에 있어서 로드밸런싱은 필수적인 부분이 되었는데요.

기본적으로는 여러 개의 API 서버로 부하를 분산하는 기능이 주가 되겠지만, API 서버에 장애가 발생했을 때 이를 감지해서 로드밸런싱 리스트에서 빼고, 복구되었을 때 다시 로드밸런싱 리스트에 넣는 기능들이 필요합니다. (health-check)

 

 

 

  • 메디에이션 기능(Mediation)

메디에이션 기능 중에는 메세지 호출 변화(Message Exchange Pattern)가 있는데요.

메세지 호출 패턴은 동기(Sync), 비동기(Async)와 같은 API를 호출하는 메세지 패턴을 정의하는 것인데, API Gateway를 이용하면 아래와 같이 동기 호출을 비동기 호출로 바꿀 수도 있습니다.

 

API Gateway에서의 Message Exchance Pattern

또한 클라이언트의 요청을 하위 서비스가 처리할 수 있도록 데이터 형식을 변형하거나, 하위 서비스의 응답 표준 포맷으로 데이터 형식을 변형하는 메세지 포맷 변환(Message format transformation) 기능도 있습니다.

 

 

***

위에 설명한 기능들 외에도 API Gateway에는 다양한 기능들이 존재하지만 당연히 모든 기능을 구현할 필요는 없으며, 필요한 기능들을 입맛에 맞게 적용하면 되는 것입니다.

 

 

 

3. 상용화된 API Gateway

API Gateway의 경우 직접 개발을 할 수도 있지만, MSA가 많이 사용되면서 잘 구현된 상용 서비스들이 많아졌는데요.

Amazon API Gateway, Kong Gateway, Tyk, KrakenD, Spring Cloud Gateway 등이 상용 서비스로 개발되어 사용되고 있습니다.

 

 

 

 

< 함께 보면 좋은 글 >

2022.11.09 - [Programming/Spring Cloud] - 클라우드 환경 Service Discovery 개념 정리

 

< 참고 자료 >

https://bcho.tistory.com/1005