๐Ÿ’ฅ ์‚ฌ์šฉ์ž๊ฐ€ ๊นจ๊ธฐ ์ „์— API๋ฅผ ๋ถ€์ˆด๋ผ. CI/CD๋ฅผ ์œ„ํ•œ ์ž๋™ํ™”๋œ ๋„คํŠธ์›Œํฌ ์นด์˜ค์Šค.

๋ฐœํ–‰: (2025๋…„ 12์›” 22์ผ ์˜ค์ „ 02:46 GMT+9)
5 min read
์›๋ฌธ: Dev.to

Source: Dev.to

์ด์•ผ๊ธฐ: ๋‚ด๊ฐ€ Chaos Proxy๋ฅผ ๋งŒ๋“  ์ด์œ 

์šฐ๋ฆฌ ๋ชจ๋‘ ๊ทธ๋Ÿฐ ๊ฒฝํ—˜์„ ํ•ด๋ดค์„ ๊ฒ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์ด localhost์—์„œ๋Š” ์™„๋ฒฝํžˆ ๋™์ž‘ํ•˜๊ณ , E2E ํ…Œ์ŠคํŠธ๋„ ์šฐ์ˆ˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ํ”„๋กœ๋•์…˜์— ๋ฐฐํฌํ•˜๊ณ  ๋‚˜๋‹ˆ 3G ๋„คํŠธ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋“ค์ด ์•ฑ์ด ๋ฉˆ์ถ”๊ฑฐ๋‚˜, ์ถฉ๋Œํ•˜๊ฑฐ๋‚˜โ€”๊ฐ€์žฅ ์ตœ์•…์ธ ๋‘ ๋ฒˆ ์ฒญ๊ตฌ๋œ๋‹ค๊ณ  ๋ถˆํ‰ํ•ฉ๋‹ˆ๋‹ค.

CI ํŒŒ์ดํ”„๋ผ์ธ์ด 0โ€ฏms ์ง€์—ฐ๊ณผ 100โ€ฏ% ๊ฐ€๋™ ์‹œ๊ฐ„์ด๋ผ๋Š” ํ™˜์ƒ ์†์— ์‚ด๊ณ  ์žˆ๋‹ค๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ๋ชจ๋ฐ”์ผ ์•ฑ๊ณผ ๋ฐฑ์—”๋“œ ๋ฉฑ๋“ฑ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด GitHub Actions์—์„œ โ€œ๋ถˆ๋Ÿ‰ ๋„คํŠธ์›Œํฌโ€ ์ƒํ™ฉ์„ ์ž๋™์œผ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. Playwright์—์„œ ์š”์ฒญ์„ ๋ชจํ‚นํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ Android/iOS ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์—†์—ˆ๊ณ , ๋กœ์ปฌ ํ”„๋ก์‹œ๋ฅผ ์Šคํฌ๋ฆฝํŠธํ™”ํ•˜๊ธฐ๋„ ์–ด๋ ค์› ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ Chaos Proxy๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค โ€” CI/CD๋ฅผ ์œ„ํ•ด ์„ค๊ณ„๋œ ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜, ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ธ” ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค.

์ž‘๋™ ๋ฐฉ์‹

Chaos Proxy๋Š” APIโ€‘first ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์ธํ”„๋ผ๋ฅผ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ƒ์„ฑ โ€“ CI ์Šคํฌ๋ฆฝํŠธ๊ฐ€ API๋ฅผ ํ˜ธ์ถœํ•ด ๊ฒฉ๋ฆฌ๋œ ์ผ์‹œ์ ์ธ ํ”„๋ก์‹œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›๋‹ˆ๋‹ค.
  2. ์—ฐ๊ฒฐ โ€“ E2E ํ…Œ์ŠคํŠธ ํŠธ๋ž˜ํ”ฝ(์›น, Android, iOS)์„ ์ด ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค.
  3. ํŒŒ๊ดด โ€“ API ๋ช…๋ น์„ ๋ณด๋‚ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ง€์—ฐ์„ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜ 503 ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ฑฐ๋‚˜ ํ—ค๋”๋ฅผ ๋ณ€์กฐํ•ฉ๋‹ˆ๋‹ค.

Demo: Simulating 503 Errors in Chrome (Visual)

์ฃผ์š” ๊ธฐ๋Šฅ

  • CI/CD์šฉ API โ€“ ํ”„๋ก์‹œ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑยท์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ฆฌํ•  ์žฅ๊ธฐ ์„œ๋ฒ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  • โ€œRage Clickโ€ ํ…Œ์ŠคํŠธ โ€“ ํŠน์ • ์—”๋“œํฌ์ธํŠธ(์˜ˆ: /api/pay)์— 3โ€ฏ์ดˆ ์ง€์—ฐ์„ ์ฃผ์ž…ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋‘ ๋ฒˆ ํด๋ฆญํ•˜๊ธฐ ์ „์— UI๊ฐ€ ๋ฒ„ํŠผ์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋„ค์ดํ‹ฐ๋ธŒ ๋ชจ๋ฐ”์ผ ์ง€์› โ€“ ๋„คํŠธ์›Œํฌ ๋ ˆ๋ฒจ(HTTP ํ”„๋ก์‹œ)์—์„œ ๋™์ž‘ํ•˜๋ฏ€๋กœ Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‘๋‹ต ํผ์ง• โ€“ JSON ๋ณธ๋ฌธ์„ ์ž๋™์œผ๋กœ ๋ณ€์กฐํ•ด ์•ฑ์ด ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์‚ฌ์šฉ ์˜ˆ

curl์„ ์ด์šฉํ•ด ์ฒดํฌ์•„์›ƒ ํ๋ฆ„์— 503 Service Unavailable ์˜ค๋ฅ˜๋ฅผ ์ฃผ์ž…ํ•ด ๋ณด์„ธ์š”:

curl -X PUT https://api.debuggo.app/v1/sessions/$SESSION_ID/rules \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "rules": [
      {
        "url_pattern": "*/api/checkout",
        "failure_rate": 50,
        "error_code": 503
      }
    ]
  }'

Demo: Automating Network Chaos via Terminal (CLI)

์ฐธ์—ฌ ๋ฐฉ๋ฒ•

ํ˜„์žฌ Public API ๋ฒ ํƒ€๋ฅผ ๊ณต๊ฐœํ–ˆ์œผ๋ฉฐ, โ€œ๋ถˆ์•ˆ์ •ํ•œโ€ ์•ฑ์— ์ง€์นœ QA ์—”์ง€๋‹ˆ์–ด์™€ DevOps ๋‹ด๋‹น์ž๋ฅผ ์ฐพ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌด๋ฃŒ ํ‹ฐ์–ด ์ฒดํ—˜ โ€“ ๋น„์šฉ ์—†์ด ์ง์ ‘ ๋˜๋Š” API๋ฅผ ํ†ตํ•ด ์‹œ์ž‘ํ•ด ๋ณด์„ธ์š”.
  • ์•ฑ์„ ๋ถ€์ˆด๋ผ โ€“ โ€œRage Clickโ€ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์„ธ์š”(์šฐ๋ฆฌ ๋ธ”๋กœ๊ทธ Tipโ€ฏ#5 ์ฐธ๊ณ ).
  • ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต โ€“ ๋‹ค์Œ์— ํ•„์š”ํ•  ํ†ตํ•ฉ ๊ธฐ๋Šฅ์„ ์•Œ๋ ค ์ฃผ์„ธ์š”!

localhost์—๋งŒ ์˜์กดํ•˜์ง€ ๋งˆ์„ธ์š”. ํ˜„์‹ค์„ ํ…Œ์ŠคํŠธํ•˜์„ธ์š”.

Back to Blog

๊ด€๋ จ ๊ธ€

๋” ๋ณด๊ธฐ ยป

์ดˆ๋ณด์ž๋ฅผ ์œ„ํ•œ AIOps ๊ฐ€์ด๋“œ: IT ํŒ€์ด ์•Œ์•„์•ผ ํ•  ๋‚ด์šฉ

ํ˜„๋Œ€ IT ํ™˜๊ฒฝ์€ ์‹œ๋„๋Ÿฝ๊ณ  ๋ณต์žกํ•˜๋ฉฐ ์–ธ์ œ๋‚˜ ๊ฐ€๋™ ์ค‘์ž…๋‹ˆ๋‹ค. Cloud platforms, microservices, containers, ๊ทธ๋ฆฌ๊ณ  hybrid systems๋Š” ์ธ๊ฐ„์ด ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

Regression testing workflow: ์œ„ํ—˜์ด ๋จผ์ € ๋ฆด๋ฆฌ์Šค๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ์œ ์ง€ํ•˜๋Š”์ง€ ํ™•์ธ

TL;DR ์›Œํฌํ”Œ๋กœ์šฐ: ์œ„ํ—˜โ€‘์šฐ์„  ํšŒ๊ท€ ๋ฒ”์œ„ ์„ค์ • โ†’ ๊ณจ๋“ โ€‘ํŒจ์Šค ๊ธฐ์ค€์„  โ†’ ํƒ€๊นƒ ํ”„๋กœ๋ธŒ โ†’ ์ฆ๊ฑฐโ€‘๊ธฐ๋ฐ˜ ๊ฒฐ๊ณผ. ์˜ˆ์‹œ ์ƒํ™ฉ: Sworn์ด PC Game Pass์—โ€ฆ

2025๋…„ ์ตœ๊ณ ์˜ ๊ฐœ๋ฐœ์ž AI ๋„๊ตฌ โ€” ์‹ค์ œ ํ”„๋กœ์ ํŠธ์—์„œ ์‹ค์ œ๋กœ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ

2025๋…„์€ AI ๋„๊ตฌ๊ฐ€ โ€œnice to haveโ€ ์ˆ˜์ค€์„ ๋„˜์–ด ๊ธฐ๋ณธ ๊ฐœ๋ฐœ์ž ์›Œํฌํ”Œ๋กœ์šฐ์˜ ์ผ๋ถ€๊ฐ€ ๋œ ํ•ด์˜€์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋Œ€์ฒดํ•œ๋‹ค๋Š” ์ด์œ ๋งŒ์œผ๋กœ๊ฐ€ ์•„๋‹ˆ๋ผโ€ฆ