서비스 메시(Service Mesh)란 무엇일까?

2025. 9. 15. 00:03·Istio 공부

서론

최근 마이크로서비스 아키텍처(MSA) 가 확산되면서 서비스 간의 통신과 관리가 점점 복잡해지고 있습니다. 단순히 애플리케이션 로직만 잘 짜는 것으로는 충분하지 않고, 서비스 간 트래픽 제어, 보안, 장애 복구 같은 운영 문제가 핵심 과제로 떠오르고 있습니다. 이 뿐만 아니라 컴퓨터 네트워크는 본질적으로 신뢰할 수 없고, 해킹될 수 있으며, 종종 느려지기도 합니다.

따라서 이번 포스트에서는 MSA가 가진 한계와, 이를 보완하기 위해 등장한 Service Mesh에 대해 살펴보도록 하겠습니다.

 


 

서비스 메시(Service Mesh)?

이러한 배경 속에서 등장한 개념이 바로 서비스 메시(Service Mesh) 입니다.

축구 선수 아닙니다.

서비스 메시 란 애플리케이션 코드에 직접 로직을 넣지 않고, 서비스 간 통신을 담당하는 별도의 인프라 계층을 두어 네트워크 트래픽을 효율적으로 관리하는 기술입니다. 이를 통해 개발자는 비즈니스 로직에만 집중할 수 있고, 운영자는 일관된 방식으로 서비스 전체를 제어할 수 있습니다.

이렇게 서비스 간의 트래픽(통신)을 관리하고, 코드 변경 없이 클러스터 전체의 모든 서비스에 걸쳐 균일하게 안정성(reliability), 관찰 가능성(observability) 및 보안 기능을 추가하기 때문에 복잡한 MSA 환경에서 발생하는 통신 관리, 장애 전파, 추적 불가능성과 같은 문제를 해결하며 최근 많은 기업에서 도입하고 있습니다.

기능

서비스 메시를 사용하면 다음과 같은 기능을 제공하는 서비스 간 네트워크 인프라를 손쉽게 구성할 수 있습니다.

- 서비스 검색(Service Discovery)
- 로드 밸런싱(Load Balancing)
- 서비스 간 인증(Authentication)
- 장애 복구(Fault Tolerance)
- 지표 및 모니터링(Metrics & Monitoring)
- A/B 테스트
- 카나리 배포(Canary Deployment)
- 액세스 제어(Access Control)
- 엔드 투 엔드 암호화 및 인증(End-to-End Encryption & Authentication)

서비스 메시 아키텍처

서비스 메시는 네트워크 계층에서 동작합니다. 즉, 서비스 메시의 구성 요소는 마이크로서비스로 들어오고 나가는 트래픽을 가로채어 요청을 수정하거나 리다이렉션하고, 필요하다면 다른 서비스로 새로운 요청을 생성할 수도 있습니다.

 

 

서비스 메시는 크게 데이터 플레인(Data Plane)과 컨트롤 플레인(Control Plane)으로 구성됩니다.

데이터 플레인은 통신을 실행하는 계층, 컨트롤 플레인은 그 통신 방식을 결정하는 계층입니다.

1. 데이터 플레인 (Data Plane)

데이터 플레인은 서비스 간 모든 인바운드 · 아웃바운드 네트워크 트래픽을 가로채고 제어합니다. 각 Pod(혹은 서비스 인스턴스) 안에 함께 배포되는 Envoy 사이드카 프록시로 구성되며, 다음과 같은 특징을 가집니다.

- 트래픽을 여러 인스턴스로 균등 분산하는 로드 밸런싱 지원
- 요청을 수정하거나 리다이렉션, 라우팅 가능
- 장애 복구(재시도, 서킷 브레이커, 타임아웃 등) 지원
- 서비스 간 통신을 mTLS 기반으로 암호화
- 트래픽에 대한 메트릭 · 로그 · 트레이스 수집
- 게이트웨이(Gateway) 기능을 통해 외부와의 인바운드 · 아웃바운드 트래픽 제어

-> 쉽게 설명하자면 데이터 플레인은 서비스 메시에서 실제로 기능을 수행하는 계층입니다.

2. 컨트롤 플레인 (Control Plane)

컨트롤 플레인은 데이터 플레인에 배포된 프록시들을 중앙에서 관리하고 구성하는 역할을 합니다.

구체적으로는 서비스 간의 위치를 파악할 수 있도록 서비스 검색(Service Discovery) 기능을 제공하며, 요청을 특정 조건에 따라 분기시키는 고급 라우팅 규칙을 정의하고 배포할 수 있습니다. 또한 각 서비스 간 통신이 안전하게 이루어지도록 보안 정책을 적용하고 인증서를 관리합니다.

컨트롤 플레인은 단순히 초기 설정만 담당하는 것이 아니라, 프록시 설정을 런타임에 실시간으로 전달하여 서비스 트래픽을 동적으로 제어할 수 있다는 점이 특징입니다. 이를 통해 운영자는 서비스 간 통신 방식을 코드 변경 없이도 유연하게 관리할 수 있습니다.

서비스 메시 종류

서비스 메시에는 여러 가지 구현체가 존재하지만, 대표적으로 많이 언급되는 것은 Istio와 Linkerd입니다. 두 솔루션은 모두 서비스 메시의 기본 개념(데이터 플레인 + 컨트롤 플레인 구조, 트래픽 제어, 보안, 모니터링 제공)을 따르지만, 철학과 내부 구조에서 차이가 있습니다.

Linkerd

Rust와 Go로 개발된 경량(lightweight) 서비스 메시로 상대적으로 단순한 구조를 지향하며, 성능과 안정성을 우선시합니다. 설치와 운영이 비교적 간단하여 소규모 또는 단순한 MSA 환경에 적합합니다.

Istio

Envoy 프록시를 기반으로 한 기능 중심(feature-rich) 서비스 메시로 고급 트래픽 관리, 세밀한 보안 정책, 강력한 모니터링 및 장애 복구 기능을 지원합니다. 다양한 기업 환경과 대규모 MSA 운영을 고려해 설계되었으며, 설정이 다소 복잡하고 학습 곡선이 높다는 한계가 있지만, 활발한 커뮤니티와 생태계 덕분에 최근 많은 기업에서 널리 사용되고 있습니다.

비교

구분 Linkerd Istio
개발 언어 / 기반 Rust + Go 기반, 자체 프록시 사용 Envoy 프록시 기반
철학 경량(lightweight), 단순성 지향 풍부한 기능(feature-rich), 확장성 지향
주요 강점 빠른 설치, 간단한 운영, 안정성 고급 트래픽 관리, 세밀한 보안, 강력한 모니터링
적합한 환경 소규모/단순 MSA 환경 대규모/복잡한 MSA 환경
생태계 상대적으로 작음 활발한 커뮤니티, 사실상 표준

 

그렇다면 왜 Istio가 서비스 메시의 표준처럼 자리 잡아가고 있고, 선택된 걸까요?
그 이유는 다음과 같습니다.

- 풍부한 기능 지원 : 단순 통신 제어를 넘어, 트래픽 관리, 보안(mTLS), 장애 복구, 관찰 가능성(Observability)까지 종합적으로 제공
- 확장성과 유연성 : 대규모 마이크로서비스 환경에서도 안정적으로 운영 가능
- 활발한 생태계 : CNCF(Cloud Native Computing Foundation) 커뮤니티와 함께 빠르게 발전하고 있으며, 다양한 클라우드 벤더에서 공식적으로 지원
- 실제 적용 사례 풍부 : 글로벌 기업들이 Istio를 채택하면서 사실상 서비스 메시의 표준으로 자리매김

즉, Linkerd는 가볍고 단순하며 빠른 도입에 강점이 있지만, 대규모 MSA 환경에서 필요한 풍부한 기능과 생태계 지원을 고려했을 때 Istio가 더 적합합니다.

 


 

Kiali?

지금까지 서비스 메시의 필요성과 특징, 그리고 데이터 플레인과 컨트롤 플레인의 역할에 대해 살펴보았습니다.

그렇다면 이렇게 복잡한 서비스 메시 환경이 실제로 어떻게 구성되어 있고, 서비스 간 통신이 어떤 방식으로 이루어지는지는 어떻게 확인할 수 있을까요?

바로 이때 필요한 것이 서비스 메시를 시각화하는 도구인 Kiali입니다.

Kiali 개요

Kiali는 서비스 메시 환경을 시각적으로 관찰할 수 있는 도구입니다. 서비스 메시 안의 마이크로서비스와 그 연결 방식을 그래프 형태로 표시하여, 운영자가 메시의 구조와 상태를 직관적으로 이해할 수 있도록 도와줍니다. 다음 이미지는 Kiali 대시보드 예시입니다.

 

 

Kiali는 Istio 기반 서비스 메시의 관찰 기능을 제공합니다. 이를 통해 서비스 메시의 토폴로지를 유추하고, 서비스 간 트래픽 흐름과 상태를 한눈에 파악할 수 있습니다. 또한 회로 차단기 동작, 요청 속도, 지연 시간(latency)과 같은 핵심 지표를 실시간으로 시각화합니다.

Kiali는 애플리케이션, 서비스, 워크로드 등 다양한 수준에서 메트릭을 제공하며, 각 노드나 연결선(edge)에 대해 세부적인 상황별 정보를 확인할 수 있습니다. 더불어 Istio 구성 요소(게이트웨이, 대상 규칙, 가상 서비스, 정책 등)의 유효성 검사 기능을 지원해 잘못된 설정을 사전에 확인할 수도 있습니다.

Kiali 아키텍처

Kiali는 크게 백엔드 애플리케이션과 웹 콘솔로 구성됩니다.

- 백엔드 애플리케이션 : 서비스 메시와 통신하며 데이터를 수집 · 처리하고, 이를 콘솔에 제공합니다.
- 웹 콘솔 : 수집된 데이터를 기반으로 대화형 그래프와 차트를 표시해 사용자가 직관적으로 메시를 이해할 수 있도록 합니다.

또한 Kiali는 보통 Prometheus와 같은 모니터링 시스템, Jaeger 같은 분산 추적 도구, Grafana 같은 대시보드 도구와 함께 통합되어 사용됩니다. 이 조합을 통해 운영자는 서비스 메시의 성능, 트래픽 흐름, 요청 경로 등을 종합적으로 관찰할 수 있습니다.

Kiali 주요 기능

Kiali가 제공하는 핵심 기능은 다음과 같습니다.

- 상태 파악 : 애플리케이션, 서비스, 워크로드 수준에서 문제를 빠르게 식별
- 토폴로지 시각화 : 서비스 간 통신 관계와 트래픽 흐름을 그래프로 표시
- 지표 제공 : 요청 속도, 지연 시간, 오류율 등 주요 성능 지표를 차트로 확인
- 추적 기능 : Jaeger와 연동해 서비스 간 요청 경로를 추적
- 구성 검증 : 주요 Istio 오브젝트(가상 서비스, 대상 규칙 등)에 대한 유효성 검사
- 구성 관리 : 콘솔에서 직접 라우팅 규칙 등의 Istio 구성을 생성·수정·삭제 가능

-> 정리하면, Kiali는 서비스 메시의 관찰 도구(Observability Tool) 로서 토폴로지, 지표, 추적, 검증 기능을 제공하며, 운영자가 메시 환경을 직관적으로 이해하고 안정적으로 운영할 수 있도록 돕습니다.

 


 

분산 추적

마이크로서비스 아키텍처에서는 하나의 사용자 요청을 처리하기 위해 여러 서비스가 순차적 혹은 병렬적으로 호출됩니다. 예를 들어, 사용자가 애플리케이션에서 특정 작업을 수행하면, 그 요청은 인증 서비스, 주문 서비스, 결제 서비스 등 다양한 마이크로서비스를 거쳐야 응답이 완성됩니다. 이렇게 요청이 여러 서비스를 거쳐 실행되는 과정을 분산 트랜잭션이라고 합니다.

이때 요청이 실제로 어떤 경로를 따라갔는지, 어느 구간에서 병목이 발생했는지, 지연이 왜 생겼는지를 파악하는 것이 쉽지 않습니다. 이를 해결하는 기술이 바로 분산 추적(Distributed Tracing) 입니다. 분산 추적은 요청이 지나간 전체 경로를 기록하고 시각화하여, 개발자나 운영자가 시스템의 동작을 직관적으로 이해할 수 있도록 돕습니다.

분산 추적 개요

분산 추적을 통해 얻을 수 있는 대표적인 효과는 다음과 같습니다.

- 분산 트랜잭션 모니터링 : 요청이 어떤 서비스들을 거쳐 처리되었는지 확인
- 성능 및 지연 시간 분석 : 병목 지점을 파악하고 최적화 방향 도출
- 근본 원인 분석(RCA) : 장애나 오류가 발생했을 때 어느 서비스에서 문제가 시작되었는지 추적

이를 위해 많이 사용되는 오픈소스 도구가 Jaeger입니다. Jaeger는 마이크로서비스 간 요청 경로를 추적하고, 이를 시각적으로 보여줍니다.

분산 추적은 일반적으로 Span이라는 단위로 기록됩니다. Span은 요청 처리 과정에서 수행되는 개별 작업을 의미하며, 시작 시간과 소요 시간을 포함합니다. 여러 Span은 계층적으로 연결되어 하나의 Trace를 형성하고, 이를 통해 전체 요청의 흐름과 인과 관계를 이해할 수 있습니다.

-> 정리하면, 분산 추적은 서비스 메시 환경에서 요청의 여정을 추적해 성능 문제와 장애 원인을 분석할 수 있게 해주는 핵심 기술입니다. 특히 Jaeger와 같은 도구는 서비스 메시의 가시성을 한층 강화해, 운영자가 마이크로서비스 아키텍처를 더 안정적으로 관리할 수 있도록 돕습니다.

분산 추적 종류

분산 추적 툴에 대한 종류는 다음과 같습니다.

구분 Jaeger Zipkin
출발점 Uber에서 개발, CNCF 졸업 프로젝트 Twitter에서 시작된 오픈소스 프로젝트
주요 언어/기반 Go로 작성, Envoy·K8s·Istio 등 클라우드 네이티브와 밀접 Java 기반 생태계와 친화적
철학 확장성과 기능 중심 (feature-rich) 단순성과 가벼움 (lightweight)
강점 - 대규모 MSA 환경에 적합
- 고급 기능(샘플링 전략, 태그 기반 분석)
- CNCF 생태계와 자연스러운 통합
- 설치와 구성 간단
- 가벼운 리소스 사용
- Spring, Java 진영에서 친숙
통합성 Prometheus, Grafana, OpenTelemetry 등과 긴밀한 통합 Spring Cloud Sleuth 등 Java 프레임워크와 연동 강점
커뮤니티/생태계 활발하고 글로벌 기업 도입 다수 → 사실상 표준 비교적 정체, 주로 레거시나 소규모 환경에서 여전히 사용
적합한 환경 대규모·복잡한 마이크로서비스 운영 소규모·단순한 환경, Java 중심 프로젝트

-> Zipkin은 가볍고 단순한 추적 도구라는 장점이 있지만, 대규모 환경과 클라우드 네이티브 생태계에서는 Jaeger가 더 적합하며 현재는 사실상 표준으로 자리잡고 있습니다.

 


 

다음 포스팅에서는 API Gateway vs Service Mesh, 즉 L7 게이트웨이와 서비스 메시가 맡는 책임 범위와 차이점에 대해 더 깊이 살펴보도록 하겠습니다.

출처

CLOUD NATIVE GLOSSARY
Red Hat Documentation

'Istio 공부' 카테고리의 다른 글

Istio mTLS 내부 동작 원리 - istiod가 인증서(Cert) 발급·배포·갱신하는 방법  (0) 2025.10.12
Observability의 개념과 필요성  (0) 2025.10.05
Istio에서의 Observability  (0) 2025.09.28
'Istio 공부' 카테고리의 다른 글
  • Istio mTLS 내부 동작 원리 - istiod가 인증서(Cert) 발급·배포·갱신하는 방법
  • Observability의 개념과 필요성
  • Istio에서의 Observability
seoshinehyo
seoshinehyo
seoshinehyo 님의 블로그 입니다.
  • seoshinehyo
    seoshinehyo 님의 블로그
    seoshinehyo
  • 전체
    오늘
    어제
    • 분류 전체보기
      • AWS S3
      • mody
      • umc product team
      • Homeprotector
      • 에러 일기
      • Istio 공부
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
seoshinehyo
서비스 메시(Service Mesh)란 무엇일까?
상단으로

티스토리툴바