SRE ์—”์ง€๋‹ˆ์–ด ์ธํ„ด์œผ๋กœ ์ผ์ฃผ์ผ์„ ๋ณด๋‚ธ ๋ฐฉ๋ฒ•. ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด์˜ ๋ˆˆ์œผ๋กœ ๋ณธ ์˜๋ฌด

SRE ์—”์ง€๋‹ˆ์–ด ์ธํ„ด์œผ๋กœ ์ผ์ฃผ์ผ์„ ๋ณด๋‚ธ ๋ฐฉ๋ฒ•. ์†Œํ”„ํŠธ์›จ์–ด ์—”์ง€๋‹ˆ์–ด์˜ ๋ˆˆ์œผ๋กœ ๋ณธ ์˜๋ฌด

SRE ์—”์ง€๋‹ˆ์–ด - ์—ฐ์ˆ˜์ƒ

๋จผ์ € ์ œ ์†Œ๊ฐœ๋ฅผ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜ - @tristan.read, ๊ทธ๋ฃน์˜ ํ”„๋ก ํŠธ์—”๋“œ ์—”์ง€๋‹ˆ์–ด ๋ชจ๋‹ˆํ„ฐ::๊ฑด๊ฐ• GitLab. ์ง€๋‚œ์ฃผ์— ์ €๋Š” ๋Œ€๊ธฐ ์ค‘์ธ SRE ์—”์ง€๋‹ˆ์–ด ์ค‘ ํ•œ ๋ช…๊ณผ ์ธํ„ด์œผ๋กœ ์ผํ•˜๋Š” ์˜๊ด‘์„ ๋ˆ„๋ ธ์Šต๋‹ˆ๋‹ค. ๋ชฉํ‘œ๋Š” ๊ทผ๋ฌด ์ค‘์ธ ๊ฒฝ์ฐฐ๊ด€์ด ๋งค์ผ ์‚ฌ๊ฑด์— ์–ด๋–ป๊ฒŒ ๋Œ€์‘ํ•˜๋Š”์ง€ ๊ด€์ฐฐํ•˜๊ณ  ์—…๋ฌด์ƒ ์‹ค์ œ ๊ฒฝํ—˜์„ ์Œ“๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์‚ฌ์šฉ์ž ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ๋“ค ๋ชจ๋‹ˆํ„ฐ::๊ฑด๊ฐ•.

๋‚˜๋Š” ์ผ์ฃผ์ผ ๋™์•ˆ SRE ์—”์ง€๋‹ˆ์–ด๋ฅผ ๋”ฐ๋ผ ์–ด๋””๋“  ๋”ฐ๋ผ๊ฐ€์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋‚˜๋Š” ์ธ์ˆ˜์ธ๊ณ„์— ์ฐธ์„ํ•˜์—ฌ ๋™์ผํ•œ ๊ฒฝ๋ณด ์ฑ„๋„์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ณ  ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ์ด์— ๋Œ€์‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๊ฑด

์ผ์ฃผ์ผ ์‚ฌ์ด์— 2๊ฑด์˜ ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

1. ์•”ํ˜ธํ™”ํ ์ฑ„๊ตด๊ธฐ

GitLab.com์€ ์ˆ˜์š”์ผ์— ์‚ฌ์šฉ๋Ÿ‰์ด ๊ธ‰์ฆํ–ˆ์Šต๋‹ˆ๋‹ค. GitLab ๋Ÿฌ๋„ˆ'a, ์ฃผ์ž์˜ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”ํ๋ฅผ ์ฑ„๊ตดํ•˜๋ ค๋Š” ์‹œ๋„๋กœ ์ธํ•ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ๊ฑด์€ ์‹คํ–‰์ž์˜ ์ž‘์—…์„ ์ค‘์ง€ํ•˜๊ณ  ์ด์™€ ๊ด€๋ จ๋œ ํ”„๋กœ์ ํŠธ ๋ฐ ๊ณ„์ •์„ ์‚ญ์ œํ•˜๋Š” ์ž์ฒด ์œ„๋ฐ˜ ๋ฌด๋ ฅํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์ž๋™ํ™”๋œ ๋„๊ตฌ๊ฐ€ ์ด๋ฅผ ํฌ์ฐฉํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ SRE ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์œ„๋ฐ˜ ์‚ฌํ•ญ์„ ๋จผ์ € ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ธ์‹œ๋˜ํŠธ ์ž‘์—…์ด ์ƒ์„ฑ๋˜์—ˆ์ง€๋งŒ ํ•ด๋‹น ์ •๋ณด๊ฐ€ ๋‹ซํ˜€ ์žˆ์Šต๋‹ˆ๋‹ค.

2. Canary ๋ฐ ์ฃผ์š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ €ํ•˜

์ด ์‚ฌ๊ฑด์€ Gitlab.com์˜ Canary ๋ฐ ์ฃผ์š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์†๋„ ์ €ํ•˜์™€ ์˜ค๋ฅ˜ ๋นˆ๋„ ์ฆ๊ฐ€๋กœ ์ธํ•ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ Apdex ๊ฐ’์ด ์œ„๋ฐ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ธ์‹œ๋˜ํŠธ ์ž‘์—… ์—ด๊ธฐ: https://gitlab.com/gitlab-com/gl-infra/production/issues/1442

์ฃผ์š” ๊ฒฐ๊ณผ

์ผ์ฃผ์ผ ๋™์•ˆ ๊ทผ๋ฌดํ•˜๋ฉด์„œ ๋ฐฐ์šด ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

1. ๊ฒฝ๊ณ ๋Š” ํ‘œ์ค€์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ์„ ๊ฐ์ง€ํ•  ๋•Œ ๊ฐ€์žฅ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ ๋Š” ์—ฌ๋Ÿฌ ์œ ํ˜•์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • "์ดˆ๋‹น 10๊ฐœ์˜ 5xx ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค"์™€ ๊ฐ™์€ ํŠน์ • ์ž„๊ณ„๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฒฝ๊ณ ์ž…๋‹ˆ๋‹ค.
  • ์ž„๊ณ„๊ฐ’์ด "ํŠน์ • ์‹œ๊ฐ„์— ์ด ์š”์ฒญ๋Ÿ‰์˜ 5%๋‹น 10xx ์˜ค๋ฅ˜ ๋นˆ๋„"์™€ ๊ฐ™์€ ๋ฐฑ๋ถ„์œจ ๊ฐ’์ธ ๊ฒฝ๊ณ ์ž…๋‹ˆ๋‹ค.
  • "5๋ฒˆ์งธ ๋ฐฑ๋ถ„์œ„์ˆ˜์˜ 90xx ์˜ค๋ฅ˜"์™€ ๊ฐ™์€ ๊ณผ๊ฑฐ ํ‰๊ท ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ๊ฒฝ๊ณ ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์œ ํ˜• 2์™€ 3์€ ์—…๋ฌด ์ค‘์ธ SRE์— ๋” ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค์—์„œ ํ‘œ์ค€๊ณผ์˜ ํŽธ์ฐจ๋ฅผ ๋“œ๋Ÿฌ๋‚ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

2. ๋งŽ์€ ๊ฒฝ๊ณ ๋Š” ๊ฒฐ์ฝ” ์‚ฌ๊ฑด์œผ๋กœ ํ™•๋Œ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

SR ์—”์ง€๋‹ˆ์–ด๋Š” ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ๊ณ ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๊ทธ ์ค‘ ๋Œ€๋ถ€๋ถ„์€ ์‹ค์ œ๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์ •๋ง ์ค‘์š”ํ•œ ์•Œ๋ฆผ์œผ๋กœ๋งŒ ์•Œ๋ฆผ์„ ์ œํ•œํ•ด ๋ณด๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ์š”? ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ฌ๊ฐํ•œ ํ”ผํ•ด๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ๋ฌธ์ œ๋กœ ๋ˆˆ๋ฉ์ด์ฒ˜๋Ÿผ ๋ถˆ์–ด๋‚˜๋Š” ์ดˆ๊ธฐ ์ฆ์ƒ์„ ์ธ์‹ํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๊ธฐ ์ค‘์ธ SRE์˜ ์ž„๋ฌด๋Š” ์–ด๋–ค ๊ฒฝ๊ณ ๊ฐ€ ์‹ค์ œ๋กœ ์‹ฌ๊ฐํ•œ ๋ฌธ์ œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๊ฒฝ๊ณ ๋ฅผ ์—์Šค์ปฌ๋ ˆ์ด์…˜ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋˜ํ•œ ๊ฒฝ๊ณ ์˜ ๊ฒฝ์ง์„ฑ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์„ค๋ช…ํ•œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ๊ฒฝ๊ณ ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ์ˆ˜์ค€์ด๋‚˜ "์Šค๋งˆํŠธ" ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค๋ฉด ๋” ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ ์ œ์•ˆ: https://gitlab.com/gitlab-org/gitlab/issues/42633

3. ๊ทผ๋ฌด ์ค‘์ธ SRE๋Š” ๋งŽ์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๋ถ€ :

  • GitLab ์ธํ”„๋ผ ํ”„๋กœ์ ํŠธ: ๋Ÿฐ๋ถ์ด ์—ฌ๊ธฐ์— ๊ฒŒ์‹œ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ต๋Œ€/์ฃผ ๋ฐฐ์ •, ์‚ฌ๊ณ  ๋Œ€์‘ ์ž‘์—…์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • GitLab ๋ฌธ์ œ: ์กฐ์‚ฌ, ๊ฒ€ํ†  ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋„ ๋ฌธ์ œ์—์„œ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.
  • GitLab ๋ ˆ์ด๋ธ”: ์ž๋™ํ™” ์ž‘์—…์€ ๋ด‡์ด ์ž‘์—… ํ™œ๋™์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š” ํŠน์ • ๋ ˆ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์™ธ๋ถ€ :

  • PagerDuty: ๊ฒฝ๊ณ 
  • Slack: PagerDuty/AlertManager ๋ฉ”์‹œ์ง€ ํ๋ฆ„์ด ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์Šฌ๋ž˜์‹œ ๋ช…๋ น๊ณผ ํ†ตํ•ฉํ•˜์—ฌ ๊ฒฝ๊ณ  ์ข…๋ฃŒ ๋˜๋Š” ์‚ฌ๊ฑด ์—์Šค์ปฌ๋ ˆ์ด์…˜๊ณผ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • Grafana: ์žฅ๊ธฐ์ ์ธ ์ถ”์„ธ์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ธก์ •ํ•ญ๋ชฉ ์‹œ๊ฐํ™”.
  • Kibana: ์‹œ๊ฐํ™”/๋กœ๊ทธ ๊ฒ€์ƒ‰, ํŠน์ • ์ด๋ฒคํŠธ๋ฅผ ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“œ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Zoom: Zoom์—๋Š” ์ง€์†์ ์œผ๋กœ ์‹คํ–‰๋˜๋Š” "์†ŒํšŒ์˜์‹ค"์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด SRE ์—”์ง€๋‹ˆ์–ด๋Š” ํšŒ์˜์‹ค์„ ๋งŒ๋“ค๊ณ  ์ฐธ๊ฐ€์ž๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ท€์ค‘ํ•œ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ ๋„ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์‹ ์†ํ•˜๊ฒŒ ๋…ผ์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋งŽ์€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค.

4. GitLab์œผ๋กœ GitLab.com์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ผ ์‹คํŒจ ์ง€์ ์ž…๋‹ˆ๋‹ค.

GitLab.com์— ์‹ฌ๊ฐํ•œ ์„œ๋น„์Šค ์ค‘๋‹จ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋Šฅ๋ ฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๊ธฐ๋ฅผ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GitLab.com์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๋ฒˆ์งธ GitLab ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋Š” ์ด๋ฏธ ์šฐ๋ฆฌ์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. https://ops.gitlab.net/.

5. GitLab์— ์ถ”๊ฐ€ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ

  • ๋‹ค์ค‘ ์‚ฌ์šฉ์ž ์ž‘์—… ํŽธ์ง‘, Google ๋ฌธ์„œ๋„๊ตฌ์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ด๋ฒคํŠธ ์ค‘ ์‚ฌ๊ฑด์— ๋Œ€ํ•œ ์ž‘์—…๊ณผ ๋ณด๊ณ  ์ž‘์—…์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์—ฌ๋Ÿฌ ์ฐธ๊ฐ€์ž๊ฐ€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ž‘์—…์„ ์œ„ํ•œ ์ถ”๊ฐ€ ์›นํ›…. ๋‚ด๋ถ€์—์„œ ๋‹ค์–‘ํ•œ GitLab ์›Œํฌํ”Œ๋กœ ๋‹จ๊ณ„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์€ Slack ํ†ตํ•ฉ์— ๋Œ€ํ•œ ์˜์กด๋„๋ฅผ ์ค„์ด๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด GitLab ๋ฌธ์ œ์—์„œ ์Šฌ๋ž˜์‹œ ๋ช…๋ น์„ ํ†ตํ•ด PagerDuty์—์„œ ๊ฒฝ๊ณ ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
    ๊ฒฐ๋ก 

SRE ์—”์ง€๋‹ˆ์–ด๋Š” ๋งŽ์€ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ์–ด๋ ค์›€์„ ๊ฒช๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋” ๋งŽ์€ GitLab ์ œํ’ˆ์„ ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ์ž‘์—… ํ๋ฆ„์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค„ ๋ช‡ ๊ฐ€์ง€ ์ œํ’ˆ ์ถ”๊ฐ€ ์ž‘์—…์„ ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Ops ์ œํ’ˆ ๋น„์ „ ์„น์…˜.

์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ํ†ตํ•ฉํ•˜๊ธฐ ์œ„ํ•ด 2020๋…„์— ํŒ€์„ ํ™•์žฅํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด ํ™•์ธํ•ด ๋ณด์„ธ์š”. ๊ณต์„, ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋ฉด ์–ธ์ œ๋“ ์ง€ ์ €ํฌ ํŒ€์— ๋ฌธ์˜ํ•ด ์ฃผ์„ธ์š”.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€