์ธํ…”๋ฆฌ์ œ์ด(IntelliJ)๋กœ K8s ํŒŒ๋“œ(Pod) ์‹ค์‹œ๊ฐ„ Java Remote Debugging ๋ฐฉ๋ฒ•

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ํ™˜๊ฒฝ์˜ ์„œ๋น„์Šค์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ์ „์— QA ๊ฒ€์ฆ ๊ณผ์ •์„ ๊ฑฐ์น  ๊ฒƒ์ด๋‹ค. ๊ฒ€์ฆ ๊ณผ์ • ์ค‘์— ๋ฐœ์ƒํ•œ ์ด์Šˆ์˜ ์›์ธ์„ ํ™•์ธ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋•Œ๋กœ๋Š” ์ถ”๊ฐ€์ ์ธ ๋กœ๊ทธ๋ฅผ ์ฝ”๋“œ์— ์ถ”๊ฐ€ํ•ด์„œ ๋‹ค์‹œ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฐฐํฌ ํ›„์— ๋กœ๊ทธ ๋‚ด์šฉ์„ ํ™•์ธํ•˜๋Š” ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ถ”๊ฐ€ํ•œ ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด์„œ๋„ ๋ช…ํ™•ํžˆ ์›์ธ ํŒŒ์•…์ด ์•ˆ๋œ๋‹ค๋ฉด? ๋˜ ๋‹ค์‹œ ์˜์‹ฌ๋˜๋Š” ๋ถ€๋ถ„์„ ์ฐพ์•„์„œ ๋กœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋˜ ๋ฐฐํฌํ•ด์„œ ํ™•์ธํ•˜๊ณ … ์‹œ๊ฐ„์ ์œผ๋กœ ๊ทธ๋ฆฌ๊ณ  ์ผ์˜ ๋Šฅ๋ฅ  ์ธก๋ฉด์—์„œ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด ์•„๋‹ ์ˆ˜ ์—†๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ๋น„ํšจ์œจ์„ ๋‹จ๋ฒˆํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” Remote Debugging ์„ ์ ์šฉํ•˜์—ฌ Pod ๋‚ด์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋กœ์ปฌ์—์„œ ๋””๋ฒ„๊น… ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•œ๋‹ค. (ft. IntelliJ)

์‚ฌ์ „์กฐ๊ฑด

์›๊ฒฉ ๋””๋ฒ„๊น… (Remote Debugging)์„ ์œ„ํ•ด์„œ๋Š” ๋กœ์ปฌ์—์„œ ํ˜„์žฌ ๋นŒ๋“œํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„์— ์ ์šฉ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋กœ์ปฌ ์ฝ”๋“œ์™€ ์„œ๋ฒ„์— ์ ์šฉ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฒ„์ „์ด ๋‹ค๋ฅด๋‹ค๋ฉด ์šฐ์„  ๋กœ์ปฌ ์ฝ”๋“œ๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ํ•œ๋ฒˆ์€ ํ•„์š”ํ•˜๋‹ค.

Remote Debugging ์„ค์ • ์˜ต์…˜

์›๊ฒฉ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ํ”„๋กœ์ ํŠธ์™€ ๋””๋ฒ„๊ฑฐ๊ฐ€ ๋˜๋Š” ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์›๊ฒฉ ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ์ฃผ๋ฌธ์„ ๊ฑธ์–ด์•ผ ํ•˜๋Š”๋ฐ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005
Plaintext

์œ„ ์˜ต์…˜์€ java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰ ์˜ต์…˜์œผ๋กœ ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.

  • -agentlib: JVM์—๊ฒŒ ๋„ค์ดํ‹ฐ๋ธŒ ์—์ด์ „ํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋กœ๋“œํ•˜๋ผ๋Š” JVM ํ‘œ์ค€ ํ”Œ๋ž˜๊ทธ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด ์ž๋ฐ” ์‹คํ–‰์‹œ ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ณด์กฐ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ฐ™์ด ๋„์šฐ๋ผ๋Š” ๋œป์ด๋‹ค.
  • jdwp: ๋กœ๋“œํ•  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ด๋ฆ„์ด๋‹ค. Java Debug Wire Protocol์˜ ์•ฝ์ž๋‹ค. IDE(IntelliJ ๋“ฑ)์™€ ์‹คํ–‰ ์ค‘์ธ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์—์„œ ํ†ต์‹  ๊ทœ์•ฝ(ํ”„๋กœํ† ์ฝœ)์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • transport=dt_socket: ๋””๋ฒ„๊ฑฐ์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์†Œ์ผ“ ํ†ต์‹ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ฒ ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • server=y: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์„œ๋ฒ„ ์—ญํ• ์„ ํ•˜์—ฌ ๋””๋ฒ„๊ฑฐ(IDE)์˜ ์—ฐ๊ฒฐ์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒ ๋‹ค๋Š” ๋œป์ด๋‹ค.
  • suspend=n: ๋””๋ฒ„๊ฑฐ๊ฐ€ ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ์ผ์‹œ ์ •์ง€ํ• ์ง€ ์ •ํ•˜๋Š” ์˜ต์…˜์ด๋‹ค. y๋Š” ์ผ์‹œ ์ •์ง€๋ฅผ ํ•˜๊ณ  n์€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค. ๋ถ€ํŒ… ์‹œ์ ์˜ ์—๋Ÿฌ๋ฅผ ์žก์„ ๋•Œ y๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค. ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ์—๋Š” n์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
    (suspend=y ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ livenessProbe๋‚˜ readinessProbe๊ฐ€ ์‹คํŒจํ•˜์—ฌ ํŒŒ๋“œ๊ฐ€ ๊ณ„์† ์žฌ์‹œ์ž‘ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” livenessProbe, readinessProbe๋ฅผ ์ž ์‹œ ๋น„ํ™œ์„ฑํ™” ํ•ด์•ผ ํ•œ๋‹ค.)
  • address=*:5005: 5005ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ‘*’๋Š” ๋ชจ๋“  IP์—์„œ ์ ‘์†์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ๋‹ค. (๋ณด์•ˆ์„ ์œ„ํ•ด์„œ ๋‚ด๋ถ€๋ง์—์„œ๋งŒ ์—ฌ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค)

Remote Debugging IDE(IntelliJ) ์„ค์ •

Remote Debugging (์›๊ฒฉ ๋””๋ฒ„๊น…) ์œ„ํ•œ IntelliJ ์„ค์ •์„ ์•Œ์•„๋ณด์ž. IntelliJ ์„ค์ •์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค. ๋””๋ฒ„๊น… ํ•˜๊ณ ์ž ํ•˜๋Š” ํ”„๋กœ์ ํŠธ๋ฅผ ์—ด์–ด์„œ ์›๊ฒฉ ๋””๋ฒ„๊น… ์„ค์ •(Remote JVM Debug)์„ ์ถ”๊ฐ€ ํ•˜๋ฉด ๋œ๋‹ค.

Run/Debug Configurations(Edit Configurations) >> '+' ์„ ํƒ >> Remote JVM Debug
Plaintext

์œ„ ์ˆœ์„œ๋กœ Remote JVM Debug ์„ค์ •์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

IntelliJ Remote Debugging ์„ค์ • ์ถ”๊ฐ€ ํ™”๋ฉด
IntelliJ Remote JVM Debug ์ถ”๊ฐ€ ํ™”๋ฉด

Remote JVM Debug Configuration์„ ์ถ”๊ฐ€ํ•˜๋ฉด ‘Command line arguments for remote JVM’ ํ•ญ๋ชฉ์€ ์ž๋™์œผ๋กœ ์ž…๋ ฅ๋œ๋‹ค. ํŠน๋ณ„ํ•œ ์ผ ์—†์œผ๋ฉด ๊ทธ๋ƒฅ ์จ๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.
Host ์ •๋ณด๋Š” ๋งŒ์•ฝ Pod์˜ ์ ‘์† IP๊ฐ€ ์™ธ๋ถ€๋กœ ์˜คํ”ˆ๋œ ๊ณต์ธ ์•„์ดํ”ผ๋ผ๋ฉด ํ•ด๋‹น ์•„์ดํ”ผ๋ฅผ ์„ค์ •ํ•ด ์ฃผ๋ฉด ๋˜๊ฒ ์ง€๋งŒ K8s ๋‚ด์— ๊ฐ€๋ ค์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ localhost๋กœ ์ง€์ •ํ•˜๊ณ  port forwarding์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

Remote Debugging ์„œ๋ฒ„ (Pod) ์„ค์ •

์šฐ๋ฆฌ๋Š” K8s์—์„œ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” Pod ๋‚ด์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋””๋ฒ„๊น… ํ•  ๊ฒƒ์ด๋ฏ€๋กœ Pod์—๋„ Remote Debugging์„ ์œ„ํ•œ ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.
Spring Boot Image๋‚˜ JIB๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€๋กœ ๋นŒ๋“œํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฏธ์ง€ ๋นŒ๋“œ ์‹œ์ ์— JvmFlag ์˜ต์…˜์œผ๋กœ
‘-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005’ ๋ฅผ ์ถ”๊ฐ€ํ•ด๋„ ๋˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์šด์˜ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋˜๋Š” ์ด๋ฏธ์ง€์™€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ ํ•˜๊ฑฐ๋‚˜ ๋นŒ๋“œ ์Šคํฌ๋ฆฝํŠธ ๋‚ด์—์„œ ํ…Œ์ŠคํŠธ์™€ ํ”„๋กœ๋•์…˜์œผ๋กœ ๋ถ„๊ธฐ๋ฅผ ํ•ด์•ผํ•˜๋ฏ€๋กœ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ณดํ†ต์€ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ์šด์˜ ํ™˜๊ฒฝ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ณ  ๊ฐ๊ฐ deployment manifest๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋ฏ€๋กœ ํ…Œ์ŠคํŠธ์šฉ deployment manifest์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค. ๋ฌผ๋ก  ๋””๋ฒ„๊น…์„ ์ ์šฉํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์ด๋ผ๊ณ  ํ•˜๋”๋ผ๋„ ํ•ญ์ƒ Remote Debugging ์„ค์ •์„ ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ๋„ฃ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•„์š”์‹œ์—๋งŒ ํ•ด๋‹น ์„ค์ •์„ ๋„ฃ๊ณ  ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

์„ค์ • ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
spec > template > spec > containers ํ•ญ๋ชฉ์„ ์ฐพ์•„ ์•„๋ž˜ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

containers:
  # ๋””๋ฒ„๊น… ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ถ”๊ฐ€
  - env:
    - name: JAVA_TOOL_OPTIONS
      value: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005"
    ports:
      - containerPort: <์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋น„์ŠคํฌํŠธ>
      - containerPort: 5005
YAML

์ฃผ์˜ํ•  ์ 

-agentlib ์˜ต์…˜์œผ๋กœ ๋””๋ฒ„๊น…์„ ํ™œ์„ฑํ™” ํ•˜๋ฉด ์„ฑ๋Šฅ์˜ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ livenessProbe์™€ readinessProbe์˜ initialDelaySeconds, timeoutSecond, periodSecond, failureThreshold ๊ฐ’์„ ๋Š˜๋ ค์ฃผ์ž. ์ˆ˜์น˜๊ฐ€ ์ž‘๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด livenessProbe, readinessProbe ์‹คํŒจ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žฌ์‹œ์ž‘ ๋  ์ˆ˜ ์žˆ๋‹ค.
์›๊ฒฉ ๋””๋ฒ„๊น…์„ ๋‹ค ํ–ˆ์œผ๋ฉด deployment manifest๋ฅผ ๊ธฐ์กด ์„ค์ •์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ๋„ ์žŠ์ง€๋ง์ž!

Deployment ์ ์šฉ

deployment์˜ manifest๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ ๋กœ์ปฌ์— YAML ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น YAML ํŒŒ์ผ์„ ์ˆ˜์ • ํ›„ ‘kubectl apply -f <ํŒŒ์ผ๋ช…>‘์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ‘kubectl edit deployment <deployment ์ด๋ฆ„>‘ ์œผ๋กœ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.

# ์‹ค์‹œ๊ฐ„ ๋ฆฌ์†Œ์Šค ์ˆ˜์ •
kubectl edit deployment <deployment ์ด๋ฆ„>

# ๋กœ์ปฌ์˜ yaml์„ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ
kubectl apply -f <deployment ํŒŒ์ผ๋ช…>
Bash

kubectl edit ๋ช…๋ น์œผ๋กœ deployment manifest๋ฅผ ์ˆ˜์ •ํ•œ ๊ฒฝ์šฐ ์ €์žฅํ•˜๋ฉด ๋ฐ”๋กœ deployment๊ฐ€ ์ ์šฉ๋œ๋‹ค.

๋กœ์ปฌ -> Debugger Port Forwarding

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋””๋ฒ„๊น… ํ•˜๊ณ ์ž ํ•˜๋Š” ํŒŒ๋“œ(Pod)๊ฐ€ K8s ๋‚ด์— ์ˆจ๊ฒจ์ ธ ์žˆ์„ ๋•Œ๋Š” ๋ฐ”๋กœ ์ ‘์†ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ ๋กœ์ปฌ์—์„œ Debugger ๋Œ€์ƒ์ด ๋˜๋Š” Pod๋กœ ์ง์ ‘ Port Forwarding ํ•˜์—ฌ ์ ‘์†ํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์“ด๋‹ค.

kubectl port-forward deployment/my-app 5005:5005
Bash

์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๊ฐ€ ์•Œ์•„์„œ ์‹คํ–‰ ์ค‘์ธ ํŒŒ๋“œ ํ•˜๋‚˜๋ฅผ ๊ณจ๋ผ์„œ ์—ฐ๊ฒฐํ•ด ์ค€๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๊ฐœ์˜ Pod๊ฐ€ deployment๋œ ๊ฒฝ์šฐ service๋ฅผ ํ†ตํ•ด์„œ ํŠธ๋ž˜ํ”ฝ์ด ๋กœ๋“œ๋ฐธ๋Ÿฐ์‹ฑ ๋˜๋Š” ๊ฒฝ์šฐ port forwording๋œ ํŒŒ๋“œ์— ํŠธ๋ž˜ํ”ฝ์ด ๋“ค์–ด๊ฐˆ ๋•Œ๊นŒ์ง€ ์‹œ๋„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
๋งŒ์•ฝ Postman์œผ๋กœ ์ง์ ‘ ์š”์ฒญ์„ ๋‚ ๋ฆด ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ํŠน์ • ํŒŒ๋“œ๋ฅผ ํ•˜๋‚˜ ๊ณจ๋ผ์„œ ์ง์ ‘ port forwarding์„ ๊ฑธ์–ด์ฃผ๊ณ  ์„œ๋น„์Šค ํฌํŠธ๋„ port forwarding์„ ๊ฑธ์–ด์ฃผ๊ณ  ํ•ด๋‹น pod๋กœ ์ง์ ‘ ํŠธ๋ž˜ํ”ฝ์ด ์ „๋‹ฌ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

kubectl port-forward pod/my-app-xxxxxxx-xxxxx 5005:5005 8080:8080
Bash

์„œ๋น„์Šค ํฌํŠธ๊ฐ€ 8080์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ 5005 ๋””๋ฒ„๊ฑฐ ํฌํŠธ์™€ 8080 ์„œ๋น„์Šค ํฌํŠธ ๋ชจ๋‘ port forwarding ํ•˜๋Š” ๋ช…๋ น์ด๋‹ค.
Postman์—์„œ http://localhost:8080/xxx/xxx์™€ ๊ฐ™์ด ์ง์ ‘ ์š”์ฒญ์„ ๋‚ ๋ ค port forwarding ๋˜๊ณ  ์žˆ๋Š” Pod๋กœ ์ง์ ‘ ์š”์ฒญ์„ ๋‚ ๋ฆฐ๋‹ค.

๋‚˜์˜ ์ƒ๊ฐ

์›๊ฒฉ ๋””๋ฒ„๊น…์€ ํ•ญ์ƒ ํ™œ์„ฑํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ ํŠน์ˆ˜ํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ธ ๋งŒํผ ์›๊ฒฉ ๋””๋ฒ„๊น…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ƒฅ deployment ๋˜๋Š” pod ์ˆ˜๋ฅผ 1๊ฐœ๋กœ ์„ค์ •ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ํ•˜๋Š” ๊ฒƒ์ด ๊น”๋”ํ•  ๊ฒƒ ๊ฐ™๋‹ค.

๋””๋ฒ„๊น… ๋ ›์ธ  ๊ณ 

K8s deployment๊ฐ€ ์‹คํ–‰๋œ ์ดํ›„์— IDE(IntelliJ) ์—์„œ ์ถ”๊ฐ€ํ–ˆ๋˜ Remote JVM Debug๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋œ๋‹ค.

IntelliJ Remote Debugging ์‹คํ–‰
IntelliJ ์›๊ฒฉ ๋””๋ฒ„๊น… ์‹คํ–‰

์›๊ฒฉ ๋””๋ฒ„๊น… ์—ฐ๊ฒฐ์ด ์ž˜ ๋˜์—ˆ๋‹ค๋ฉด

Connected to the target VM, address: 'localhost:5005', transport: 'socket'
Plaintext

์™€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ถœ๋ ฅ๋˜๋ฉด ์—ฐ๊ฒฐ์€ ์„ฑ๊ณต๋œ ๊ฒƒ์ด๋‹ค. ์ด์ œ ๋‚ด ๋กœ์ปฌ IDE ํ™˜๊ฒฝ์—์„œ ๋งˆ์Œ๊ป ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ ์žก๊ณ  ํ™•์ธํ•ด ๋ณด์ž!!


์ง€๊ธˆ๊นŒ์ง€ ์›๊ฒฉ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด ๋ณด์•˜๋‹ค. K8s ํ™˜๊ฒฝ์—์„œ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ์—ˆ์ง€๋งŒ ์ด๋Š” ์˜จํ”„๋ ˆ๋ฏธ์Šค ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์„œ๋ฒ„์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ธฐ๋™ ์Šคํฌ๋ฆฝํŠธ์— ๋งˆ๋ฒ•๊ฐ™์€
‘-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=*:5005’
์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋ฉด ๋œ๋‹ค. ๋ฌผ๋ก  ์ด ๊ฒฝ์šฐ์—๋Š” ๋ฐฉํ™”๋ฒฝ์— 5005 ํฌํŠธ๊ฐ€ ๋ง‰ํ˜€์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธ์ด ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค.
์›๊ฒฉ ๋””๋ฒ„๊น…์€ ์›์ธ์„ ์ฐพ๊ธฐ ์–ด๋ ค์šด ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์šฐ๋ฆฌ์˜ ์‹œ๊ฐ„์„ ์ƒ๋‹นํžˆ ์ ˆ์•ฝํ•ด ์ฃผ๋Š” ์ข‹์€ ๋„๊ตฌ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.