์•ˆ๋…•ํ•˜์„ธ์š” ๋ฆฌ๋ฉค๋ฒ„๋ฅผ ์„œ๋น„์Šคํ•˜๊ณ  ์žˆ๋Š” ๋“œ๋ผ๋งˆ์•ค์ปดํผ๋‹ˆ์˜ ๊ฐœ๋ฐœ์‹ค ๋ฆฌ๋” ๊น€๋‹ดํ˜•์ž…๋‹ˆ๋‹ค.

์ง€๋‚œ 6์›” 7์ผ ์ง„ํ–‰๋œ AWS GameDay์—์„œ ์ €ํฌ ๋ฆฌ๋ฉค๋ฒ„ ํŒ€์ด 1์œ„๋ฅผ ์ฐจ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค! ๐Ÿฅณ

์ข‹์€ ์„ฑ์ ์„ ๊ฑฐ๋’€๋‹ค๋Š” ์‚ฌ์‹ค๋„ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€๋งŒ, ๊ฒŒ์ž„ ์ž์ฒด์˜ ํ€„๋ฆฌํ‹ฐ๊ฐ€ ๋„ˆ๋ฌด ์ข‹์•„์„œ ์ €ํฌ ๋ชจ๋‘ ์ •๋ง ์‹œ๊ฐ„ ๊ฐ€๋Š” ์ค„ ๋ชจ๋ฅด๊ฒŒ ์žฌ๋ฏธ์žˆ๋Š” ๊ฒฝํ—˜์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” AWS GameDay๊ฐ€ ๋‚ฏ์„  ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ฐ„๋žตํ•˜๊ฒŒ๋‚˜๋งˆ ์–ด๋–ค ๋‚ด์šฉ์˜ ๋Œ€ํšŒ์˜€๊ณ  ๋˜ ์ €ํฌ๊ฐ€ ๋Œ€ํšŒ ์ค‘์— ๋ฌธ์ œ๋“ค์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€ํšŒ ์„ค๋ช…

AWS GameDay๋Š” AWS ์•„ํ‚คํ…์ฒ˜์—์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๋“ค์„ ๊ฒŒ์ž„ํ™”๋œ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ๋Œ€์ฒ˜ํ•˜๋ฉฐ AWS์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ์ฝ˜ํ…์ธ ์ž…๋‹ˆ๋‹ค. ์ฐธ์—ฌํ•œ ํŒ€๋งˆ๋‹ค ๋ชจ์˜ ์„œ๋น„์Šค๊ฐ€ ์šด์˜๋˜๊ณ  ์žˆ๋Š” AWS ๊ณ„์ •์ด ํ•˜๋‚˜์”ฉ ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค. ์šด์˜๋˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค์—๋Š” ์˜ˆ์ƒํ•˜์ง€ ๋ชปํ•œ ์žฅ์• , ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€ ๋“ฑ ์—ฌ๋Ÿฌ ๋Œ๋ฐœ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— AWS ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์•ˆ์ •์ ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•ด์•ผ ํ•˜๋Š” ๋Œ€ํšŒ์ž…๋‹ˆ๋‹ค. ํ•œ ํŒ€์€ ์ตœ๋Œ€ 5๋ช…์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ณ ํ€„๋ฆฌํ‹ฐ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋Œ€ํšŒ์ธ ๋งŒํผ ์•„๋งˆ ํ•ด๋‹น ๋‚ด์šฉ ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ€ํšŒ๊ฐ€ ๋˜ ์—ด๋ฆด ๊ฒƒ ๊ฐ™์•„ ๋„ˆ๋ฌด ์ƒ์„ธํ•œ ๋‚ด์šฉ์€ ์ ์ง€ ๋ชปํ•˜๋Š” ์  ์–‘ํ•ด ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค ๐Ÿ˜‰

์ œ๊ฐ€ ๊ต‰์žฅํžˆ ๊ณ ํ€„๋ฆฌํ‹ฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ์ฒซ ์ด์œ ๋Š” ๋ฐ”๋กœ ๋ชฐ์ž…์„ ์œ„ํ•œ ์ƒํ™ฉ์„ค์ •์ด์—ˆ๋Š”๋ฐ์š”, ๋Œ€ํšŒ ์‹œ์ž‘๋ถ€ํ„ฐ AWS ๋ถ„๋“ค์˜ ์—ฐ๊ธฐ์™€ ํ•จ๊ป˜ ์ƒํ™ฉ๊ทน์ด ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (๋ˆˆ์น˜ ์—†๋Š” ์ €๋Š” 5๋ถ„์ฏค ์ง€๋‚˜์„œ์•ผ ์ด๊ฒŒ ์ƒํ™ฉ๊ทน์ด๋ž€ ๊ฑธ ์ธ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.. ๐Ÿ˜“)

Unicorn.Rentals๋ผ๋Š” ํšŒ์‚ฌ์˜ CEO๊ฐ€ ๋“ฑ์žฅํ•˜์—ฌ CTO๊ฐ€ ์ฝ”๋กœ๋‚˜๋กœ ์ธํ•œ ์ž๊ฐ€๊ฒฉ๋ฆฌ ์ค‘์ด๋ผ ์„œ๋น„์Šค ๋Œ€์‘์„ ์ œ๋Œ€๋กœ ํ•˜์ง€ ๋ชปํ•œ๋‹ค๋Š” ๋น„๊ทน์„ ์ „ํ•ด์ค๋‹ˆ๋‹ค. ์ €ํฌ๋Š” ๋ชจ๋‘ Unicorn.Rentals์˜ DevOps ์—”์ง€๋‹ˆ์–ด๋“ค๋กœ CTO๊ฐ€ ๊ตฌ์ถ•ํ•ด๋†“์€ ์‹œ์Šคํ…œ์„ ํŒŒ์•…ํ•˜๊ณ  ์šด์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋Š” ์ด๋ฏธ ๊ณ ๊ฐ๋“ค์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ํŠธ๋ž˜ํ”ฝ์€ ๋”์šฑ ๋Š˜์–ด๋‚  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. 4์‹œ๊ฐ„ ๋™์•ˆ CTO์˜ ๋„์›€ ์—†์ด ๋นจ๋ฆฌ ํ˜„์žฌ ์ƒํ™ฉ์„ ํŒŒ์•…ํ•˜๊ณ  ์ˆ˜์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ์„ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์ €ํฌ์˜ ์ž„๋ฌด์ž…๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋” ์„ค๋ช…ํ•ด ๋“œ๋ฆฌ์ž๋ฉด ์ €ํฌ ์„œ๋น„์Šค๋Š” ํ•˜๋‚˜์˜ API endpoint๋ฅผ ๋…ธ์ถœํ•˜๊ณ  ์žˆ๊ณ  ํ•ด๋‹น API๋กœ ์‚ฌ์šฉ์ž๋“ค์˜ ์š”์ฒญ์ด ๊พธ์ค€ํ•˜๊ฒŒ ๋“ค์–ด์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. API๋Š” ํ•˜๋‚˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ query string parameter๋กœ ๋ฐ›์œผ๋ฉฐ ์‘๋‹ต์œผ๋กœ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ hash ๊ฐ’์„ ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์„œ๋น„์Šค๋ฅผ ์ž˜ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š”์ง€๋Š” ์ ์ˆ˜๋กœ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์„ ๋” ๋นจ๋ฆฌ ์ฒ˜๋ฆฌํ• ์ˆ˜๋ก ๋†’์€ ์ ์ˆ˜๋ฅผ ๋ฐ›๊ณ  ์š”์ฒญ์„ ์ œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ ์ ์ˆ˜๊ฐ€ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ €ํฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” AWS ์ธํ”„๋ผ ๋ฆฌ์†Œ์Šค์— ๋Œ€ํ•œ ๋น„์šฉ์ด ์ ์ˆ˜์—์„œ ์ฐจ๊ฐ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋Œ€ํšŒ์˜ ๋ชฉ์ ์€ ์ตœ์†Œ์˜ ๋น„์šฉ์œผ๋กœ ์ตœ๊ณ ์˜ ํšจ์šฉ๊ณผ ์•ˆ์ •์„ฑ์„ ๊ฐ–์ถ˜ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ œ๊ณต๋˜๋Š” ์Šค์ฝ”์–ด ๋ณด๋“œ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์ฐธ์—ฌํ•œ ํŒ€๋“ค์˜ ์ ์ˆ˜์™€ ์ ์ˆ˜ trend๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง„ํ–‰ ๋‚ด์šฉ

์ดˆ๋ฐ˜์—๋Š” ์ž‘์€ ์ ์ˆ˜๋กœ ์ˆœ์œ„๊ฐ€ ์—Ž์น˜๋ฝ๋’ค์น˜๋ฝ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฒŒ์ž„์ด ์‹œ์ž‘๋˜๊ณ  ๊ธฐ์กด์— ๊ฐ–์ถฐ์ ธ ์žˆ๋˜ ์‹œ์Šคํ…œ์ด ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์„ ์ž˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๋•๋ถ„์— ๋ชจ๋“  ํŒ€์˜ ์ ์ˆ˜๊ฐ€ ์กฐ๊ธˆ์”ฉ ๊ฐ™์ด ์˜ค๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๋Š” ์šฐ์„  ๋Œ€ํšŒ์—์„œ ์ œ๊ณต๋˜๋Š” Runbook์„ ์ฝ๊ณ  ์ƒํ™ฉ์„ ํŒŒ์•…ํ•˜๊ณ  ์—ฌ๋Ÿฌ ๋‹จ์„œ๋ฅผ ์ฐพ๋Š” ๋ฐ ์ง‘์ค‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ ๋ˆˆ์— ๋“ค์–ด์˜จ ๊ฑด query string parameter๋กœ parameter๊ฐ€ ๋„˜์–ด์˜ค๊ณ  ๊ฐ™์€ parameter์˜ ๊ฒฝ์šฐ ์‘๋‹ต์— ๋‹ด๊ธฐ๋Š” hash๊ฐ€ ์ผ์ •ํ•˜๋‹ค๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋งจ ์ฒ˜์Œ ํ•œ ์ž‘์—…์€ AWS์˜ CDN ์„œ๋น„์Šค์ธ CloudFront๋ฅผ ์ด์šฉํ•˜์—ฌ query string parameter ๊ธฐ๋ฐ˜์˜ ์บ์‹ฑ์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ €ํฌ๊ฐ€ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋Š” API๋Š” ์š”์ฒญ์„ ํ•˜๋‚˜ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ 4์ดˆ ์ด์ƒ ๊ฑธ๋ฆฌ๋Š” ๊ต‰์žฅํžˆ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” API์˜€๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹ฑ์ด ํฐ ํšจ๊ณผ๋ฅผ ๋ฐœํœ˜ํ•  ๊ฒƒ์ด๋ผ๋Š” ํŒ๋‹จ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๊ฐ™์€ ๊ฐ’์ด ์–ผ๋งˆ๋‚˜ ์ค‘๋ณต์œผ๋กœ ์š”์ฒญ๋ ์ง€๋Š” ๋ชฐ๋ž์ง€๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…์ด์—ˆ๋‹ค ๋ณด๋‹ˆ ๋ฐ”๋กœ ์ ์šฉ์„ ํ•ด๋’€์Šต๋‹ˆ๋‹ค. ์บ์‹œ ํžˆํŠธ๊ฐ€ ๋˜๋Š” ๊ฒฝ์šฐ EC2๊นŒ์ง€ ์š”์ฒญ์ด ์ „๋‹ฌ๋˜์ง€๋„ ์•Š๊ณ  ์•ž๋‹จ์—์„œ ๋ฐ”๋กœ ํด๋ผ์ด์–ธํŠธ๋กœ ์‘๋‹ต์„ ์ค„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ์บ์‹ฑ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. CloudFront๋Š” ๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฆฌ์–ด, ๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฎค๋‹ˆํ‹ฐ, ์ปค๋ฆฌ์–ด ์ฑ„์šฉ๊ณต๊ณ  ๋“ฑ ํ‰์†Œ ๋ฆฌ๋ฉค๋ฒ„ ์›น ์‚ฌ์ดํŠธ๋“ค์ด ๋ชจ๋‘ ์ž˜ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„œ๋น„์Šค๋‹ค ๋ณด๋‹ˆ ์–ด๋ ค์›€ ์—†์ด ๋ฐ”๋กœ ์ ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฆฌ์–ด์˜ ์ฑ„์šฉ๊ณต๊ณ  ํ™”๋ฉด

๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฆฌ์–ด ํƒญ ํ™”๋ฉด

๊ทธ๋‹ค์Œ์œผ๋กœ๋Š” ์ง€๊ธˆ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋Š” ์•„ํ‚คํ…์ฒ˜์— ์ž˜๋ชป๋œ ๋ถ€๋ถ„์€ ์—†๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ์„ค์ •์œผ๋กœ ์ถ”๊ฐ€ ๊ธˆ์•ก์ด ๋‚˜๊ฐ€๋Š” ์˜ˆ๋„ ์žˆ์—ˆ๊ณ  ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ง€์›๋“ค๋„ ์žˆ์–ด์„œ ์ด๋ฅผ ๋ชจ๋‘ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, VPC ์„ค์ •์„ ๋ณด๋‹ค ๋ณด๋‹ˆ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ IP์˜ ์ œํ•œ์ด ์žˆ์–ด์„œ subnet๋„ ๋ฐ”๋กœ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์™ธ ๋ฐฐํฌ ๊ณผ์ •์—๋„ ๋น„ํšจ์œจ์ ์ธ ๋‚ด์šฉ์„ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค.

API์˜ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋งค์šฐ ๊ธธ์–ด์„œ์ธ์ง€ ์ œ๊ณต๋˜๋Š” ์„œ๋น„์Šค binary๊ฐ€ EC2 ์„œ๋ฒ„ ํ•œ ๋Œ€์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์ด ๋ช…ํ™•ํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์š”์ฒญ๋Ÿ‰์— ๋”ฐ๋ฅธ EC2 auto scaling์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๊ณ  Request count per target ์ง€ํ‘œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Classic Load Balancer๋ฅผ Application Load Balancer๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

ELB์—์„œ ๊ด€๋ฆฌํ•˜๊ณ ์žˆ๋Š” target๋‹น ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š” request count ์ง€ํ‘œ

์š”์ฒญ๋Ÿ‰์ด ๊ธ‰๊ฒฉํ•˜๊ฒŒ ๋ณ€ํ™”ํ•˜๊ธฐ๋„ ํ•˜๊ณ  ์–ด๋–ค ๊ทœ์น™์„ ๋ณด์ผ์ง€ ๋ชฐ๋ผ์„œ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์†ํ† ์Šค์ผ€์ผ๋ง(์† auto scaling)์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์ด ๊ฝค ํฐ ์—ญํ• ์„ ํ•ด์คฌ๋Š”๋ฐ์š”, ๋‹ค๋ฅธ ํŒ€๋“ค์˜ ์ ์ˆ˜๊ฐ€ ๊ฐ‘์ž๊ธฐ ๊ธ‰๊ฐํ•  ๋•Œ ์ €ํฌ๋Š” ํ”Œ๋Ÿฌ์Šค ์ ์ˆ˜๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (์ธ๊ฐ„์ด ๊ธฐ๊ณ„๋ณด๋‹ค ๋›ฐ์–ด๋‚˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์คฌ์Šต๋‹ˆ๋‹ค๐Ÿค–)

์šฐ๋ฆฌ ํŒ€๋งŒ ์ดˆ๋ก์ƒ‰์ด๋ผ๋‹ˆ..! ์งœ๋ฆฟํ•ด!

๊ฒŒ์ž„ ๊ทœ์น™์ƒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” EC2์˜ ์‚ฌ์–‘์ด ํ•œ ๊ฐ€์ง€๋กœ ์ •ํ•ด์ ธ ์žˆ์—ˆ๊ณ  ์„œ๋น„์Šค๊ฐ€ EC2 ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์ถฉ๋ถ„ํžˆ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์ด์—ˆ๋‹ค ๋ณด๋‹ˆ ๋” ํšจ๊ณผ์ ์ธ ๋น„์šฉ ์ ˆ๊ฐ์„ ์œ„ํ•ด์„œ๋Š” AWS์˜ container ์„œ๋น„์Šค์ธ ECS๋ฅผ ์ด์šฉํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์น˜ ์•ฝ์†์ด๋ผ๋„ ํ•œ ๋“ฏ ๋ˆ„๊ฐ€ ์‹œํ‚ค์ง€๋„ ์•Š์•˜์ง€๋งŒ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฐธ์—ฌ ์ธ์›์˜ ์ ˆ๋ฐ˜์€ ECS์˜ ์‹ ๊ทœ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜์˜ ์„ค๊ณ„๋ฅผ, ์ ˆ๋ฐ˜์€ ๋” ๋น ๋ฅธ Auto Scaling์„ ํ†ตํ•ด ๊ธฐ์กด ์‹œ์Šคํ…œ ์šด์˜์„ ๋งก์•˜์Šต๋‹ˆ๋‹ค.

ECS(Elastic Container Service)๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์„œ๋น„์Šค์ด๋ฉฐ ์–ด๋–ป๊ฒŒ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๋ƒ์— ๋”ฐ๋ผ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ์ €ํฌ๊ฐ€ EC2๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•œ ๋’ค ๊ทธ ์•ˆ์— ์‹คํ–‰๋˜๋Š” container๋“ค์„ ECS์—์„œ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๊ณ  ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” Fargate๋ผ๊ณ  ๋ถ€๋ฅด๋Š” serverless ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Fargate๋Š” ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด์„œ AWS Lambda์™€ ๊ฐ™์€ ๊ฐœ๋…์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” EC2 ๊ธฐ๋ฐ˜์˜ ECS๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์—ˆ๋Š”๋ฐ ์ €ํฌ ๋ชจ๋‘ EC2 ๊ธฐ๋ฐ˜์˜ ECS๋ฅผ ๊ตฌ์ถ•ํ•œ ๊ฒฝํ—˜์ด ์—†์—ˆ์–ด์„œ ์ผ๋ถ€ ์„ค์ •์—์„œ ์ƒ๊ฐ๋Œ€๋กœ ์ž˜ ๋™์ž‘ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ์ค‘๊ฐ„์—๋Š” ๋” ๋Šฆ์–ด์ง€๋ฉด ์•ˆ ๋˜๊ฒ ๋‹ค ์‹ถ์–ด์„œ Fargate ๊ธฐ๋ฐ˜์˜ ECS๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. Fargate์˜ ๊ฒฝ์šฐ ๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์†์‰ฝ๊ฒŒ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Fargate๋กœ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ชจ๋‘ ์ด์ „ํ•œ ๋’ค ์ ์ˆ˜๊ฐ€ ๋งŽ์ด ์˜ค๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

Fargate์—์„œ ์‚ฌ์šฉํ•˜๋Š” Task Definition ์„ค์ •. ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ EC2 ์ธ์Šคํ„ด์Šค๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

Fargate ์œ„์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฎค๋‹ˆํ‹ฐ API, ๋ฆฌ๋ฉค๋ฒ„ ์ปค๋ฎค๋‹ˆํ‹ฐ Web์˜ ํ™”๋ฉด

์–ด๋А ์ •๋„ ์ž‘์—…๋„ ์™„๋ฃŒํ–ˆ๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์˜ค๋ฅด๋Š” ์ ์ˆ˜์— ๋งŒ์กฑํ•˜๋˜ ์ค‘์— ๊ฐ‘์ž๊ธฐ EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅด๊ฒŒ ๋Œ์•„๊ฐ€๋Š” ์ƒํ™ฉ์ด๋‹ค ๋ณด๋‹ˆ _โ€œ์ด์ƒํ•˜๋„ค? ๊ทผ๋ฐ ๋ญ ๋ˆ„๊ตฐ๊ฐ€ ์‹ค์ˆ˜ํ–ˆ๊ฒ ์ง€โ€_๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์—ˆ์ง€๋งŒ, ํ˜น์‹œ ๋ชจ๋ฅผ ๋ฌธ์ œ๋ฅผ ๋Œ€๋น„ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉ์ž ํ™œ๋™ ๊ฐ์‹œ ์„œ๋น„์Šค์ธ CloudTrail์—์„œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ญ์‹œ ์ €ํฌ์˜ ์‹ค์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ Chaos Monkey๊ฐ€ AWS ๋ฆฌ์†Œ์Šค๋“ค์„ ์กฐํšŒํ•˜๊ณ  ์ข…๋ฃŒํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์ผ์œผ์ผœ์„œ ๋Œ€์‘์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์€ ๋น ๋ฅด๊ฒŒ ๋Œ€์‘์„ ํ–ˆ๊ณ  ๋ง๊ฐ€ํŠธ๋ฆฌ์ง€ ๋ชปํ•˜๊ฒŒ ์ผ๋ถ€ ์„ค์ •์€ ์กฐ์ •ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

Chaos Monkey๋Š” Netflix์—์„œ ๋งŒ๋“  Chaos Engineering์„ ์œ„ํ•œ ๋ชจ์˜ํ›ˆ๋ จ ํˆด๋กœ ์ž„์˜๋กœ ์„œ๋ฒ„๋‚˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ข…๋ฃŒ์‹œ์ผฐ์„ ๋•Œ๋„ ์„œ๋น„์Šค๊ฐ€ ์ž˜ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ธ์Šคํ„ด์Šค ์ข…๋ฃŒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ AZ๋‚˜ ๋ฆฌ์ „ ์ „์ฒด๋ฅผ ์…ง๋‹ค์šด ํ•˜๋Š” Chaos Gorilla, Chaos Kong ๋“ฑ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. Chaos Engineering์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด ์นด์˜ค์Šค ์—”์ง€๋‹ˆ์–ด๋ง์˜ ์›์น™์„ ์ฝ์–ด๋ณด์‹œ๊ฑฐ๋‚˜ YouTube์—์„œ Netflix์˜ ๊ธฐ์ˆ  ๋ฐœํ‘œ ์˜์ƒ๋“ค์„ ์ฐธ๊ณ ํ•ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Chaos Monkey๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ ์€ ๋‚ด๋ถ€์— ์žˆ๋‹ค๊ณ  Unicorn.Rentals ๋Œ€ํ‘œ๋‹˜์ด ๋ญ”๊ฐ€ ํ•ด๋ณด์‹œ๊ฒ ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒŒ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ซ

๋Œ€ํ‘œ๋‹˜โ€ฆ ๋ญ๋ผ๊ณ  ๋•๊ณ  ์‹ถ์€ ๋งˆ์Œ.. ๊ทธ ๋งˆ์Œ๋งŒ ๋ฐ›๊ฒ ์Šต๋‹ˆ๋‹ค..

๋˜ํ•œ ํ›„๋ฐ˜์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ํŠธ๋ž˜ํ”ฝ์ด ๊ธ‰์ฆํ–ˆ๋Š”๋ฐ, ๊ฐ€์žฅ ์ฒ˜์Œ์— ๋„์ž…ํ–ˆ๋˜ CloudFront๊ฐ€ ํšจ์ž ๋…ธ๋ฆ‡์„ ํ†กํ†กํžˆ ํ•ด์คฌ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต๋œ parameter ์š”์ฒญ์ด ๋งŽ์ด ๋‚ ๋ผ์™”๋Š”์ง€ ๋Œ€๋ถ€๋ถ„์˜ ์š”์ฒญ์ด CloudFront ๋‹จ์—์„œ ์ฒ˜๋ฆฌ๋˜๊ณ  ๋๋‚ฌ์Šต๋‹ˆ๋‹ค.

4์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด CloudFront ์บ์‹ฑ์„ ํ†ตํ•ด 0.004์ดˆ๋งŒ์— ์ฒ˜๋ฆฌ๋˜๋Š” ๋ชจ์Šต.

์ตœ์ข… ์„ฑ์ ํ‘œ

์–ด๋А๋ง 4์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฒ„๋ ธ๊ณ  ๋Œ€ํšŒ๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฉค๋ฒ„๋ฆฌ๋ฉค๋ฒ„ ํŒ€์ด 1๋“ฑ์œผ๋กœ ๊ฒŒ์ž„์„ ๋๋ƒˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ค‘๊ฐ„ ๋“ฑ์ˆ˜์˜€์ง€๋งŒ ์ž‘์—…์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ ์ˆ˜์™€ ์ˆœ์œ„๊ฐ€ ํ•จ๊ป˜ ์˜ค๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ›„๊ธฐ

์ €ํฌ ๋ชจ๋‘ ํฐ ๊ธฐ๋Œ€๋ฅผ ๊ฐ–๊ณ  ์ฐธ์—ฌํ–ˆ๋˜ ๋Œ€ํšŒ๋Š” ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋“ค ์›Œ๋‚™ ๋ฐ”์˜๋‹ค ๋ณด๋‹ˆ ์˜ค๋žœ๋งŒ์— ์žฌ๋ฏธ์žˆ๊ฒŒ ๋†€๋‹ค ์˜ค์ž๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ์ฐธ์—ฌํ–ˆ๋‹ค๊ฐ€ ์ ์ˆ˜๊ฐ€ ์ž˜ ๋‚˜์˜ค๋‹ˆ ๋’ค๋กœ ๊ฐˆ์ˆ˜๋ก ๋” ์—ด์‹ฌํžˆ ๋ชฐ์ž…ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐœ์ธ์ ์œผ๋กœ๋Š” ๋ฐฉ ํƒˆ์ถœ์„ ์ •๋ง์ •๋ง ์ข‹์•„ํ•˜๋Š”๋ฐ ์ฒ˜์Œ์— ๋ชฐ์ž…์„ ์œ„ํ•œ ์„ค์ •, ์ƒํ™ฉ๊ทน, ์—ฐ๊ธฐ, ๋‹ค์–‘ํ•œ ํ•จ์ • ๋ฐ ๋ฌธ์ œ ๋“ฑ์ด ๋ฐฉ ํƒˆ์ถœ๊ณผ ๋น„์Šทํ•˜์—ฌ ํ›จ์”ฌ ๋” ๋ชฐ์ž…ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

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

๊ด€์‹ฌ ์žˆ์œผ์‹  ๋ถ„๋“ค์€ ์ •๋ง ์žฌ๋ฏธ์žˆ๋Š” ์‹œ๊ฐ„์„ ๋ณด๋‚ด์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์œผ๋‹ˆ ๋‚˜์ค‘์— ๋Œ€ํšŒ๊ฐ€ ์—ด๋ฆฌ๋ฉด ๊ผญ! ์ฐธ์—ฌํ•ด๋ณด์‹œ๊ธธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๋ฐ•๋ช…ํ˜ธ, ๊น€๋‹ดํ˜•, ๊ฐ•ํƒœํ™”, ์œค์„ฑํ˜„, ์ด๋™๊ทผ