API 게이트웨이는 클라이언트 요청을 받아서 백엔드 서비스로 전달하고 다시 클라이언트에세 응답을 반환하는 역할을 하는 서버이다. 주로 마이크로 서비스 아키텍처에서 사용되고 있다.
주요 기능으로는 클라이언트의 요청을 다양한 백엔드 서비스로 라우팅하고 트래픽을 제어하며, 요청 데이터를 변환하거나 필터링하여 백엔드 서비스가 필요한 형식으로 전달할 수 있다.
또한, 여러 마이크로서비스의 응답을 조합해서 단일 응답으로 반환할 수 있고, 인증 및 권한 부여, IP 화이트 리스트 등 보안기능을 통해 백엔드 서버를 보호할 수 있다.
대표적인 툴로는 Amazon API Gateway, kong 등이 있다.
로드밸런서는 들어오는 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 균형있게 유지시키는 장치나 소프트웨어를 말한다. 시스템의 가용성과 확장성, 그리고 성능을 보장하는데 중요한 역할을 한다.
주요 기능으로는 특정 서버에 과부하가 걸리지 않도록 트래픽을 분산시키고, 서버의 상태를 모니터링하고, 서버 중 하나가 장애를 일으키면 나머지 서버들이 요청을 처리할 수 있게 해서 가용성을 높힌다.
또한, 동일한 클라이언트 요청이 항상 같은 서버로 라우팅 되도록 하여 세션을 유지하고, SSL 암호화를 로드밸런서에서 종료함으로써 백엔드 서버의 부하를 줄일 수 있다.
대표적인 툴로는 Amazon Elasic Load Balancing (ELB), NGINX 등이 있다.
🌟 추가 질문
📍 API 게이트웨이가 마이크로 서비스에서 사용된다고 했는데, 그렇다면 어떤 상황이면 이 API 게이트웨이가 필요 없을지?
API 게이트웨이는 해당 요청을 어느 서비스로 전달을 해야할지 결정한다. 라우팅이라고도 하며, API 게이트웨이의 존재 이유이다.
프로젝트가 마이크로 서비스가 되면 서비스 별로 서버가 나눠지게 되고, 이때 요청이 들어오면 어떤 서비스로 라우팅을 할 지 결정해주는 역할로 볼 수 있다.
그렇기 때문에 모든 서버가 다 같은 서비스를 제공한다면 필요가 없다. (이때는 트래픽을 분산시킬 수 있는 로드밸런서가 적합하다.)
라우팅 이 외는 부가적인 기능으로 볼 수 있다. 예를 들면, 로드밸런싱이나 보안적인 기능, 그리고 서킷브레이커라고 해서 모든 문제가 생기면 그냥 API 게이트웨이트를 닫아 접속을 막을 수도 있다.
그리고 Rate Limit(레이트 리미팅)이라고 해서 특정 엔드포인트의 요청에 한 유저나 서비스 사용자가 얼마나 자주 요청을 날릴 수 있는지 제한을 두는 기능도 존재한다.
이 기능으로 사용자마다 요금 정책을 적용해 높은 등급의 회원은 서비스를 좀 더 많이 제공할 수 있고, 라우팅을 이용해 높은 등급의 회원은 좀 더 성능이 좋은 서버로 보내서 빠른 서비스를 제공할 수도 있다.
📍 로드밸런서에서 가장 복잡한 로직은 무엇일까?
로드밸런서는 동일한 여러 서버에서 네트워크 트래픽 분산시키는 역할이다. 그렇기 때문에 균일하게 요청을 분산시키는 알고리즘이 중요하다고 볼 수 있다.
가장 기본적인 알고리즘으로는 라운드 로빈(순서대로 하나씩 보내는 방식)이 존재한다. 하지만 이 방식을 사용했을 때 문제점은 서버마다 스펙이 다를 경우, 요청을 처리하는 시간이 모두 다를 수 있다. 따라서 성능에 따라 맞춰 보낼 필요가 있다. 이 외에도 한국에서 오는 요청은 한국쪽으로 보내고 미국이면 미국으로 보내는 등 여러가지 상황이 존재할 수 있다.
📍 AWS에서는 이 로드밸런서가 대표적으로 L4 로드밸런서와 L7 로드밸런서가 존재한다. 이 차이는 무엇일까?
네트워크에서 OSI 7계층의 단계로 볼 수 있고, 각각의 로드밸런서는 특정 계층에서 네트워크 트래픽을 분배하는 방식이 다르다.
L4는 OSI 모델의 4계층 전송 계층에서 작동하며, TCP/UDP 프로토콜을 기반으로 트래픽을 분산시킨다. 주로 IP 주소와 포트를 기준으로 라우팅 결정을 내리고, 패킷 수준에서 트래픽을 처리하므로 빠르지만, 세부적인 트래픽 제어는 불가능하다.
L7는 OSI 모델의 7계층 애플리케이션 계층에서 작동하며, HTTP/HTTPS와 같은 애플리케이션 프로토콜을 기반으로 트래픽을 분산시킨다. 따라서 헤더와 URL, 쿠키 등의 정보를 기반으로 트래픽을 세밀하게 제어할 수 있고, 요청의 내용에 따라 트래픽을 라우팅할 수 있어 세부적인 라우팅 규칙을 설정할 수도 있다.
비용 측면을 보면 당연히 L4가 저렴하지만, 빠른 트래픽 처리를 요구하는 상황은 보통 처리할 양이 많은 경우가 대부분이기 때문에 오히려 단가는 낮을 수 있어도 볼륨으로 보면 비쌀 수 있다.