Post

Service Registry, Service Discovery, Sidecar, Service Mesh

Service Registry, Service Discovery, Sidecar, Service Mesh

๐Ÿฅ‘ ๋“ค์–ด๊ฐ€๋ฉฐ

MSA ํ™˜๊ฒฝ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋กœ ๋‚˜๋ˆ„์–ด ์šด์˜ํ•œ๋‹ค. ์„œ๋น„์Šค๊ฐ€ ๋‚˜๋‰˜๋ฉด ๊ฐ ์„œ๋น„์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋ฐฐํฌ๋˜๊ณ  ํ™•์žฅ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋™์‹œ์— ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์–ด๋–ป๊ฒŒ ์•ˆ์ •์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๊ฐ€ ์ค‘์š”ํ•œ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

๋‹จ์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์—์„œ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ๋กœ ๋๋‚˜๋˜ ์ผ์ด MSA์—์„œ๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์ด ๋œ๋‹ค. ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ๊ณ , ๋А๋ ค์งˆ ์ˆ˜ ์žˆ๊ณ , ๋Œ€์ƒ ์„œ๋น„์Šค์˜ ์œ„์น˜๋„ ๊ณ„์† ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ ์ปจํ…Œ์ด๋„ˆ์™€ Kubernetes ํ™˜๊ฒฝ์—์„œ๋Š” Pod๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์‚ฌ๋ผ์ง€๋ฉด์„œ IP๊ฐ€ ๊ณ„์† ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์—, ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • IP๋ฅผ ์ง์ ‘ ์•Œ๊ณ  ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์€ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๊ทธ๋ž˜์„œ MSA์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์งˆ๋ฌธ์ด ์ƒ๊ธด๋‹ค.

  • ํ˜ธ์ถœํ•  ์„œ๋น„์Šค์˜ ์œ„์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฐพ์„ ๊ฒƒ์ธ๊ฐ€?
  • ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์–ด๋–ป๊ฒŒ ์šฐํšŒํ•˜๊ฑฐ๋‚˜ ๋น ๋ฅด๊ฒŒ ์‹คํŒจ์‹œํ‚ฌ ๊ฒƒ์ธ๊ฐ€?
  • ์ธ์ฆ, ์•”ํ˜ธํ™”, ๋กœ๊น…, ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์–ด๋””์—์„œ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?
  • ์ด๋Ÿฐ ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์— ๋ฐ˜๋ณตํ•ด์„œ ๋„ฃ์–ด์•ผ ํ•˜๋Š”๊ฐ€?

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด ์งˆ๋ฌธ๋“ค์ด Service Registry, Service Discovery, Sidecar Proxy, Sidecar Bridge, Service Mesh, Sidecarless Service Mesh๋กœ ์–ด๋–ป๊ฒŒ ์ด์–ด์ง€๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด๋ ค ํ•œ๋‹ค.


MSA์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์ด ์–ด๋ ค์šด ์ด์œ 

MSA์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๋ถ„๋ฆฌ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ๋ฌธ ์„œ๋น„์Šค๊ฐ€ ๊ฒฐ์ œ ์„œ๋น„์Šค, ์žฌ๊ณ  ์„œ๋น„์Šค, ๋ฐฐ์†ก ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

flowchart LR
    Order[Order Service] --> Payment[Payment Service]
    Order --> Inventory[Inventory Service]
    Order --> Shipping[Shipping Service]

์ด ๊ตฌ์กฐ์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์€ ๋‹จ์ˆœํžˆ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.

  • ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋Š˜๊ฑฐ๋‚˜ ์ค„์–ด๋“ ๋‹ค.
  • ์žฅ์• ๊ฐ€ ๋‚œ ์ธ์Šคํ„ด์Šค๋Š” ํ˜ธ์ถœ ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • ๋ฐฐํฌ ์ค‘์—๋Š” ๊ตฌ๋ฒ„์ „๊ณผ ์‹ ๋ฒ„์ „ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•จ๊ป˜ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜ธ์ถœ ์ง€์—ฐ, timeout, retry, circuit breaker ๊ฐ™์€ ์ •์ฑ…์ด ํ•„์š”ํ•˜๋‹ค.
  • ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ํ˜ธ์ถœํ–ˆ๋Š”์ง€ ์ถ”์ ํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰, MSA์˜ ์–ด๋ ค์›€์€ ์„œ๋น„์Šค๋ฅผ ๋‚˜๋ˆ„๋Š” ๊ฒƒ ์ž์ฒด๋ณด๋‹ค ๋‚˜๋‰œ ์„œ๋น„์Šค๋“ค์ด ๋„คํŠธ์›Œํฌ ์œ„์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ˜‘๋ ฅํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ๋ฐ ์žˆ๋‹ค.


Service Registry

Service Registry๋Š” ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค์˜ ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ๋‹ค.

์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹คํ–‰๋˜๋ฉด ์ž์‹ ์˜ ์ •๋ณด๋ฅผ registry์— ๋“ฑ๋กํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ health check์— ์‹คํŒจํ•˜๋ฉด registry์—์„œ ์ œ๊ฑฐ๋œ๋‹ค.

๋“ฑ๋ก๋˜๋Š” ์ •๋ณด๋Š” ๋ณดํ†ต ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • service name
  • instance id
  • IP
  • port
  • health status
  • metadata
flowchart TB
    Payment1[Payment Instance 1] --> Registry[Service Registry]
    Payment2[Payment Instance 2] --> Registry
    Payment3[Payment Instance 3] --> Registry

    Registry --> Info[payment service instances]

์˜ˆ๋ฅผ ๋“ค์–ด payment-service๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์„ธ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋–  ์žˆ๋‹ค๋ฉด, registry๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค.

1
2
3
4
payment-service
  - 10.0.1.10:8080 healthy
  - 10.0.1.11:8080 healthy
  - 10.0.1.12:8080 unhealthy

ํด๋ผ์ด์–ธํŠธ๋Š” ๋” ์ด์ƒ ํŠน์ • IP๋ฅผ ํ•˜๋“œ์ฝ”๋”ฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋Œ€์‹  registry๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‚ด์•„ ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์„ ์–ป๊ฑฐ๋‚˜, registry์™€ ์—ฐ๋™๋œ discovery ์ฒด๊ณ„๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ ๋Œ€์ƒ์„ ์ฐพ๋Š”๋‹ค.

Spring Cloud Netflix Eureka, Consul, ZooKeeper, Kubernetes Service์™€ DNS ๋“ฑ์ด ์ด๋Ÿฐ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.


Service Discovery

Service Discovery๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ˜ธ์ถœํ•  ์„œ๋น„์Šค์˜ ์‹ค์ œ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค.

Registry๊ฐ€ ์„œ๋น„์Šค ์œ„์น˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์ด๋ผ๋ฉด, Discovery๋Š” ๊ทธ ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ํ˜ธ์ถœ ๋Œ€์ƒ์„ ์ฐพ๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

Service Discovery ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.


Client-side Discovery

Client-side Discovery์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ registry๋ฅผ ์ง์ ‘ ์กฐํšŒํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก์„ ๊ฐ€์ ธ์˜จ ๋’ค, ๊ทธ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์„œ ์ง์ ‘ ํ˜ธ์ถœํ•œ๋‹ค.

sequenceDiagram
    participant App as Order Service
    participant Registry as Service Registry
    participant Payment as Payment Service

    App->>Registry: payment-service ์œ„์น˜ ์กฐํšŒ
    Registry-->>App: ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก ๋ฐ˜ํ™˜
    App->>Payment: ์„ ํƒํ•œ ์ธ์Šคํ„ด์Šค๋กœ ์ง์ ‘ ์š”์ฒญ

์ด ๋ฐฉ์‹์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค์Œ ์ฑ…์ž„์„ ๊ฐ€์ง„๋‹ค.

  • registry ์กฐํšŒ
  • load balancing
  • retry
  • timeout
  • ์žฅ์•  ์ธ์Šคํ„ด์Šค ์ œ์™ธ

์žฅ์ ์€ ๊ตฌ์กฐ๊ฐ€ ๋น„๊ต์  ๋‹จ์ˆœํ•˜๊ณ , ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ํ˜ธ์ถœ ๋Œ€์ƒ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ํ˜ธ์ถœ ์ •์ฑ…์ด ๊ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋“ค์–ด๊ฐ€๊ธฐ ์‰ฝ๋‹ค.

์„œ๋น„์Šค๊ฐ€ Java, Kotlin, Go, Node.js์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ธ์–ด๋ณ„๋กœ ๋™์ผํ•œ discovery, retry, circuit breaker ์ •์ฑ…์„ ๋งž์ถ”๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.


Server-side Discovery

Server-side Discovery์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ registry๋ฅผ ์ง์ ‘ ์กฐํšŒํ•˜์ง€ ์•Š๋Š”๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” load balancer๋‚˜ proxy๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์ค‘๊ฐ„ ๊ณ„์ธต์ด registry๋ฅผ ์กฐํšŒํ•ด ์ ์ ˆํ•œ ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…ํ•œ๋‹ค.

sequenceDiagram
    participant App as Order Service
    participant LB as Load Balancer / Proxy
    participant Registry as Service Registry
    participant Payment as Payment Service

    App->>LB: payment-service ์š”์ฒญ
    LB->>Registry: ์ธ์Šคํ„ด์Šค ์กฐํšŒ
    Registry-->>LB: ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก ๋ฐ˜ํ™˜
    LB->>Payment: ์ ์ ˆํ•œ ์ธ์Šคํ„ด์Šค๋กœ ๋ผ์šฐํŒ…

์ด ๋ฐฉ์‹์—์„œ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ๋ชฐ๋ผ๋„ ๋œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ๊ณ ์ •๋œ endpoint๋งŒ ๋ฐ”๋ผ๋ณด๊ณ , ์‹ค์ œ ์ธ์Šคํ„ด์Šค ์„ ํƒ์€ proxy๋‚˜ load balancer๊ฐ€ ๋‹ด๋‹นํ•œ๋‹ค.

Kubernetes์˜ Service๊ฐ€ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋‹ค. Pod IP๋Š” ๊ณ„์† ๋ฐ”๋€” ์ˆ˜ ์žˆ์ง€๋งŒ, ํด๋ผ์ด์–ธํŠธ๋Š” payment-service ๊ฐ™์€ Kubernetes Service ์ด๋ฆ„์œผ๋กœ ํ˜ธ์ถœํ•œ๋‹ค. Kubernetes ๋‚ด๋ถ€ DNS์™€ kube-proxy๊ฐ€ ์‹ค์ œ Pod๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „๋‹ฌํ•œ๋‹ค.


Sidecar Proxy

Service Discovery๋งŒ์œผ๋กœ ๋ชจ๋“  ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ์—๋Š” discovery ์™ธ์—๋„ ๋งŽ์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค.

  • retry
  • timeout
  • circuit breaker
  • load balancing
  • rate limiting
  • mTLS
  • ์ธ์ฆ/์ธ๊ฐ€
  • access log
  • metric
  • distributed tracing

์ด ๊ธฐ๋Šฅ์„ ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ง์ ‘ ๊ตฌํ˜„ํ•˜๋ฉด ์ค‘๋ณต์ด ์ปค์ง„๋‹ค. ๋˜ํ•œ ์–ธ์–ด๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋‹ค๋ฅด๋ฉด ๋™์ผํ•œ ์ •์ฑ…์„ ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

Sidecar Proxy๋Š” ์ด๋Ÿฐ ๊ณตํ†ต ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ–์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด์ด๋‹ค.

Sidecar๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์™€ ํ•จ๊ป˜ ๋ฐฐํฌ๋˜๋Š” ๋ณด์กฐ ์ปจํ…Œ์ด๋„ˆ๋‹ค. Kubernetes์—์„œ๋Š” ๋ณดํ†ต ํ•˜๋‚˜์˜ Pod ์•ˆ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ปจํ…Œ์ด๋„ˆ์™€ proxy ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•จ๊ป˜ ๋‘”๋‹ค.

flowchart LR
    subgraph PodA[Order Pod]
        AppA[Order App]
        ProxyA[Sidecar Proxy]
    end

    subgraph PodB[Payment Pod]
        ProxyB[Sidecar Proxy]
        AppB[Payment App]
    end

    AppA --> ProxyA
    ProxyA --> ProxyB
    ProxyB --> AppB

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์›๋ž˜ ํ•˜๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์€ sidecar proxy๋ฅผ ๊ฑฐ์ณ ๋‚˜๊ฐ€๊ณ , ์ƒ๋Œ€ ์„œ๋น„์Šค์—์„œ๋„ sidecar proxy๋ฅผ ๊ฑฐ์ณ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•˜๊ณ , ๋„คํŠธ์›Œํฌ ๊ณตํ†ต ๊ธฐ๋Šฅ์€ proxy๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


Sidecar Bridge

Sidecar Bridge๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์‚ฌ์ด์— ์žˆ๋Š” ํ†ต์‹  ์ฐจ์ด๋ฅผ sidecar๊ฐ€ ํก์ˆ˜ํ•˜๋Š” ํŒจํ„ด์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์ˆœํ•œ HTTP API๋งŒ ํ˜ธ์ถœํ•˜๊ณ  ์‹ถ์ง€๋งŒ, ์‹ค์ œ ์™ธ๋ถ€ ์‹œ์Šคํ…œ์€ gRPC, message queue, legacy TCP protocol, ์ธ์ฆ ํ† ํฐ ๊ฐฑ์‹ , connection pool ๊ด€๋ฆฌ ๊ฐ™์€ ๋ณต์žกํ•œ ๋ฐฉ์‹์„ ์š”๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋•Œ sidecar๊ฐ€ bridge ์—ญํ• ์„ ํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

flowchart LR
    App[Application] --> Bridge[Sidecar Bridge]
    Bridge --> External[External System]

Sidecar Bridge๊ฐ€ ๋งก์„ ์ˆ˜ ์žˆ๋Š” ์—ญํ• ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • protocol ๋ณ€ํ™˜
  • ์ธ์ฆ ํ† ํฐ ๊ด€๋ฆฌ
  • connection pool ๊ด€๋ฆฌ
  • legacy system ํ˜ธ์ถœ ๋ฐฉ์‹ ์บก์Аํ™”
  • ๊ณตํ†ต ์—๋Ÿฌ ์ฒ˜๋ฆฌ
  • logging, metric ์ˆ˜์ง‘

์ฆ‰, Sidecar Proxy๊ฐ€ ์ฃผ๋กœ ์„œ๋น„์Šค ๊ฐ„ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ ์ œ์–ด์— ์ดˆ์ ์„ ๋‘”๋‹ค๋ฉด, Sidecar Bridge๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ํŠน์ • ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์‚ฌ์ด์˜ ํ†ต์‹  ๋ณต์žก๋„๋ฅผ ๊ฐ์ถ”๋Š” ๋ฐ ์ดˆ์ ์„ ๋‘”๋‹ค.

๋‘˜ ๋‹ค ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ–์œผ๋กœ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค๋Š” ์ ์—์„œ๋Š” ๊ฐ™๋‹ค.


Service Mesh

Sidecar Proxy๊ฐ€ ์„œ๋น„์Šค ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด๋ผ๋ฉด, Service Mesh๋Š” ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์˜ sidecar proxy๋ฅผ ํ•˜๋‚˜์˜ ๋„คํŠธ์›Œํฌ ๊ณ„์ธต์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.

์„œ๋น„์Šค ๋ฉ”์‹œ์—์„œ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์ด proxy๋ฅผ ํ†ตํ•ด ํ๋ฅธ๋‹ค. ์ด proxy๋“ค์˜ ์ง‘ํ•ฉ์„ Data Plane์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด proxy๋“ค์—๊ฒŒ ์ •์ฑ…๊ณผ ์„ค์ •์„ ๋‚ด๋ ค์ฃผ๋Š” ๊ด€๋ฆฌ ๊ณ„์ธต์„ Control Plane์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

flowchart TB
    Control[Control Plane]

    subgraph DataPlane[Data Plane]
        P1[Proxy]
        P2[Proxy]
        P3[Proxy]
    end

    Control --> P1
    Control --> P2
    Control --> P3

    App1[Service A] --> P1
    P1 --> P2
    P2 --> App2[Service B]
    P1 --> P3
    P3 --> App3[Service C]

Service Mesh์˜ ํ•ต์‹ฌ์€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ธํ”„๋ผ ๊ณ„์ธต์—์„œ ๋‹ค๋ฃฌ๋‹ค๋Š” ์ ์ด๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

  • ์„œ๋น„์Šค ๊ฐ„ mTLS
  • traffic routing
  • canary release
  • retry, timeout, circuit breaker
  • fault injection
  • rate limiting
  • access log
  • metric
  • distributed tracing
  • policy enforcement

์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ์„œ๋น„์Šค์˜ 10% ํŠธ๋ž˜ํ”ฝ๋งŒ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ๋ณด๋‚ด๊ฑฐ๋‚˜, ํŠน์ • ์š”์ฒญ์— timeout ์ •์ฑ…์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜, ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ mTLS๋กœ ์•”ํ˜ธํ™”ํ•˜๋Š” ์ผ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Istio, Linkerd, Consul Connect ๊ฐ™์€ ๋„๊ตฌ๋“ค์ด Service Mesh๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.


Service Mesh๊ฐ€ ํ•ด๊ฒฐํ•˜๋Š” ๋ฌธ์ œ

์„œ๋น„์Šค ๋ฉ”์‹œ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋‹จ์ˆœํžˆ proxy๋ฅผ ๋ถ™์ด๊ธฐ ์œ„ํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ •์ฑ…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌํ•˜๊ณ , ์ „์ฒด ์‹œ์Šคํ…œ์— ์ผ๊ด€๋˜๊ฒŒ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค.


1. ๊ณตํ†ต ๊ธฐ๋Šฅ์˜ ์ค‘๋ณต ์ œ๊ฑฐ

์„œ๋น„์Šค๋งˆ๋‹ค retry, timeout, circuit breaker, metric ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ๋„ฃ์œผ๋ฉด ์ค‘๋ณต์ด ๋ฐœ์ƒํ•œ๋‹ค. ๋˜ํ•œ ์„œ๋น„์Šค๋งˆ๋‹ค ๊ตฌํ˜„ ๋ฐฉ์‹์ด ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Service Mesh๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฐ ์ •์ฑ…์„ proxy ๊ณ„์ธต์—์„œ ๊ณตํ†ต์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


2. ์–ธ์–ด์™€ ํ”„๋ ˆ์ž„์›Œํฌ ๋…๋ฆฝ์„ฑ

MSA์—์„œ๋Š” ๋ชจ๋“  ์„œ๋น„์Šค๊ฐ€ ๊ฐ™์€ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. Java ์„œ๋น„์Šค๋Š” Resilience4j๋ฅผ ์“ฐ๊ณ , Go ์„œ๋น„์Šค๋Š” ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๊ณ , Node.js ์„œ๋น„์Šค๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ retry๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์ •์ฑ…์„ ๋งž์ถ”๊ธฐ ์–ด๋ ต๋‹ค. Service Mesh๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ–์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ ์„œ๋น„์Šค ๊ตฌํ˜„ ์–ธ์–ด์™€ ๊ด€๊ณ„์—†์ด ๊ฐ™์€ ์ •์ฑ…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.


3. ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ

์„œ๋น„์Šค๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์žฅ์•  ์ง€์ ์„ ์ฐพ๊ธฐ ์–ด๋ ต๋‹ค. ์š”์ฒญ ํ•˜๋‚˜๊ฐ€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋ฅผ ๊ฑฐ์ณ ์‹คํŒจํ–ˆ์„ ๋•Œ, ์–ด๋””์—์„œ ์ง€์—ฐ์ด ์ƒ๊ฒผ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

Service Mesh๋Š” proxy๋ฅผ ํ†ต๊ณผํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ์„ ๊ธฐ๋ฐ˜์œผ๋กœ metric, log, trace๋ฅผ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ ๊ด€๊ณ„์™€ ์ง€์—ฐ, ์—๋Ÿฌ์œจ์„ ๋” ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.


4. ๋ณด์•ˆ

๋‚ด๋ถ€ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ๋„ ์•ˆ์ „ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. Service Mesh๋Š” ์„œ๋น„์Šค ๊ฐ„ mTLS๋ฅผ ์ ์šฉํ•ด ํŠธ๋ž˜ํ”ฝ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ , ์„œ๋น„์Šค identity๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ‘๊ทผ ์ •์ฑ…์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋งˆ๋‹ค ์ธ์ฆ์„œ ๋ฐœ๊ธ‰, ๊ฐฑ์‹ , ๊ฒ€์ฆ ๋กœ์ง์„ ์ง์ ‘ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ ์ด ์ค‘์š”ํ•˜๋‹ค.


Sidecar ๊ธฐ๋ฐ˜ Service Mesh์˜ ํ•œ๊ณ„

Sidecar ๊ธฐ๋ฐ˜ Service Mesh๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ ๋น„์šฉ๋„ ์žˆ๋‹ค. ๋ชจ๋“  Pod์— proxy ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

flowchart TB
    subgraph Pod1[Pod 1]
        App1[App]
        Proxy1[Proxy]
    end

    subgraph Pod2[Pod 2]
        App2[App]
        Proxy2[Proxy]
    end

    subgraph Pod3[Pod 3]
        App3[App]
        Proxy3[Proxy]
    end

๋Œ€ํ‘œ์ ์ธ ํ•œ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • Pod๋งˆ๋‹ค proxy๊ฐ€ ์ถ”๊ฐ€๋˜์–ด CPU, memory ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•œ๋‹ค.
  • proxy ์„ค์ •๊ณผ lifecycle์„ ํ•จ๊ป˜ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŠธ๋ž˜ํ”ฝ์ด proxy๋ฅผ ํ•œ ๋ฒˆ ๋” ๊ฑฐ์น˜๋ฏ€๋กœ latency๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • sidecar injection, upgrade, debugging์ด ์šด์˜ ๋ณต์žก๋„๋ฅผ ๋†’์ธ๋‹ค.
  • ์ž‘์€ ๊ทœ๋ชจ์˜ ์„œ๋น„์Šค์—๋Š” ๊ณผํ•œ ๊ตฌ์กฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ Service Mesh๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ ๋„์ž…ํ•˜๊ธฐ๋ณด๋‹ค, ์‹ค์ œ๋กœ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ •์ฑ…์„ ์ค‘์•™์—์„œ ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ๊ฐ€ ์žˆ๋Š”์ง€ ๋จผ์ € ๋ด์•ผ ํ•œ๋‹ค.


Sidecarless Service Mesh

Sidecarless Service Mesh๋Š” ์„œ๋น„์Šค๋งˆ๋‹ค sidecar proxy๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ , ์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ ค๋Š” ์ ‘๊ทผ์ด๋‹ค.

sidecar๋ฅผ ์—†์• ๋ฉด Pod๋งˆ๋‹ค proxy๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฏ€๋กœ resource overhead์™€ ์šด์˜ ๋ณต์žก๋„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

flowchart LR
    App1[Service A] --> NodeProxy[Node / Ambient Proxy]
    App2[Service B] --> NodeProxy
    NodeProxy --> App3[Service C]

Sidecarless ๋ฐฉ์‹์€ ๊ตฌํ˜„์ฒด๋งˆ๋‹ค ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด node ๋‹จ์œ„์˜ proxy๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, CNI/eBPF๋ฅผ ํ™œ์šฉํ•ด ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€๋กœ์ฑ„๊ฑฐ๋‚˜, L4์™€ L7 ์ฒ˜๋ฆฌ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์žˆ๋‹ค.

์ค‘์š”ํ•œ ๋ฐฉํ–ฅ์€ ๊ฐ™๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Pod์— sidecar๋ฅผ ์ฃผ์ž…ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ๊ณตํ†ต ๋„คํŠธ์›Œํฌ ์ •์ฑ…์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ–์—์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • sidecar ๊ธฐ๋ฐ˜ mesh์˜ resource overhead๋ฅผ ์ค„์ธ๋‹ค.
  • mesh ๋„์ž…๊ณผ ์šด์˜ ๋ถ€๋‹ด์„ ๋‚ฎ์ถ˜๋‹ค.

Istio Ambient Mesh๋Š” sidecarless service mesh ํ๋ฆ„์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ์กด Istio๋Š” Pod๋งˆ๋‹ค Envoy sidecar๋ฅผ ์ฃผ์ž…ํ•˜๋Š” ๋ฐฉ์‹์ด ์ผ๋ฐ˜์ ์ด์—ˆ์ง€๋งŒ, Ambient Mesh๋Š” sidecar ์—†์ด mesh ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ–ˆ๋‹ค.


Sidecar Mesh์™€ Sidecarless Mesh ๋น„๊ต

๊ตฌ๋ถ„Sidecar ๊ธฐ๋ฐ˜ MeshSidecarless Mesh
Proxy ์œ„์น˜๊ฐ Pod ๋‚ด๋ถ€Node ๋˜๋Š” ๋ณ„๋„ ๊ณ„์ธต
Pod ๋ณ€๊ฒฝsidecar injection ํ•„์š”sidecar injection ๋ถˆํ•„์š”
๋ฆฌ์†Œ์Šค ์‚ฌ์šฉPod๋งˆ๋‹ค proxy ๋น„์šฉ ๋ฐœ์ƒproxy ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
ํŠธ๋ž˜ํ”ฝ ์ œ์–ด์„ธ๋ฐ€ํ•œ L7 ์ œ์–ด์— ๊ฐ•ํ•จ๊ตฌํ˜„ ๋ฐฉ์‹์— ๋”ฐ๋ผ L4/L7 ๋ถ„๋ฆฌ
์šด์˜ ๋ณต์žก๋„sidecar lifecycle ๊ด€๋ฆฌ ํ•„์š”sidecar ๊ด€๋ฆฌ ๋ถ€๋‹ด ๊ฐ์†Œ
๋Œ€ํ‘œ ์˜ˆIstio sidecar mode, LinkerdIstio Ambient Mesh ๋“ฑ

Sidecarless Mesh๊ฐ€ ํ•ญ์ƒ ๋” ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. Sidecar ๋ฐฉ์‹์€ ์„œ๋น„์Šค ๋‹จ์œ„๋กœ proxy๊ฐ€ ๋ถ™๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋ž˜ํ”ฝ ์ œ์–ด์™€ ๊ฒฉ๋ฆฌ๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค. ๋ฐ˜๋ฉด sidecarless ๋ฐฉ์‹์€ ์šด์˜ ๋ถ€๋‹ด์„ ์ค„์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ตฌํ˜„์ฒด์˜ ์„ฑ์ˆ™๋„์™€ ์ง€์› ๊ธฐ๋Šฅ์„ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๊ตญ ์„ ํƒ ๊ธฐ์ค€์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์„œ๋น„์Šค ์ˆ˜๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋งŽ์€๊ฐ€?
  • ์„œ๋น„์Šค ๊ฐ„ ๋ณด์•ˆ ์ •์ฑ…์ด ํ•„์š”ํ•œ๊ฐ€?
  • L7 routing, canary, retry ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ๊ฐ€?
  • sidecar์˜ resource overhead๋ฅผ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
  • ์šด์˜ํŒ€์ด mesh๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋””๋ฒ„๊น…ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?


์ „์ฒด ํ๋ฆ„ ์ •๋ฆฌ

์ง€๊ธˆ๊นŒ์ง€์˜ ๊ฐœ๋…์€ ์„œ๋กœ ๋ณ„๊ฐœ์˜ ๊ธฐ์ˆ ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ์‚ฌ์‹ค์€ ๊ฐ™์€ ๋ฌธ์ œ์—์„œ ์ถœ๋ฐœํ•œ๋‹ค.

MSA ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹ ์„ ์–ด๋–ป๊ฒŒ ์•ˆ์ •์ ์ด๊ณ  ์ผ๊ด€๋˜๊ฒŒ ๊ด€๋ฆฌํ•  ๊ฒƒ์ธ๊ฐ€?

์ด ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋‹ต์ด ๋‹จ๊ณ„์ ์œผ๋กœ ๋ฐœ์ „ํ•œ ํ๋ฆ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

flowchart LR
    A[Service Registry] --> B[Service Discovery]
    B --> C[Sidecar Proxy]
    C --> D[Service Mesh]
    D --> E[Sidecarless Service Mesh]

๊ฐ ๊ฐœ๋…์˜ ์—ญํ• ์„ ์งง๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ฐœ๋…์—ญํ• 
Service Registry์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค ์œ„์น˜์™€ ์ƒํƒœ๋ฅผ ์ €์žฅํ•œ๋‹ค.
Service Discoveryํ˜ธ์ถœํ•  ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ๋Š”๋‹ค.
Sidecar Proxy์„œ๋น„์Šค ๊ฐ„ ๋„คํŠธ์›Œํฌ ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ–์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
Sidecar Bridge์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์™ธ๋ถ€ ์‹œ์Šคํ…œ ์‚ฌ์ด์˜ ํ†ต์‹  ๋ณต์žก๋„๋ฅผ ๊ฐ์ถ˜๋‹ค.
Service Mesh์—ฌ๋Ÿฌ proxy๋ฅผ ํ•˜๋‚˜์˜ ํ†ต์‹  ๊ณ„์ธต์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.
Sidecarless Service Meshsidecar ์—†์ด mesh ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด overhead๋ฅผ ์ค„์ธ๋‹ค.


๋งˆ๋ฌด๋ฆฌ

MSA์—์„œ๋Š” ์„œ๋น„์Šค๊ฐ€ ์ž‘๊ฒŒ ๋‚˜๋‰˜๋Š” ๋งŒํผ ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ๋ฌธ์ œ๊ฐ€ ์ปค์ง„๋‹ค. ์ฒ˜์Œ์—๋Š” ์„œ๋น„์Šค ์œ„์น˜๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด Service Registry์™€ Service Discovery๊ฐ€ ํ•„์š”ํ•ด์ง„๋‹ค. ์ดํ›„ retry, timeout, circuit breaker, mTLS, metric, tracing ๊ฐ™์€ ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ๋Š˜์–ด๋‚˜๋ฉด Sidecar Proxy์™€ Service Mesh๊ฐ€ ๋“ฑ์žฅํ•œ๋‹ค.

ํ•˜์ง€๋งŒ Service Mesh๋Š” ๋งŒ๋Šฅ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋‹ค. Sidecar ๊ธฐ๋ฐ˜ mesh๋Š” ๊ฐ•๋ ฅํ•˜์ง€๋งŒ resource overhead์™€ ์šด์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ๊ทผ์—๋Š” sidecarless service mesh์ฒ˜๋Ÿผ mesh์˜ ์žฅ์ ์€ ์œ ์ง€ํ•˜๋ฉด์„œ ๋ถ€๋‹ด์„ ์ค„์ด๋ ค๋Š” ๋ฐฉ์‹๋„ ํ•จ๊ป˜ ๋“ฑ์žฅํ•˜๊ณ  ์žˆ๋‹ค.

๊ฒฐ๊ตญ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋„๊ตฌ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ๊ฒช๋Š” ๋ฌธ์ œ๋‹ค. ์„œ๋น„์Šค ์œ„์น˜ ๊ด€๋ฆฌ๊ฐ€ ๋ฌธ์ œ์ธ์ง€, ์žฅ์•  ์ „ํŒŒ ์ฐจ๋‹จ์ด ๋ฌธ์ œ์ธ์ง€, ๋ณด์•ˆ ์ •์ฑ…์ด ๋ฌธ์ œ์ธ์ง€, ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์ด ๋ฌธ์ œ์ธ์ง€ ๋จผ์ € ๋ด์•ผ ํ•œ๋‹ค. ๊ทธ ๋ฌธ์ œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ Service Discovery, Sidecar, Service Mesh, Sidecarless Mesh ์ค‘ ์ ์ ˆํ•œ ์ˆ˜์ค€์˜ ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

This post is licensed under CC BY 4.0 by the author.