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

일단 Gateway란 무엇일까?
네트워크 상에서 서로 다른 통신망, 프로토콜끼리 통신이 가능하게 하는 컴퓨터/소프트웨어이다.
즉, 종류가 다른 하드웨어, 소프트웨어간 통신을 담당하는 장치이다.(7계층)
따라서 API Gateway는 요청이 들어왔을 때 적절한 곳으로 요청을 보내 주는 역할을 한다고 보면된다.
ex. user 정보처리 → user API 로 보냄
그럼 어떻게 올바른 곳으로 보내는지는 로드 밸런서를 알아보면서 알아보자

만약 한 서버에 트래픽이 집중된다면 해당 서버에 걸리는 부하가 클 것이기에, Load Balancer 적절하게 각 서버로 트래픽을 여러 서버에 분산시켜 고가용성 및 성능을 보장해주는 역할을 한다. (4계층, 7계층)
여기서 MSA 모듈은 각 서버에 해당하기에 로드밸런서는 여러 모듈로 데이터를 전송해야한다.
그럼 로드밸런서는 어떻게 주소를 알고 보내주는 걸까?
💡레지스트리? 들어본거 같은데…
CS공부를 하며 종종 나오는데 비슷한 역할을 한다.
윈도우 레지스트리: OS의 각종 걸정 값, 정보를 담고 있는 저장소
서비스 인스턴스의 위치를 추적하고 관리하는 중앙 저장소로 각 모듈의 주소를 저장하고 있다.
로드밸런서는 레지스트리의 주소를 보고 각 요청에 맞는 모듈로 데이터를 보내게 된다.
즉 레지스트리는 각 모듈의 전화번호를 기록한 전화번호부 라고 생각하면 된다.
첫번째 이유
MSA 장점을 살릴 수 없다. 만약 각 서버들이 수정될 때마다 주소값을 수동으로 바꾸게 된다면 유지보수 비용이 증가하게 된다. 그렇게 되면 Scale-out이 빈번하게 일어날텐데 이럴때마다 엄청난 노동을 해야하기 때문이다.
💡Scale-out? Scale-up?
Scale-out : 서버를 추가하여 시스템 확장
****Scale-up : 기존 서버 사양 업그레이드
따라서 레지스트리(Service Registry)가 서비스의 위치 저장/관리 전담을 하게 한다.
2번째 이유
A 서비스에 부하가 실리게 된다면, 해당 서비스의 부하를 줄이기 위해 여러 인스턴스를 만들게 될 것이다. 그럼 해당 인스턴스들의 주소가 여러개일텐데 이럴때 레지스트리에 주소를 저장해놓게 된다.
그럼 마지막으로 레지스트리 구현 방법들에 대해 알아보자.

주소를 알아와주고(질의) 통신까지 알아서 해준다
장점: 로드밸런서(추상화) - 서비스 레지스트리(구현체)
단점: 네트워크 hop이 증가하여 상대적으로 속도가 느려진다

서비스 레지스트리(구현체)를 직접 사용한다 ex.Spring Cloud Netfilx Eureka
장점: 구현하기 쉽고 레퍼런스가 많이 존재한다
단점: 각 서비스임에도 서비스 레지스트리에 모두 의존하게 된다
→polyglot의 경우, 환경에 따라 여러번 구현해야한다.
💡폴리그랏(polyglot)
각 서비스가 다른 언어/프레임워크를 사용하는 것