Envoy란 무엇인가 — L7 프록시와 커뮤니케이션 버스
Envoy란 무엇인가 — L7 프록시와 커뮤니케이션 버스
Envoy는 대규모 서비스 지향 아키텍처(SOA)를 위해 설계된 L7 프록시이자 커뮤니케이션 버스예요. "네트워크는 애플리케이션에게 투명해야 한다"는 설계 철학을 바탕으로, 네트워크나 애플리케이션에 문제가 생겼을 때 그 원인을 쉽게 찾아낼 수 있게 만드는 것이 핵심 목표예요. JVM이나 라이브러리로 묶이는 대신 독립된 프로세스로 앱 옆에서 돌며, 애플리케이션은 네트워크 구조를 전혀 몰라도 로컬호스트에 메시지를 주고받기만 하면 돼요. 여러 언어·프레임워크로 이뤄진 서비스 간의 벽을 투명하게 이어주는 게 Envoy의 가장 큰 가치예요.
출처: https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy
아웃 오브 프로세스(Out of process) 아키텍처
Envoy는 자기 완결적인 프로세스로, 모든 애플리케이션 서버 옆에서 함께 실행되도록 설계됐어요. 모든 Envoy가 모여 투명한 통신 메시를 형성하고, 각 애플리케이션은 localhost를 통해 메시지를 주고받으면서 실제 네트워크 토폴로지를 알 필요가 없어요.
- 언어 무관: 하나의 Envoy 배포가 Java, C++, Go, PHP, Python 등 서로 다른 언어로 작성된 서비스들을 하나의 메시로 묶어줘요. 여러 언어·프레임워크를 섞어 쓰는 SOA에서 점점 더 흔해지는 요구죠.
- 빠른 배포: 라이브러리 업그레이드 배포가 고통스러운 것과 달리, Envoy는 인프라 전체에 빠르게 배포·업그레이드할 수 있어요.
L3/L4 필터 아키텍처
Envoy의 핵심은 L3/L4 네트워크 프록시예요. 플러그인 방식의 필터 체인(filter chain) 메커니즘으로 다양한 TCP/UDP 프록시 작업을 수행하는 필터를 작성해 서버에 끼워 넣을 수 있어요. 이미 raw TCP 프록시, UDP 프록시, HTTP 프록시, TLS 클라이언트 인증, Redis, MongoDB, Postgres 등 다양한 필터가 제공돼요.
HTTP L7 필터 아키텍처
HTTP는 현대 애플리케이션의 핵심이라 Envoy는 별도의 HTTP L7 필터 계층을 지원해요. HTTP 커넥션 매니저(HTTP connection manager) 하위 시스템에 HTTP 필터를 끼워 버퍼링, 레이트 리밋(rate limiting), 라우팅/포워딩, DynamoDB 스니핑(sniffing) 같은 작업을 수행할 수 있어요.
일급 HTTP/2 지원과 HTTP/3
HTTP 모드에서 Envoy는 HTTP/1.1과 HTTP/2를 모두 지원하며, 양방향 투명 HTTP/1.1↔HTTP/2 프록시로 동작할 수 있어요. 즉 HTTP/1.1·HTTP/2 클라이언트와 서버의 어떤 조합이든 연결을 이어줄 수 있죠. 권장되는 service-to-service 구성은 Envoy 사이를 모두 HTTP/2로 연결해 지속 연결 메시 위에서 요청·응답을 멀티플렉싱하는 방식이에요.
1.19.0부터는 HTTP/3도 (알파 단계로) 지원해서 HTTP/1.1, HTTP/2, HTTP/3 어느 조합으로든 양방향 변환이 가능해요.
HTTP L7 라우팅
HTTP 모드에서 Envoy는 경로(path), authority, 콘텐츠 타입, 런타임 값 등에 따라 요청을 라우팅·리다이렉트하는 라우팅 하위 시스템을 제공해요. 주로 프론트/엣지 프록시로 쓸 때 유용하지만, 메시 환경에서도 활용돼요.
서비스 디스커버리와 동적 설정
Envoy는 선택적으로 계층형 동적 설정 API(xDS)를 소비해 중앙에서 관리할 수 있어요. 백엔드 클러스터 안의 호스트, 백엔드 클러스터 자체, HTTP 라우팅, 리슨 소켓, 암호화 자재까지 동적으로 갱신받을 수 있죠. 단순한 배포라면 DNS 해석(또는 생략)으로 호스트를 찾고 나머지 계층을 정적 설정 파일로 대체할 수도 있어요.
헬스체크
Envoy 메시를 만들 때 권장하는 방식은 서비스 디스커버리를 결과적으로 일관성(eventually consistent) 있는 과정으로 다루는 거예요. Envoy에는 능동 헬스체크(active health checking) 하위 시스템이 있어 업스트림 서비스 클러스터를 주기적으로 검사하고, 그 결과와 디스커버리 정보를 합쳐 트래픽을 보낼 호스트를 결정해요.
고급 로드밸런싱
Envoy는 라이브러리가 아닌 독립 프록시이기 때문에, 분산 시스템의 복잡한 로드밸런싱 문제를 한 곳에 구현해 어떤 애플리케이션이든 그대로 쓸 수 있어요. 자동 재시도(retries), 서킷 브레이킹(circuit breaking), 외부 레이트 리밋 서비스를 통한 글로벌 레이트 리밋, 요청 섀도잉(shadowing), 아웃라이어 감지(outlier detection)를 지원해요.
프론트/엣지 프록시 지원
엣지에서도 같은 소프트웨어를 쓰면 관측성·운영·서비스 디스커버리·로드밸런싱 알고리즘을 똑같이 재사용할 수 있어요. TLS 터미네이션, HTTP/1.1·HTTP/2·HTTP/3 지원, HTTP L7 라우팅까지 갖춰 현대 웹 애플리케이션의 엣지 프록시로 적합해요.
최고 수준의 관측성
Envoy의 일차 목표는 네트워크를 투명하게 만드는 거지만, 네트워크·애플리케이션 레벨의 문제도 잡아야 해요. 모든 하위 시스템에 강력한 통계(stats) 지원이 있고, 현재 statsd(및 호환 프로바이더) 싱크를 기본으로 지원하며 관리 포트에서도 통계를 볼 수 있어요. 서드파티 프로바이더를 통한 분산 트레이싱도 지원해요.