๐Ÿ“Œ ๋ถ„์‚ฐ ์ถ”์  (Distributed Tracing) ์ •๋ฆฌ

ghgh2505380ยท2026๋…„ 3์›” 21์ผ

MSA(Microservice Architecture)

๋ชฉ๋ก ๋ณด๊ธฐ
8/13

๐Ÿ“– ๊ฐœ์š”

  • ๋ถ„์‚ฐ ์ถ”์  (Distributed Tracing)
    ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค ๊ฐ„ ์š”์ฒญ ํ๋ฆ„์„ ์ถ”์ ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ธฐ์ˆ 

  • ์‚ฌ์šฉ ์ด์œ 

์„œ๋น„์Šค๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋ถ„๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ
์š”์ฒญ ํ๋ฆ„์ด ๋ณต์žกํ•ด์ ธ ๋ฌธ์ œ ์›์ธ ํŒŒ์•… ์–ด๋ ค์›€

โ†’ ์š”์ฒญ ํ๋ฆ„์„ ํ•œ๋ˆˆ์— ํŒŒ์•… ๊ฐ€๋Šฅ

  • ํ•ด๊ฒฐ ๋ฌธ์ œ

  • ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ ๊ด€๊ณ„ ์ถ”์ 

  • ์„ฑ๋Šฅ ๋ณ‘๋ชฉ ์ง€์  ํŒŒ์•…

  • ์žฅ์•  ์›์ธ ๋ถ„์„

  • ํ•ต์‹ฌ ํŠน์ง•

  • ์š”์ฒญ ํ๋ฆ„ ์‹œ๊ฐํ™”

  • ์„œ๋น„์Šค ๊ฐ„ ๊ด€๊ณ„ ๋ถ„์„

  • ํŠธ๋žœ์žญ์…˜ ๋‹จ์œ„ ์ถ”์  ๊ฐ€๋Šฅ


โš™๏ธ ํ•ต์‹ฌ ๊ฐœ๋…

1๏ธโƒฃ Trace (ํŠธ๋ ˆ์ด์Šค)

  • ํ•˜๋‚˜์˜ ์š”์ฒญ ์ „์ฒด ํ๋ฆ„ ํ‘œํ˜„
  • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ํ˜ธ์ถœ ํฌํ•จ
  • ํ•˜๋‚˜์˜ Trace ID ๊ณต์œ 
  • ์ „์ฒด ์š”์ฒญ ๋‹จ์œ„ ์ถ”์  ๊ฐ€๋Šฅ

2๏ธโƒฃ Span (์ŠคํŒฌ)

  • ํ•˜๋‚˜์˜ ์ž‘์—… ๋‹จ์œ„
  • ์„œ๋น„์Šค ๋‚ด๋ถ€ ์ฒ˜๋ฆฌ ๋˜๋Š” ์™ธ๋ถ€ ํ˜ธ์ถœ ๋‹จ์œ„
  • ์‹œ์ž‘ ์‹œ๊ฐ„ / ์ข…๋ฃŒ ์‹œ๊ฐ„ ํฌํ•จ
  • ๋ถ€๋ชจ-์ž์‹ ๊ตฌ์กฐ๋กœ ๊ณ„์ธต ๊ตฌ์„ฑ ๊ฐ€๋Šฅ

3๏ธโƒฃ Context (์ปจํ…์ŠคํŠธ)

  • ์„œ๋น„์Šค ๊ฐ„ ์ „๋‹ฌ๋˜๋Š” ์ถ”์  ์ •๋ณด
  • Trace ID / Span ID ํฌํ•จ
  • ์ „์ฒด ํ๋ฆ„ ์—ฐ๊ฒฐ ์—ญํ•  ์ˆ˜ํ–‰

4๏ธโƒฃ Micrometer

  • Spring ๊ธฐ๋ฐ˜ ๋ฉ”ํŠธ๋ฆญ ์ˆ˜์ง‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • Prometheus, Grafana ์—ฐ๋™ ๊ฐ€๋Šฅ
  • ๋ถ„์‚ฐ ์ถ”์  ๊ธฐ๋Šฅ ์ œ๊ณต

5๏ธโƒฃ Zipkin

  • ํŠธ๋ ˆ์ด์Šค ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ
  • ์„œ๋น„์Šค ํ˜ธ์ถœ ํ๋ฆ„ UI ์ œ๊ณต
  • Trace / Span ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ ํ™•์ธ ๊ฐ€๋Šฅ

๐Ÿ” ๋™์ž‘ ์›๋ฆฌ

Client โ†’ Order Service โ†’ Product Service

  • ์š”์ฒญ ๋ฐœ์ƒ ์‹œ Trace ์ƒ์„ฑ
  • ๊ฐ ์„œ๋น„์Šค ํ˜ธ์ถœ๋งˆ๋‹ค Span ์ƒ์„ฑ
  • Context๋ฅผ ๋‹ค์Œ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ Zipkin์œผ๋กœ ์ „์†ก

Zipkin

  • Trace ์ˆ˜์ง‘ ๋ฐ ์ €์žฅ
  • ํ˜ธ์ถœ ํ๋ฆ„ ์‹œ๊ฐํ™”
  • ์„œ๋น„์Šค ๊ฐ„ ๊ด€๊ณ„ ๋ถ„์„

๐Ÿ’ป ์ฝ”๋“œ ์˜ˆ์‹œ

1๏ธโƒฃ Zipkin ์„œ๋ฒ„ ์‹คํ–‰

docker run -d -p 9411:9411 openzipkin/zipkin

2๏ธโƒฃ ์˜์กด์„ฑ ์„ค์ •

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'io.micrometer:micrometer-tracing-bridge-brave'
    implementation 'io.github.openfeign:feign-micrometer'
    implementation 'io.zipkin.reporter2:zipkin-reporter-brave'
}

3๏ธโƒฃ application.yml ์„ค์ •

management:
  zipkin:
    tracing:
      endpoint: "http://localhost:9411/api/v2/spans"
  tracing:
    sampling:
      probability: 1.0
  • sampling 1.0 โ†’ ๋ชจ๋“  ์š”์ฒญ ์ถ”์ 
  • Zipkin endpoint โ†’ Trace ๋ฐ์ดํ„ฐ ์ „์†ก

๐Ÿš€ Zipkin ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. Zipkin ์ ‘์†
  1. RUN QUERY ํด๋ฆญ
  • Trace ๋ชฉ๋ก ํ™•์ธ ๊ฐ€๋Šฅ
  1. Spans ๊ฐ’ ํ™•์ธ
  • ์˜ˆ: Spans 3 โ†’ ์„œ๋น„์Šค 3๋‹จ๊ณ„ ํ˜ธ์ถœ ์˜๋ฏธ
  1. SHOW ํด๋ฆญ

โ†’ ์ „์ฒด ํ˜ธ์ถœ ํ๋ฆ„ ํ™•์ธ ๊ฐ€๋Šฅ

Order Service โ†’ Product Service ํ˜ธ์ถœ ๊ณผ์ • ์‹œ๊ฐํ™”


Zipkin ํ™œ์šฉ ํฌ์ธํŠธ

  • ์ „์ฒด ์„œ๋น„์Šค ํ˜ธ์ถœ ํ๋ฆ„ ํ™•์ธ ๊ฐ€๋Šฅ
  • ์–ด๋–ค ์„œ๋น„์Šค๊ฐ€ ๋А๋ฆฐ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
  • Span๋ณ„ ์†Œ์š” ์‹œ๊ฐ„ ๋น„๊ต ๊ฐ€๋Šฅ

๐Ÿ‘‰ ์‘๋‹ต ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ Span ํ™•์ธ
๐Ÿ‘‰ ๋ณ‘๋ชฉ ์„œ๋น„์Šค ์œ„์น˜ ํŒŒ์•…
๐Ÿ‘‰ ์„ฑ๋Šฅ ๊ฐœ์„  ํฌ์ธํŠธ ๋„์ถœ


๐Ÿง  TIL (Today I Learned)

  • ๋ถ„์‚ฐ ์ถ”์ ์€ Trace / Span / Context ๊ตฌ์กฐ๋กœ ๋™์ž‘
  • Zipkin์„ ํ†ตํ•ด ์„œ๋น„์Šค ํ˜ธ์ถœ ํ๋ฆ„์„ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ
  • Spans ๊ฐœ์ˆ˜๋กœ ํ˜ธ์ถœ ๋‹จ๊ณ„ ํŒŒ์•… ๊ฐ€๋Šฅ
  • ์‘๋‹ต ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ Span์„ ๊ธฐ์ค€์œผ๋กœ ๋ณ‘๋ชฉ ๋ถ„์„ ๊ฐ€๋Šฅ
  • MSA ํ™˜๊ฒฝ์—์„œ ๋””๋ฒ„๊น… ๋ฐ ์„ฑ๋Šฅ ๋ถ„์„์— ํ•„์ˆ˜ ๋„๊ตฌ
profile

0๊ฐœ์˜ ๋Œ“๊ธ€