본문 바로가기

MicroService Architecture

API Gateway란?

 

1. API Gateway란?

  • 모든 서버로의 요청을 단일 지점(Gateway)를 거쳐 처리
  • 공통된 로직, 인증 및 인가, 라우팅 등을 처리 가능
  • 클라이언트는 각 서비스의 엔드포인트(URL) 대신 API Gateway로 요청을 보내게 되며, 요청을 받은 API Gateway는 설정에 따라 각 엔드포인트로 클라이언트를 대신하여 요청하고, 응답을 받으면 다시 클라이언트에게 전달하는 프록시(proxy) 역할

 

2. API Gateway의 주요 기능

인증/인가 및 토큰 발급

  • 각 서비스마다 공통으로 구현되어야하는 필수 기능
  • 각 서비스마다 인증/인가를 구현하는 것은 매우 비효율적이므로 API Gateway에서 공통된 부분을 효율적으로 처리
    Ex) 각각의 서비스마다 Spring security 의존성을 추가하여 인증/인가 기능을 구현
  • API 사용을 위한 토큰 발급 기능도 마찬가지로 API Gateway에서 처리

 

공통 로직 처리

  • 인증/인가 외에도 여러 서비스에서 공통적으로 처리되어야 하는 기능이 존재
  • 공통되는 기능을 각각의 서비스마다 구현을 하게 되면 코드 수정이 필요할 때, 각각의 서비스를 다 수정해야 하는 등 유지보수 측면에서도 매우 번거로워짐
  • 따라서 공통적으로 사용되는 로직의 경우 API Gateway에서 처리하게 되면 중복 코드가 제거되며 유지보수에 용이

 

로드 밸런싱(Load Balancing)

  • 대용량 처리 서비스에 있어서 로드 밸런싱은 필수적인 요소
  • 기본적으로는 여러 개의 API 서버로 부하를 분산하는 기능이 주기능이지만, API 서버에 장애가 발생했을 때 이를 감지해서 로드밸런싱 리스트에서 빼고, 복구되었을 때 다시 로드밸런싱 리스트에 넣는 기능들이 필요
    → health-check

 

메디에이션 기능(Mediation)

  • API 요청과 응답을 처리하는 과정에서 데이터를 변환하거나 라우팅하는 역할을 의미
  • 클라이언트와 백엔드 시스템 간의 상호작용을 중재하여 서로 다른 형식의 데이터나 프로토콜을 연결, 필요한 로직을 추가통신이 원활하게 이루어지도록 도와줌
  • Mediation이 수행하는 역할
    1. 데이터 변환 (Transformation)
      • 요청 또는 응답 데이터를 변환하여 서로 다른 형식의 데이터를 맞춤
      • Ex) 클라이언트가 JSON 형식의 데이터를 전송 / 백엔드는 XML을 요구
        JSON을 XML로 변환해 전달
    2. 라우팅 (Routing)
      • 요청을 특정 백엔드 서비스로 라우팅하는 작업
      • 클라이언트 요청에 따라 서로 다른 백엔드 서비스로 요청을 보내거나, 여러 백엔드 서비스를 조합해 응답 구성 가능
    3. 프로토콜 변환 (Protocol Translation)
      • 서로 다른 통신 프로토콜을 사용하는 시스템 간의 중계 역할
      • Ex) 클라이언트는 REST를 사용 / 백엔드는 SOAP을 사용
        → API Gateway에서 프로토콜 변환을 수행
    4. 비즈니스 로직 적용
      • 요청이나 응답에 대해 추가적인 비즈니스 로직 적용 가능
      • Ex) 특정 필드를 추가하거나 제거하고, 데이터 형식을 조정하는 등의 작업을 수행 가능
    5. 결합 및 분할 (Aggregation and Split)
      • 여러 백엔드 시스템에서 데이터를 가져와 하나의 응답으로 결합
      • 또는 반대로 클라이언트의 요청을 여러 백엔드 시스템으로 분할하여 전송 가능

 

3. 상용화된 API Gateway

  • Amazon API Gateway
  • Kong Gateway
  • Tyk
  • KrakenD
  • Spring Cloud Gateway