๐ฅ ์ฌ์ฉ์๊ฐ ๊นจ๊ธฐ ์ ์ API๋ฅผ ๋ถ์ด๋ผ. CI/CD๋ฅผ ์ํ ์๋ํ๋ ๋คํธ์ํฌ ์นด์ค์ค.
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 ํ๋ซํผ์ ๋๋ค. ๋คํธ์ํฌ ์ธํ๋ผ๋ฅผ ์ฝ๋์ฒ๋ผ ๋ค๋ฃฐ ์ ์์ต๋๋ค.
- ์์ฑ โ CI ์คํฌ๋ฆฝํธ๊ฐ API๋ฅผ ํธ์ถํด ๊ฒฉ๋ฆฌ๋ ์ผ์์ ์ธ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ๋์๋๋ค.
- ์ฐ๊ฒฐ โ E2E ํ ์คํธ ํธ๋ํฝ(์น, Android, iOS)์ ์ด ํ๋ก์๋ฅผ ํตํด ๋ผ์ฐํ ํฉ๋๋ค.
- ํ๊ดด โ 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์๋ง ์์กดํ์ง ๋ง์ธ์. ํ์ค์ ํ ์คํธํ์ธ์.