[ T I L ] 24.12.28

오세창·2024년 12월 27일

문제

MSA 아키텍처를 학습하면서 문득 의문이 들었다.
게이트웨이는 왜 존재해야 하는데 ?

해결

스프링 MVC 서비스Tomcat 기반으로 쓰레드풀을 사용하여 동기 블로킹 방식으로 운영된다. 이때, 쓰레드풀이 고갈되면 새로운 요청을 처리할 수 없고, 기존 요청이 완료될 때까지 대기해야 한다. 결국, 병목현상이 발생하여 서비스 성능이 저하된다.

반면, 게이트웨이WebFlux 구조와 Netty 서버를 사용하여 비동기 논블로킹 방식으로 운영된다. 이 방식에서는 하나의 쓰레드가 여러 요청을 동시에 처리할 수 있으며, 요청이 완료되지 않아도 다른 요청을 계속 처리할 수 있다. 따라서, 하나의 쓰레드풀로 더 많은 요청을 처리할 수 있게 된다. 그러나 리소스에는 한계가 있기 때문에, 쓰레드풀 고갈의 가능성은 여전히 존재한다.

게이트웨이는 부하 분산의 핵심적인 역할을 한다. 게이트웨이는 서비스로 전달하기 전에 부하를 여러 서버로 분산시킨다. 이를 위해 로드밸런서와 연동하여 요청을 분배하거나, Rate Limiting 을 설정하여 지나치게 많은 요청이 한 번에 들어오는 것을 방지할 수 있다.

게이트웨이를 통해, 뒤에 전달될 서비스들이 대량의 트래픽을 감당할 수 있도록 다양한 전략을 사용할 수 있다. 이러한 전략을 통해, 서비스가 많은 트래픽에 놀라지 않도록 처리할 수 있게 된다.

정리

게이트웨이의 존재 의의

  1. 보안 ⇒ 외부에 노출되는 API 는 하나로 정해진다.

    내부 port 는 막아놓고, 게이트웨 port 만 열어두니까 내부는 안전한 장소가 된다.

  1. 로깅 ⇒ 원래는 각 서비스에서 로그를 모아서 정리를 해야되는데, 모든 요청이 게이트웨이에서 이루어지니까 그냥 여기서 로그를 쭉쭉 뽑아내면 된다.

    전처리, 후처리 필터를 걸어서 응답을 감싸서 처리하기가 좋다.

  1. 로드밸런싱 ⇒ 로드밸런싱이 이제 제일 후순위다.

0개의 댓글