[MSA] API Gateway

ChoiJaeHoon·2021년 9월 23일
0

API Gateway가 필요한 이유

만약 MSA 환경에서 API Gateway가 없다면 어떨까? 다음과 같은 문제점들이 발생할 것이다.

  1. 모든 서비스들마다 인증/인가 로직을 추가해줘야한다.
  2. 모든 요청들을 로깅하기가 버겁다.
  3. 하나의 클라이언트가 여러 개의 잘게 쪼개진 서비스들을 호출해야하는 번거로움이 있다.

API Gateway를 클라이언트와 서비스 사이에 놓는다면?

인증/인가 로직을 혼자 담당할 수 있고 다양한 요청에 맞게 알맞은 API를 호출해서 응답해줄 수 있고 이러한 요청들을 기록하고 분석할 수 있는데다가 로드 밸런싱까지 처리할 수 있게 된다. MSA에서는 API Gateway가 필수요소가 된다.

API Gateway 역할

위에서 간략하게 소개했지만 좀 더 자세하게 API Gateway의 기능에 대해서 알아보자.

  1. 인증/인가

인증은 API를 호출하는 클라이언트의 신분을 확인하는 것이고 인가는 API 호출을 할 수 있는 권한은 확인하는 것이다. 인증/인가를 거칠 때마다 클라이언트가 id/password를 입력하는 것도 번거롭고 그렇다고 id/password를 저장해놓자니 해킹의 위협이 있다. 그래서 보통 토큰 방식을 이용한다.

  • API 토큰 발급

API 토큰 방식은 사용자 인가가 끝나면, 사용자에게 API를 호출할 수 있는 토큰을 발급해준다. API 서버는 이 토큰으로 사용자의 identity 와 권한을 확인한후, API 호출을 허가해준다.

토큰 발급을 위해서는 먼저 클라이언트를 인증해야 한다.

클라이언트를 인증하는 방법은 id/password 방식, 생체인식 방식, 공인 인증서, OTP 등 다양한 방법들이 있다. 이러한 인증 방식을 통과하면 apitoken을 발급해준다.

이때, 클라이언트에 대한 인증은 API Gateway가 직접 하지 않고 뒷단에 있는 인증 서버가 이를 수행하는데, 간단하게는 내부 계정 관리를 위한 Active Directory, LDAP 또는 RDBMS등이 될 수 도 있으며, 외부 인증 서버로는 예를 들어서 온라인 게임에 가입할때, 페이스북 계정을 사용하는 경우, 온라인 게임 서버가 페이스북에 이 사용자의 인증을 요청하고, 페이스북이 인증을 해주면 온라인 게임서버가 apitoken을 발급해주는 흐름등을 들 수 있다.

그래서 API 게이트웨이의 중요한 기능중의 하나는 다양한 외부 인증 서버와 연계가 가능한 것이다.

이렇게 발급된 토큰을 API를 호출할 수 있는 권한 정보와 연관이 되는데, 이 권한 정보를 토큰 자체에 저장하느냐 또는 서버에 저장해놓느냐에 따라서 두 가지 종류로 나눌 수 있다.

토큰 자체가 이러한 정보를 갖는 형태를 클레임 기반의 토큰 (Claim based token)이라고 하는데, 근래에 유행하는 JWT (JSON Web Token)이나 SAML 토큰등이 이에 해당한다. 클레임 기반의 토큰이 아닌 경우, 이러한 클레임 정보를 서버에 저장해놓게 되는데, 클라이언트로는 unique한 string만을 리턴해주는 경우이다.

이 서버 기반의 토큰이 현재 일반적으로 가장 많이 사용되는 형태인데, token에 연관되는 정보가 서버에 저장되기 때문에 안전하고, 많은 정보를 저장할 수 있으며, token에 대한 정보를 수정하기가 용이하다. 그러나 서버단에서 별도의 토큰 저장소를 유지해야 하기 때문에 구현 노력이 더 높게 든다. 토큰은 매 API 호출마다 정보를 가지고 와야 하기 때문에, DBMS와 같은 FILE IO 기반의 저장소 보다는 redis, memcached와 같이 메모리 기반의 고속 스토리지를 사용하는 것이 좋다.

클레임 기반의 토큰은 이러한 토큰 저장소가 필요 없다는 장점이 있어서 구현은 용이하지만, 토큰 자체에 클레임 정보가 들어가 있기 때문에, 토큰의 길이가 커지기 때문에 일정 양 이상의 정보를 담기가 어려우며, 한번 발급된 토큰은 변경이 어렵다. 예를 들어 role:admin으로 관리자 권한으로 발급된 토큰은 서버쪽에서 파기가 불가능하기 때문에 토큰 통제가 어렵다는 단점을 가지고 있다. 그래서, 클레임 기반의 토큰을 사용할때는 토큰의 유효기간을 둬서 반드시 강제적으로 토큰을 주기적으로 재발급 받도록 하는 것이 좋다.

  1. Load Balancing & Routing

API Gateway의 가장 주된 기능은 사용자의 요청을 적절한 서비스로 라우팅하는 것이다.

  1. Monitoring & traffic Control

API Gateway는 공통적으로 호출되는 영역인 만큼 로그를 중간에서 수집하기가 용이하다. 또한 API 호출 패턴을 분석하면 사용자의 사용 패턴을 분석할 수 있고 이는 빅데이터 영역과 연계하여 이용할 수 있기 때문에 API 호출 로그는 아주 중요한 자산으로 다뤄지고 있다.

참고)
https://bcho.tistory.com/1005 (MSA 아키텍쳐 구현을 위한 API 게이트웨이의 이해 (API GATEWAY)
https://happycloud-lee.tistory.com/213 ([SC07] Spring Cloud Zuul 이란? )

0개의 댓글