[네트워크] API Gateway & LoadBalancer

하윤철·2024년 8월 6일

가끔 보면 이 둘을 동일시 하고 쓰는 경우가 있지만 엄연히 다른 용어이다.

API Gateway


일단 Gateway란 무엇일까?

Gateway

네트워크 상에서 서로 다른 통신망, 프로토콜끼리 통신이 가능하게 하는 컴퓨터/소프트웨어이다.

즉, 종류가 다른 하드웨어, 소프트웨어간 통신을 담당하는 장치이다.(7계층)

따라서 API Gateway는 요청이 들어왔을 때 적절한 곳으로 요청을 보내 주는 역할을 한다고 보면된다.

ex. user 정보처리 → user API 로 보냄

그럼 어떻게 올바른 곳으로 보내는지는 로드 밸런서를 알아보면서 알아보자

Load Balancer


만약 한 서버에 트래픽이 집중된다면 해당 서버에 걸리는 부하가 클 것이기에, Load Balancer 적절하게 각 서버로 트래픽을 여러 서버에 분산시켜 고가용성 및 성능을 보장해주는 역할을 한다. (4계층, 7계층)

여기서 MSA 모듈은 각 서버에 해당하기에 로드밸런서는 여러 모듈로 데이터를 전송해야한다.

그럼 로드밸런서는 어떻게 주소를 알고 보내주는 걸까?

Registry

💡레지스트리? 들어본거 같은데…
CS공부를 하며 종종 나오는데 비슷한 역할을 한다.
윈도우 레지스트리: OS의 각종 걸정 값, 정보를 담고 있는 저장소

서비스 인스턴스의 위치를 추적하고 관리하는 중앙 저장소로 각 모듈의 주소를 저장하고 있다.

로드밸런서는 레지스트리의 주소를 보고 각 요청에 맞는 모듈로 데이터를 보내게 된다.

즉 레지스트리는 각 모듈의 전화번호를 기록한 전화번호부 라고 생각하면 된다.

굳이 레지스트리에 저장해야해? 그냥 바로 보내면 되잖아

첫번째 이유
MSA 장점을 살릴 수 없다. 만약 각 서버들이 수정될 때마다 주소값을 수동으로 바꾸게 된다면 유지보수 비용이 증가하게 된다. 그렇게 되면 Scale-out이 빈번하게 일어날텐데 이럴때마다 엄청난 노동을 해야하기 때문이다.

💡Scale-out? Scale-up?
Scale-out : 서버를 추가하여 시스템 확장
****Scale-up : 기존 서버 사양 업그레이드

따라서 레지스트리(Service Registry)가 서비스의 위치 저장/관리 전담을 하게 한다.

2번째 이유

A 서비스에 부하가 실리게 된다면, 해당 서비스의 부하를 줄이기 위해 여러 인스턴스를 만들게 될 것이다. 그럼 해당 인스턴스들의 주소가 여러개일텐데 이럴때 레지스트리에 주소를 저장해놓게 된다.

그럼 마지막으로 레지스트리 구현 방법들에 대해 알아보자.

Server-Side Discovery

주소를 알아와주고(질의) 통신까지 알아서 해준다

장점: 로드밸런서(추상화) - 서비스 레지스트리(구현체)

단점: 네트워크 hop이 증가하여 상대적으로 속도가 느려진다

Client-Side Discovery


서비스 레지스트리(구현체)를 직접 사용한다 ex.Spring Cloud Netfilx Eureka

장점: 구현하기 쉽고 레퍼런스가 많이 존재한다

단점: 각 서비스임에도 서비스 레지스트리에 모두 의존하게 된다
→polyglot의 경우, 환경에 따라 여러번 구현해야한다.

💡폴리그랏(polyglot)
각 서비스가 다른 언어/프레임워크를 사용하는 것

profile
선순환을 만드는 개발자

0개의 댓글