AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

์•ˆ๋…•ํ•˜์„ธ์š” ์—ฌ๋Ÿฌ๋ถ„! ์ œ ์ด๋ฆ„์€ Kirill์ด๊ณ  Adapty์˜ CTO์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ ์•„ํ‚คํ…์ฒ˜์˜ ๋Œ€๋ถ€๋ถ„์€ AWS์— ์žˆ๋Š”๋ฐ, ์˜ค๋Š˜์€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๋น„์šฉ์„ 3๋ฐฐ ์ ˆ๊ฐํ•œ ๋ฐฉ๋ฒ•๊ณผ Auto Scaling์„ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ์ž‘๋™ ๋ฐฉ์‹์— ๋Œ€ํ•œ ๊ฐœ์š”๋ฅผ ์„ค๋ช…ํ•œ ๋‹ค์Œ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ์ž์„ธํ•œ ์ง€์นจ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์  ์ธ์Šคํ„ด์Šค๋Š” ํ˜„์žฌ ์œ ํœด ์ƒํƒœ์ธ ๋‹ค๋ฅธ AWS ์‚ฌ์šฉ์ž์˜ ์„œ๋ฒ„์ด๋ฉฐ ํฐ ํ• ์ธ์„ ๋ฐ›๊ณ  ํŒ๋งค๋ฉ๋‹ˆ๋‹ค(Amazon์€ ์ตœ๋Œ€ 90%๊นŒ์ง€ ๊ธฐ๋กํ•˜๋ฉฐ ๊ฒฝํ—˜์ƒ ์ตœ๋Œ€ 3๋ฐฐ๋Š” ์ง€์—ญ, AZ ๋ฐ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ„). ์ผ๋ฐ˜ ์ œํ’ˆ๊ณผ์˜ ์ฃผ์š” ์ฐจ์ด์ ์€ ์–ธ์ œ๋“ ์ง€ ๋Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ค๋žซ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ฒ˜๋…€ ํ™˜๊ฒฝ์ด๋‚˜ ๊ณ„์‚ฐ ์ž‘์—…์— ์‚ฌ์šฉํ•˜๊ณ  ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ S3๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์ง€๋งŒ ํŒ๋งค์šฉ์œผ๋กœ๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •์ƒ์ด๋ผ๊ณ  ๋ฏฟ์—ˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜์—์„œ ์ŠคํŒŸ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์‚ฌ ์†”๋ฃจ์…˜์ด ์žˆ์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ชฉ๋ฐœ์ด ๋งŽ์•„์„œ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ์‚ฌ์— ์„ค๋ช…๋œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ถ”๊ฐ€ ์Šคํฌ๋ฆฝํŠธ, ํฌ๋ผ์šด ๋“ฑ ์—†์ด ํ‘œ์ค€ AWS ๊ธฐ๋Šฅ ๋‚ด์—์„œ ์™„์ „ํžˆ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์˜ ๊ฐ€๊ฒฉ ๋‚ด์—ญ์„ ๋ณด์—ฌ์ฃผ๋Š” ๋ช‡ ๊ฐ€์ง€ ์Šคํฌ๋ฆฐ์ƒท์ž…๋‹ˆ๋‹ค.

eu-west-5(์•„์ผ๋žœ๋“œ) ๋ฆฌ์ „์˜ m1.large. ๊ฐ€๊ฒฉ์€ 3๊ฐœ์›” ๋™์•ˆ ๋Œ€๋ถ€๋ถ„ ์•ˆ์ •์ ์ด์—ˆ์œผ๋ฉฐ ํ˜„์žฌ 2.9๋ฐฐ๋ฅผ ์ ˆ์•ฝํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

us-east-5 ์ง€์—ญ(๋ฒ„์ง€๋‹ˆ์•„ ๋ถ๋ถ€)์˜ m1.large. ๊ฐ€๊ฒฉ์€ 3๊ฐœ์›”์— ๊ฑธ์ณ ์ง€์†์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋ฉฐ ํ˜„์žฌ ๊ฐ€์šฉ ์˜์—ญ์— ๋”ฐ๋ผ 2.3๋ฐฐ์—์„œ 2.8๋ฐฐ๊นŒ์ง€ ์ ˆ์•ฝ๋ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

us-east-3 ๋ฆฌ์ „(๋ฒ„์ง€๋‹ˆ์•„ ๋ถ๋ถ€)์˜ t1.small. ๊ฐ€๊ฒฉ์€ 3๊ฐœ์›” ๋™์•ˆ ์•ˆ์ •๋˜์–ด ํ˜„์žฌ 3.4๋ฐฐ๋ฅผ ์ ˆ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜

์ด ๊ธฐ์‚ฌ์—์„œ ๋‹ค๋ฃฐ ์„œ๋น„์Šค์˜ ๊ธฐ๋ณธ ์•„ํ‚คํ…์ฒ˜๋Š” ์•„๋ž˜ ๋‹ค์ด์–ด๊ทธ๋žจ์— ๋‚˜์™€ ์žˆ์Šต๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

Application Load Balancer โ†’ EC2 ๋Œ€์ƒ ๊ทธ๋ฃน โ†’ Elastic Container Service

ALB(Application Load Balancer)๋Š” EC2 ๋Œ€์ƒ ๊ทธ๋ฃน(TG)์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐธ๋Ÿฐ์„œ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. TG๋Š” ALB์šฉ ์ธ์Šคํ„ด์Šค์—์„œ ํฌํŠธ๋ฅผ ์—ด๊ณ  ์ด๋ฅผ Elastic Container Service(ECS) ์ปจํ…Œ์ด๋„ˆ์˜ ํฌํŠธ์— ์—ฐ๊ฒฐํ•˜๋Š” ์ผ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ECS๋Š” Docker ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” AWS์˜ Kubernetes์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค์—๋Š” ๋™์ผํ•œ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‹คํ–‰ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๊ณ ์ •์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ECS๋Š” TG์— ์ƒˆ ์ž‘์—…(Kubernetes ์šฉ์–ด๋กœ๋Š” ํฌ๋“œ๋ผ๊ณ  ํ•จ)์„ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ์•Œ๋ฆฌ๊ณ , ์ธ์Šคํ„ด์Šค์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํฌํŠธ๋ฅผ ํ™•์ธํ•˜๊ณ  ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‹œ์ž‘๋œ ์ž‘์—…์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. TG๋Š” ๋˜ํ•œ ์ •๊ธฐ์ ์œผ๋กœ ํ—ฌ์Šค์ฒดํฌ๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์™€ API๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋กœ ์š”์ฒญ ์ „์†ก์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

EC2 Auto Scaling ๊ทธ๋ฃน + ECS ์šฉ๋Ÿ‰ ๊ณต๊ธ‰์ž

์œ„ ๋‹ค์ด์–ด๊ทธ๋žจ์—๋Š” EC2 Auto Scaling ๊ทธ๋ฃน(ASG) ์„œ๋น„์Šค๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฆ„์—์„œ ์ธ์Šคํ„ด์Šค ํ™•์žฅ์„ ๋‹ด๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ๊นŒ์ง€ AWS์—๋Š” ECS์—์„œ ์‹คํ–‰ ์ค‘์ธ ์‹œ์Šคํ…œ ์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ECS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด CPU ์‚ฌ์šฉ๋Ÿ‰, RAM ๋˜๋Š” ์š”์ฒญ ์ˆ˜ ๋“ฑ์„ ๊ธฐ์ค€์œผ๋กœ ์ž‘์—… ์ˆ˜๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ž‘์—…์ด ๋ชจ๋“  ๋ฌด๋ฃŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐจ์ง€ํ•œ ๊ฒฝ์šฐ ์ƒˆ ๋จธ์‹ ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

EC2 ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ

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

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

๋””์Šคํฌ ๊ด€๋ จ - ์ตœ๊ทผ AWS ๋งŒ๋“  ECS์™€ ํ•จ๊ป˜ EFS(Elastic File System)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋””์Šคํฌ๋„ ์žฅ์• ๋ฌผ์ด ์•„๋‹ˆ์ง€๋งŒ ์›์น™์ ์œผ๋กœ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ๋””์Šคํฌ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ SIGINT(์ž‘์—…์ด Draining ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ ์ „์†ก๋จ)๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„ ์‹คํ–‰ ์ค‘์ธ ๋ชจ๋“  ์ž‘์—…์€ ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๋”๋ผ๋„ 30์ดˆ ํ›„์— ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ์‹œ๊ฐ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ECS_CONTAINER_STOP_TIMEOUT. ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ŠคํŒŸ ๋จธ์‹ ์˜ ๊ฒฝ์šฐ 2๋ถ„ ์ด์ƒ ์„ค์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ

์„ค๋ช…๋œ ์„œ๋น„์Šค ์ƒ์„ฑ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•˜์ง€ ๋ชปํ•œ ๋ช‡ ๊ฐ€์ง€ ์œ ์šฉํ•œ ์‚ฌํ•ญ์„ ์ถ”๊ฐ€๋กœ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ ๋‹จ๊ณ„๋ณ„ ์ง€์นจ์ด์ง€๋งŒ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ด๊ฑฐ๋‚˜ ๋ฐ˜๋Œ€๋กœ ๋งค์šฐ ๊ตฌ์ฒด์ ์ธ ๊ฒฝ์šฐ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์€ AWS ์‹œ๊ฐ์  ์ฝ˜์†”์—์„œ ์ˆ˜ํ–‰๋˜์ง€๋งŒ CloudFormation ๋˜๋Š” Terraform์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์žฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Adapty์—์„œ๋Š” Terraform์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

EC2 ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ

์ด ์„œ๋น„์Šค๋Š” ์‚ฌ์šฉ๋  ์‹œ์Šคํ…œ์˜ ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์€ EC2 -> ์ธ์Šคํ„ด์Šค -> ํ…œํ”Œ๋ฆฟ ์‹œ์ž‘ ์„น์…˜์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

Amazon ๋จธ์‹  ์ด๋ฏธ์ง€(AMI) โ€” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋  ๋””์Šคํฌ ์ด๋ฏธ์ง€๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ECS์˜ ๊ฒฝ์šฐ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Amazon์—์„œ ์ตœ์ ํ™”๋œ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋ฉฐ ECS ์ž‘๋™์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ด๋ฏธ์ง€ ID๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ํ•ด๋‹น ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์„ธ์š”. Amazon ECS ์ตœ์ ํ™” AMI, ์‚ฌ์šฉ ์ค‘์ธ ์ง€์—ญ์„ ์„ ํƒํ•˜๊ณ  ํ•ด๋‹น ์ง€์—ญ์˜ AMI ID๋ฅผ ๋ณต์‚ฌํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด us-east-1 ์ง€์—ญ์˜ ๊ฒฝ์šฐ ์ž‘์„ฑ ๋‹น์‹œ์˜ ํ˜„์žฌ ID๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ami-00c7c1cf5bdc913ed. ์ด ID๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ’ ์ง€์ • ํ•ญ๋ชฉ์— ์‚ฝ์ž…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์œ ํ˜• โ€” ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์ž‘์—…์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฒƒ์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.

ํ‚ค ํŽ˜์–ด(๋กœ๊ทธ์ธ) โ€” ํ•„์š”ํ•œ ๊ฒฝ์šฐ SSH๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ธ์ฆ์„œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ์„ค์ • โ€” ๋„คํŠธ์›Œํฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํ‚น ํ”Œ๋žซํผ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Virtual Private Cloud(VPC)๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ๊ทธ๋ฃน โ€” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋ณด์•ˆ ๊ทธ๋ฃน. ์ธ์Šคํ„ด์Šค ์•ž์— ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐธ๋Ÿฐ์„œ์—์„œ๋งŒ ๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ทธ๋ฃน์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ฆ‰, 2๊ฐœ์˜ ๋ณด์•ˆ ๊ทธ๋ฃน์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํฌํŠธ 80(http) ๋ฐ 443(https)์—์„œ ์–ด๋””์—์„œ๋‚˜ ์ธ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฐธ๋Ÿฐ์„œ์šฉ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ๋ฐธ๋Ÿฐ์„œ ๊ทธ๋ฃน์˜ ๋ชจ๋“  ํฌํŠธ์—์„œ ๋“ค์–ด์˜ค๋Š” ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๋Š” ๋จธ์‹ ์šฉ์ž…๋‹ˆ๋‹ค. . ๋‘ ๊ทธ๋ฃน ๋ชจ๋‘์˜ ์•„์›ƒ๋ฐ”์šด๋“œ ์—ฐ๊ฒฐ์€ ๋ชจ๋“  ์ฃผ์†Œ์— ๋Œ€ํ•œ ๋ชจ๋“  ํฌํŠธ์— ๋Œ€ํ•œ TCP ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ด๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๊ฐ€๋Š” ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ํฌํŠธ์™€ ์ฃผ์†Œ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ซํžŒ ํฌํŠธ์—์„œ ๋ฌด์–ธ๊ฐ€์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๊ณ  ์žˆ์ง€ ์•Š์€์ง€ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€(๋ณผ๋ฅจ) โ€” ๋จธ์‹ ์˜ ๋””์Šคํฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋””์Šคํฌ ํฌ๊ธฐ๋Š” AMI์— ์ง€์ •๋œ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์„ ์ˆ˜ ์—†์œผ๋ฉฐ, ECS ์ตœ์ ํ™”์˜ ๊ฒฝ์šฐ 30GiB์ž…๋‹ˆ๋‹ค.

๊ณ ๊ธ‰ ์„ธ๋ถ€์ •๋ณด โ€” ์ถ”๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋งค ์˜ต์…˜ โ€” ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ตฌ๋งคํ•  ๊ฒƒ์ธ์ง€ ์—ฌ๋ถ€. ์›ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์ด ์ƒ์ž๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š๊ณ  Auto Scaling ๊ทธ๋ฃน์—์„œ ๊ตฌ์„ฑํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๋” ๋งŽ์€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

IAM ์ธ์Šคํ„ด์Šค ํ”„๋กœํ•„ โ€” ์ธ์Šคํ„ด์Šค๊ฐ€ ์‹œ์ž‘๋  ์—ญํ• ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ECS์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ์—ญํ• ์— ์žˆ๋Š” ๊ถŒํ•œ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ecsInstanceRole. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์—ฌ๊ธฐ์—์„œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ต์ˆ˜ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด. ์ƒ์„ฑ ํ›„ ํ…œํ”Œ๋ฆฟ์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์Œ์œผ๋กœ ๋งŽ์€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธฐ๋ณธ๊ฐ’์€ ์–ด๋””๋“  ๊ทธ๋Œ€๋กœ ๋‘˜ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” ๋ช…ํ™•ํ•œ ์„ค๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” EBS ์ตœ์ ํ™” ์ธ์Šคํ„ด์Šค์™€ T2/T3 ๋ฌด์ œํ•œ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํ•ญ์ƒ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์—ด ๊ฐ€๋Šฅ ์ธ์Šคํ„ด์Šค.

์‚ฌ์šฉ ์‹œ๊ฐ„ โ€” ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ํŽธ์ง‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. /etc/ecs/ecs.config, ECS ์—์ด์ „ํŠธ ๊ตฌ์„ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#!/bin/bash
echo ECS_CLUSTER=DemoApiClusterProd >> /etc/ecs/ecs.config
echo ECS_ENABLE_SPOT_INSTANCE_DRAINING=true >> /etc/ecs/ecs.config
echo ECS_CONTAINER_STOP_TIMEOUT=1m >> /etc/ecs/ecs.config
echo ECS_ENGINE_AUTH_TYPE=docker >> /etc/ecs/ecs.config
echo "ECS_ENGINE_AUTH_DATA={"registry.gitlab.com":{"username":"username","password":"password"}}" >> /etc/ecs/ecs.config

ECS_CLUSTER=DemoApiClusterProd โ€” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ์ง€์ •๋œ ์ด๋ฆ„์˜ ํด๋Ÿฌ์Šคํ„ฐ์— ์†ํ•ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ์ด ํด๋Ÿฌ์Šคํ„ฐ๋Š” ์ด ์„œ๋ฒ„์— ์ž‘์—…์„ ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์ง ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ECS_ENABLE_SPOT_INSTANCE_DRAINING=true โ€” ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋ฅผ ๋„๋ผ๋Š” ์‹ ํ˜ธ๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ๋ชจ๋“  ์ž‘์—…์ด Draining ์ƒํƒœ๋กœ ์ „ํ™˜๋˜์–ด์•ผ ํ•จ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ECS_CONTAINER_STOP_TIMEOUT=1m - ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” SIGINT ์‹ ํ˜ธ๋ฅผ ์ˆ˜์‹ ํ•œ ํ›„ ๋ชจ๋“  ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ธฐ๊นŒ์ง€ 1๋ถ„์„ ๊ฐ–๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ECS_ENGINE_AUTH_TYPE=docker โ€” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” Docker ์ฒด๊ณ„๊ฐ€ ์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์‚ฌ์šฉ๋จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ECS_ENGINE_AUTH_DATA=... โ€” Docker ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ํ”„๋ผ์ด๋น— ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ณต๊ฐœ์ธ ๊ฒฝ์šฐ ์•„๋ฌด๊ฒƒ๋„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Docker Hub์˜ ๊ณต๊ฐœ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ECS_ENGINE_AUTH_TYPE ะธ ECS_ENGINE_AUTH_DATA ํ•„์š” ์—†์–ด.

์•Œ๊ณ  ์œ ์šฉ: ์ƒˆ ๋ฒ„์ „์—์„œ๋Š” Docker, Linux, ECS ์—์ด์ „ํŠธ ๋“ฑ์˜ ๋ฒ„์ „์ด ์—…๋ฐ์ดํŠธ๋˜๋ฏ€๋กœ AMI๋ฅผ ์ •๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์žŠ์ง€ ์•Š์œผ๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค. ์•Œ๋ฆผ ์„ค์ • ์ƒˆ ๋ฒ„์ „ ์ถœ์‹œ์— ๋Œ€ํ•ด. ์ด๋ฉ”์ผ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ์ˆ˜๋™์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜๋„ ์žˆ๊ณ , ์—…๋ฐ์ดํŠธ๋œ AMI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์˜ ์ƒˆ ๋ฒ„์ „์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” Lambda ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

EC2 Auto Scaling ๊ทธ๋ฃน

Auto Scaling ๊ทธ๋ฃน์€ ์ธ์Šคํ„ด์Šค ์‹œ์ž‘ ๋ฐ ํ™•์žฅ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฃน์€ EC2 -> Auto Scaling -> Auto Scaling ๊ทธ๋ฃน ์„น์…˜์—์„œ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ ์‹œ์ž‘ โ€” ์ด์ „ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ฒ„์ „์„ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค.

๊ตฌ๋งค ์˜ต์…˜ ๋ฐ ์ธ์Šคํ„ด์Šค ์œ ํ˜• โ€” ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ ์ค€์ˆ˜๋Š” ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ์˜ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ๋งค ์˜ต์…˜๊ณผ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ๊ฒฐํ•ฉํ•˜๋ฉด ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜จ๋””๋งจ๋“œ ๋ฒ ์ด์Šค(์˜ต์…˜) โ€” ํ•ญ์ƒ ์ž‘๋™ํ•˜๋Š” ์ผ๋ฐ˜ ๋น„์ŠคํŒŸ ์ธ์Šคํ„ด์Šค ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋Œ€๋น„ ์˜จ๋””๋งจ๋“œ ๋น„์œจ โ€” ์ผ๋ฐ˜ ์ธ์Šคํ„ด์Šค์™€ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์˜ ๋ฐฑ๋ถ„์œจ ๋น„์œจ, 50-50์ด ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐ๋˜๊ณ , ๊ฐ ์ผ๋ฐ˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด 20-80์ด 4๊ฐœ์˜ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ธ์ƒ๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” 50-50์„ ํ‘œ์‹œํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” 20-80์„ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋ฉฐ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” 0-100์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์œ ํ˜• โ€” ์—ฌ๊ธฐ์—์„œ ํด๋Ÿฌ์Šคํ„ฐ์— ์‚ฌ์šฉ๋  ์ถ”๊ฐ€ ์ธ์Šคํ„ด์Šค ์œ ํ˜•์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ ์ด์•ผ๊ธฐ์˜ ์˜๋ฏธ๋ฅผ ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์„ ๊ฒฐ์ฝ” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๋Š” ํŠน์ • ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ œํ•œ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€์›์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์•„์‹œ๋Š” ๋ถ„์€ ๋Œ“๊ธ€๋กœ ์ฝ์–ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค)

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

๋„คํŠธ์›Œํฌ โ€” ๋„คํŠธ์›Œํฌ ์„ค์ •์—์„œ ์‹œ์Šคํ…œ์˜ VPC ๋ฐ ์„œ๋ธŒ๋„ท์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์„œ๋ธŒ๋„ท์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋“œ ๊ท ํ˜• ์กฐ์ • - ๋ฐธ๋Ÿฐ์„œ ์„ค์ •. ํ•˜์ง€๋งŒ ์ด ์ž‘์—…์€ ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒํƒœ ํ™•์ธ ๋‚˜์ค‘์— ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.

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

ํ™•์žฅ ์ •์ฑ… โ€” ์Šค์ผ€์ผ๋ง ๋งค๊ฐœ๋ณ€์ˆ˜. ๊ทธ๋Ÿฌ๋‚˜ ์‹คํ–‰ ์ค‘์ธ ECS ์ž‘์—…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šค์ผ€์ผ๋งํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๋‚˜์ค‘์— ์Šค์ผ€์ผ๋ง์„ ๊ตฌ์„ฑํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ์Šคํ„ด์Šค ์ถ•์†Œ ๋ณดํ˜ธ โ€” ์ถ•์†Œ ์‹œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋„๋ก ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค. ASG๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์ด ์žˆ๋Š” ๋จธ์‹ ์„ ์‚ญ์ œํ•˜์ง€ ์•Š๋„๋ก ์ด๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ECS ์šฉ๋Ÿ‰ ๊ณต๊ธ‰์ž๋Š” ์ž‘์—…์ด ์—†๋Š” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํƒœ๊ทธ ์ถ”๊ฐ€ โ€” ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด ๊ฒฝ์šฐ ์ƒˆ ์ธ์Šคํ„ด์Šค ํƒœ๊ทธ ์ง€์ • ํ™•์ธ๋ž€์„ ์„ ํƒํ•ด์•ผ ํ•จ). ์ด๋ฆ„ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ทธ๋ฃน ๋‚ด์—์„œ ์‹œ์ž‘๋˜๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๊ฒŒ ๋˜๋ฉฐ ์ฝ˜์†”์—์„œ ๋ณด๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

๊ทธ๋ฃน์„ ์ƒ์„ฑํ•œ ํ›„ ์ด๋ฅผ ์—ด๊ณ  ๊ณ ๊ธ‰ ๊ตฌ์„ฑ ์„น์…˜์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ ๋‹จ๊ณ„์—์„œ ์ฝ˜์†”์— ๋ชจ๋“  ์˜ต์…˜์ด ํ‘œ์‹œ๋˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

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

Application Load Balancer ๋ฐ EC2 ๋Œ€์ƒ ๊ทธ๋ฃน

๋ฐธ๋Ÿฐ์„œ๋Š” EC2 โ†’ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ โ†’ ๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์„น์…˜์—์„œ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” Application Load Balancer๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ์œ ํ˜•์˜ ๋ฐธ๋Ÿฐ์„œ ๋น„๊ต๋Š” ๋‹ค์Œ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋น„์Šค ํŽ˜์ด์ง€.

์ฒญ์ทจ์ž - ํฌํŠธ 80๊ณผ 443์„ ๋งŒ๋“ค๊ณ  ๋‚˜์ค‘์— ๋ฐธ๋Ÿฐ์„œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ 80์—์„œ 443์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

๊ฐ€์šฉ ์˜์—ญ โ€” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ ์ ‘๊ทผ์„ฑ ๊ตฌ์—ญ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ์„ค์ • ๊ตฌ์„ฑ โ€” ๋ฐธ๋Ÿฐ์„œ์˜ SSL ์ธ์ฆ์„œ๊ฐ€ ์—ฌ๊ธฐ์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํŽธ๋ฆฌํ•œ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๋‹ค ACM์—์„œ. ์ฐจ์ด์ ์— ๋Œ€ํ•ด ๋ณด์•ˆ ์ •์ฑ… ์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค ์„ ์  ์„œ๋ฅ˜ ๋น„์น˜, ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ ํƒ๋œ ์ƒํƒœ๋กœ ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ELBSecurityPolicy-2016-08. ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ์ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. DNS ์ด๋ฆ„, ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ CNAME์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Cloudflare์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

๋ณด์•ˆ ๊ทธ๋ฃน โ€” ๋ฐธ๋Ÿฐ์„œ์— ๋Œ€ํ•œ ๋ณด์•ˆ ๊ทธ๋ฃน์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ”๋กœ ์œ„์˜ EC2 ์‹œ์ž‘ ํ…œํ”Œ๋ฆฟ โ†’ ๋„คํŠธ์›Œํฌ ์„ค์ • ์„น์…˜์—์„œ ์ž์„ธํžˆ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋Œ€์ƒ ๊ทธ๋ฃน โ€” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๊ต์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๋ฐธ๋Ÿฐ์„œ์—์„œ ์‹œ์Šคํ…œ์œผ๋กœ ์š”์ฒญ์„ ๋ผ์šฐํŒ…ํ•˜๊ณ  ๊ฐ€์šฉ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ทธ๋ฃน์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋Œ€์ƒ ์œ ํ˜• ์ธ์Šคํ„ด์Šค์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ ะธ ํฌํŠธ ๋ฐธ๋Ÿฐ์„œ์™€ ์ธ์Šคํ„ด์Šค ๊ฐ„ ํ†ต์‹ ์— HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ธ์ฆ์„œ๋ฅผ ์—…๋กœ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ  ํฌํŠธ 80์„ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค.

์ƒํƒœ ํ™•์ธ โ€” ์„œ๋น„์Šค ๊ธฐ๋Šฅ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ์„œ๋น„์Šค์—์„œ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ณ„๋„์˜ ์š”์ฒญ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ๊ธฐ๋ณธ ์„ค์ •์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ ์š”์ฒญ ๊ฐ„๊ฒฉ, ์‹œ๊ฐ„ ์ดˆ๊ณผ, ์„ฑ๊ณต ์ฝ”๋“œ ๋“ฑ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ์‚ฌ์šฉ๋  Docker ์ด๋ฏธ์ง€๊ฐ€ 200 ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์„ฑ๊ณต ์ฝ”๋“œ 399-304๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

๋Œ€์ƒ ๋“ฑ๋ก โ€” ์—ฌ๊ธฐ์—์„œ๋Š” ๊ทธ๋ฃน์˜ ์ž๋™์ฐจ๊ฐ€ ์„ ํƒ๋˜์—ˆ์ง€๋งŒ ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ ECS์—์„œ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์ด ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

์•Œ๊ณ  ์œ ์šฉ: ๋ฐธ๋Ÿฐ์„œ ์ˆ˜์ค€์—์„œ๋Š” ํŠน์ • ์‹œ์ ์— S3์— ์ €์žฅ๋  ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜•์‹. ์—ฌ๊ธฐ์—์„œ ๋ถ„์„์„ ์œ„ํ•ด ํƒ€์‚ฌ ์„œ๋น„์Šค๋กœ ๋‚ด๋ณด๋‚ด๊ฑฐ๋‚˜ ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ S3์˜ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ง์ ‘ SQL ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„ํ…Œ๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ. ํŽธ๋ฆฌํ•˜๊ณ  ์ถ”๊ฐ€ ์ฝ”๋“œ ์—†์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ง€์ •๋œ ๊ธฐ๊ฐ„์ด ์ง€๋‚˜๋ฉด S3 ๋ฒ„ํ‚ท์—์„œ ๋กœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

ECS ์ž‘์—… ์ •์˜

์ด์ „ ๋‹จ๊ณ„์—์„œ๋Š” ์„œ๋น„์Šค ์ธํ”„๋ผ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒƒ์„ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ์ด์ œ ์ถœ์‹œํ•  ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ECS โ†’ ์ž‘์—… ์ •์˜ ์„น์…˜์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

์ถœ์‹œ ์œ ํ˜• ํ˜ธํ™˜์„ฑ - EC2๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ž‘์—… ์‹คํ–‰ IAM ์—ญํ•  - ์„ ํƒํ•˜๋‹ค ecsTaskExecutionRole. ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ๊ฐ€ ์ž‘์„ฑ๋˜๊ณ  ๋น„๋ฐ€ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ์ด ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ์ •์˜ ์„น์…˜์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์˜์ƒ โ€” ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๊ฐ€ ์žˆ๋Š” ์ด๋ฏธ์ง€์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” Docker Hub์˜ ๊ณต๊ฐœ ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. bitnami/๋…ธ๋“œ-์˜ˆ์ œ:0.0.1.

๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ โ€” ์ปจํ…Œ์ด๋„ˆ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ. ํ•˜๋“œ ํ•œ๋„ โ€” ํ•˜๋“œ ์ œํ•œ, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ง€์ •๋œ ๊ฐ’์„ ์ดˆ๊ณผํ•˜๋ฉด docker kill ๋ช…๋ น์ด ์‹คํ–‰๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ ํ•œ๋„ โ€” ์†Œํ”„ํŠธ ์ œํ•œ, ์ปจํ…Œ์ด๋„ˆ๋Š” ์ง€์ •๋œ ๊ฐ’์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋จธ์‹ ์— ์ž‘์—…์„ ๋ฐฐ์น˜ํ•  ๋•Œ ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ณ ๋ ค๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋จธ์‹ ์— 4GiB์˜ RAM์ด ์žˆ๊ณ  ์ปจํ…Œ์ด๋„ˆ์˜ ์†Œํ”„ํŠธ ์ œํ•œ์ด 2048MiB์ธ ๊ฒฝ์šฐ ์ด ๋จธ์‹ ์€ ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ†ตํ•ด ์ตœ๋Œ€ 2๊ฐœ์˜ ์ž‘์—…์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ 4GiB RAM์€ 4096MiB๋ณด๋‹ค ์•ฝ๊ฐ„ ์ž‘์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํด๋Ÿฌ์Šคํ„ฐ์˜ ECS ์ธ์Šคํ„ด์Šค ํƒญ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ ์ œํ•œ์€ ํ•˜๋“œ ์ œํ•œ๋ณด๋‹ค ํด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•œ ์ž‘์—…์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ œํ•œ์ด ํ•ฉ์‚ฐ๋œ๋‹ค๋Š” ์ ์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

ํฌํŠธ ๋งคํ•‘ -์— ํ˜ธ์ŠคํŠธ ํฌํŠธ 0์„ ํ‘œ์‹œํ•˜๋ฉด ํฌํŠธ๊ฐ€ ๋™์ ์œผ๋กœ ํ• ๋‹น๋˜๊ณ  ๋Œ€์ƒ ๊ทธ๋ฃน์—์„œ ๋ชจ๋‹ˆํ„ฐ๋ง๋œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ํฌํŠธ โ€” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ํฌํŠธ๋Š” ์ข…์ข… ์‹คํ–‰ ๋ช…๋ น์— ์ง€์ •๋˜๊ฑฐ๋‚˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ, Dockerfile ๋“ฑ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” 3000์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„์ปค ํŒŒ์ผ ์‚ฌ์šฉ์ค‘์ธ ์ด๋ฏธ์ง€์ž…๋‹ˆ๋‹ค.

๊ฑด๊ฐ• ์ฒดํฌ โ€” ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ ํ™•์ธ ๋งค๊ฐœ๋ณ€์ˆ˜. ๋Œ€์ƒ ๊ทธ๋ฃน์— ๊ตฌ์„ฑ๋œ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ํ˜ผ๋™ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํ™˜๊ฒฝ - ํ™˜๊ฒฝ ์„ค์ •. CPU ์œ ๋‹› - ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ๊ณผ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์„œ ์ฝ”์–ด๋Š” 1024๊ฐœ ์žฅ์น˜์ด๋ฏ€๋กœ ์„œ๋ฒ„์— ๋“€์–ผ ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ๊ฐ€ ์žˆ๊ณ  ์ปจํ…Œ์ด๋„ˆ๊ฐ€ 512๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์ด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” 4๊ฐœ์˜ ์ž‘์—…์„ ์„œ๋ฒ„ ํ•˜๋‚˜์—์„œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CPU ์žฅ์น˜๋Š” ํ•ญ์ƒ ์ฝ”์–ด ์ˆ˜์— ํ•ด๋‹นํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ์ฝ”์–ด ์ˆ˜๊ฐ€ ์กฐ๊ธˆ์ด๋ผ๋„ ์ ์„ ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

๋ช…๋ น โ€” ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ช…๋ น์œผ๋กœ, ๋ชจ๋“  ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„๋˜์–ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” gunicorn, npm ๋“ฑ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด Dockerfile์˜ CMD ์ง€์‹œ์–ด ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค npm,start.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜ โ€” ์ปจํ…Œ์ด๋„ˆ ํ™˜๊ฒฝ ๋ณ€์ˆ˜. ์ด๋Š” ๊ฐ„๋‹จํ•œ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ์ด๊ฑฐ๋‚˜ ๋‹ค์Œ์˜ ๋น„๋ฐ€ ๋ณ€์ˆ˜์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ฐ€ ๊ด€๋ฆฌ์ž ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ €์žฅ์†Œ.

์ €์žฅ ๋ฐ ๋กœ๊น… โ€” ์—ฌ๊ธฐ์„œ๋Š” CloudWatch Logs(AWS์˜ ๋กœ๊ทธ ์„œ๋น„์Šค)์— ๋กœ๊น…์„ ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด CloudWatch Logs ์ž๋™ ๊ตฌ์„ฑ ํ™•์ธ๋ž€์„ ํ™œ์„ฑํ™”ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ž‘์—… ์ •์˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด CloudWatch์— ๋กœ๊ทธ ๊ทธ๋ฃน์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋กœ๊ทธ๋Š” ๋ฌด๊ธฐํ•œ ์ €์žฅ๋˜๋ฏ€๋กœ ๋ณด์กด ๊ธฐ๊ฐ„์„ ๋งŒ๋ฃŒ๋˜์ง€ ์•Š์Œ์—์„œ ํ•„์ˆ˜ ๊ธฐ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ CloudWatch Log ๊ทธ๋ฃน์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ธฐ๊ฐ„์„ ํด๋ฆญํ•˜๊ณ  ์ƒˆ ๊ธฐ๊ฐ„์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

ECS ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ ECS ์šฉ๋Ÿ‰ ๊ณต๊ธ‰์ž

ECS โ†’ ํด๋Ÿฌ์Šคํ„ฐ ์„น์…˜์œผ๋กœ ์ด๋™ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ…œํ”Œ๋ฆฟ์œผ๋กœ EC2 Linux + ๋„คํŠธ์›Œํ‚น์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํด๋Ÿฌ์Šคํ„ฐ ์ด๋ฆ„ - ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” Launch Template ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ง€์ •๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ECS_CLUSTER, ์šฐ๋ฆฌ์˜ ๊ฒฝ์šฐ - DemoApiClusterProd. ๋นˆ ํด๋Ÿฌ์Šคํ„ฐ ์ƒ์„ฑ ํ™•์ธ๋ž€์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์„ ํƒ์ ์œผ๋กœ Container Insights๋ฅผ ํ™œ์„ฑํ™”ํ•˜์—ฌ CloudWatch์˜ ์„œ๋น„์Šค ์ง€ํ‘œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ž‘์—…์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด ECS ์ธ์Šคํ„ด์Šค ์„น์…˜์— Auto Scaling ๊ทธ๋ฃน์—์„œ ์ƒ์„ฑ๋œ ๋จธ์‹ ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

ํƒญ์œผ๋กœ ์ด๋™ ์šฉ๋Ÿ‰ ๊ณต๊ธ‰์ž ์ƒˆ ํ•ญ๋ชฉ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ECS ์ž‘์—… ์ˆ˜์— ๋”ฐ๋ผ ๋จธ์‹  ์ƒ์„ฑ ๋ฐ ์ข…๋ฃŒ๋ฅผ ์ œ์–ดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ์ƒ๊ธฐ์‹œ์ผœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ณต๊ธ‰์ž๋Š” ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์—๋งŒ ํ• ๋‹น๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

Auto Scaling ๊ทธ๋ฃน โ€” ์ด์ „์— ์ƒ์„ฑ๋œ ๊ทธ๋ฃน์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ํ™•์žฅ โ€” ๊ณต๊ธ‰์ž๊ฐ€ ์„œ๋น„์Šค๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

๋ชฉํ‘œ ์šฉ๋Ÿ‰ % โ€” ์ž‘์—…์ด ๋กœ๋“œ๋œ ๊ธฐ๊ณ„์˜ ๋ช‡ ํผ์„ผํŠธ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”? 100%๋ฅผ ์ง€์ •ํ•˜๋ฉด ๋ชจ๋“  ๋จธ์‹ ์€ ํ•ญ์ƒ ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์œผ๋กœ ๋ฐ”๋น ์ง‘๋‹ˆ๋‹ค. 50%๋ฅผ ์ง€์ •ํ•˜๋ฉด ์ž๋™์ฐจ์˜ ์ ˆ๋ฐ˜์ด ํ•ญ์ƒ ๋ฌด๋ฃŒ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ๋ถ€ํ•˜๊ฐ€ ๊ธ‰๊ฒฉํžˆ ์ฆ๊ฐ€ํ•˜๋ฉด ์ƒˆ ํƒ์‹œ๋Š” ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐฐ์น˜๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š” ์—†์ด ์ฆ‰์‹œ ๋ฌด๋ฃŒ ์ฐจ๋Ÿ‰์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ์ข…๋ฃŒ ๋ฐฉ์ง€ โ€” ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ธ‰์ž๊ฐ€ ์‚ญ์ œ๋กœ๋ถ€ํ„ฐ ์ธ์Šคํ„ด์Šค ๋ณดํ˜ธ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋จธ์‹ ์— ํ™œ์„ฑ ์ž‘์—…์ด ์—†๊ณ  ๋ชฉํ‘œ ์šฉ๋Ÿ‰%๋ฅผ ํ—ˆ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ECS ์„œ๋น„์Šค ๋ฐ ํ™•์žฅ ์„ค์ •

๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„ :) ์„œ๋น„์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์„œ๋น„์Šค ํƒญ์—์„œ ์ด์ „์— ์ƒ์„ฑ๋œ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์ด๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐœ์‚ฌ ์œ ํ˜• โ€” ์šฉ๋Ÿ‰ ๊ณต๊ธ‰์ž ์ „๋žต์œผ๋กœ ์ „ํ™˜์„ ํด๋ฆญํ•˜๊ณ  ์ด์ „์— ์ƒ์„ฑ๋œ ๊ณต๊ธ‰์ž๋ฅผ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

์ž‘์—… ์ •์˜ โ€” ์ด์ „์— ์ƒ์„ฑ๋œ ์ž‘์—… ์ •์˜์™€ ํ•ด๋‹น ๊ฐœ์ •์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์ด๋ฆ„ โ€” ํ˜ผ๋ž€์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ž‘์—… ์ •์˜์™€ ๋™์ผํ•˜๊ฒŒ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ์ข…๋ฅ˜ - ํ•ญ์ƒ ๋ณต์ œ๋ณธ.

์ž‘์—… ์ˆ˜ โ€” ์„œ๋น„์Šค์—์„œ ์›ํ•˜๋Š” ํ™œ์„ฑ ์ž‘์—… ์ˆ˜. ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํฌ๊ธฐ ์กฐ์ •์œผ๋กœ ์ œ์–ด๋˜์ง€๋งŒ ์—ฌ์ „ํžˆ ์ง€์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ตœ์†Œ ์ •์ƒ ๋น„์œจ ะธ ์ตœ๋Œ€ ๋น„์œจ โ€” ๋ฐฐํฌ ์ค‘ ์ž‘์—… ๋™์ž‘์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 100๊ณผ 200์œผ๋กœ ๋ฐฐํฌ ์‹œ ์ž‘์—… ์ˆ˜๊ฐ€ ๋ช‡ ๋ฐฐ๋กœ ์ฆ๊ฐ€ํ•œ ๋‹ค์Œ ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ๋Œ์•„์˜ด์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์‹คํ–‰ ์ค‘์ธ ์ž‘์—…์ด 1๊ฐœ(์ตœ์†Œ=0, ์ตœ๋Œ€=100)์ธ ๊ฒฝ์šฐ ๋ฐฐํฌ ์ค‘์— ํ•ด๋‹น ์ž‘์—…์ด ์ข…๋ฃŒ๋˜๊ณ  ๊ทธ ํ›„์— ์ƒˆ ์ž‘์—…์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. 1๊ฐœ์˜ ์ž‘์—…์ด ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ(์ตœ์†Œ=50, ์ตœ๋Œ€=150), 1๊ฐœ์˜ ์ž‘์—…์„ ์ ˆ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๊ฑฐ๋‚˜ XNUMX๋ฐฐ๋กœ ๋Š˜๋ฆด ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐํฌ๊ฐ€ ์ „ํ˜€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐฐํฌ ์œ ํ˜• โ€” ๋กค๋ง ์—…๋ฐ์ดํŠธ๋ฅผ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์น˜ ํ…œํ”Œ๋ฆฟ โ€” ๊ธฐ๊ณ„์— ์ž‘์—…์„ ๋ฐฐ์น˜ํ•˜๋Š” ๊ทœ์น™. ๊ธฐ๋ณธ๊ฐ’์€ AZ Balanced Spread์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ๊ฐ€์šฉ ์˜์—ญ์˜ ๋จธ์‹ ์ด ์ฆ๊ฐ€ํ•  ๋•Œ๊นŒ์ง€ ๊ฐ๊ฐ์˜ ์ƒˆ ์ž‘์—…์ด ์ƒˆ ์ธ์Šคํ„ด์Šค์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ BinPack - CPU ๋ฐ Spread - AZ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์ด ์ •์ฑ…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž‘์—…์ด CPU๋‹น ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์— ์ตœ๋Œ€ํ•œ ์กฐ๋ฐ€ํ•˜๊ฒŒ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ƒˆ ๋จธ์‹ ์„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ƒˆ ๊ฐ€์šฉ์„ฑ ์˜์—ญ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์œ ํ˜• โ€” Application Load Balancer๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค IAM ์—ญํ•  - ์„ ํƒํ•˜๋‹ค ecsServiceRole.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ ์ด๋ฆ„ โ€” ์ด์ „์— ์ƒ์„ฑ๋œ ๋ฐธ๋Ÿฐ์„œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ƒํƒœ ์ ๊ฒ€ ์œ ์˜ˆ ๊ธฐ๊ฐ„ โ€” ์ƒˆ ์ž‘์—…์„ ๋กค์•„์›ƒํ•œ ํ›„ ์ƒํƒœ ํ™•์ธ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์ผ์‹œ ์ค‘์ง€ํ•˜๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ 60์ดˆ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์„ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ โ€” ๋Œ€์ƒ ๊ทธ๋ฃน ์ด๋ฆ„ ํ•ญ๋ชฉ์—์„œ ์ด์ „์— ์ƒ์„ฑ๋œ ๊ทธ๋ฃน์„ ์„ ํƒํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

์„œ๋น„์Šค Auto Scaling โ€” ์„œ๋น„์Šค ํ™•์žฅ ๋งค๊ฐœ๋ณ€์ˆ˜. ์„œ๋น„์Šค ์ž๋™ ์กฐ์ • ๊ตฌ์„ฑ์„ ์„ ํƒํ•˜์—ฌ ์›ํ•˜๋Š” ์„œ๋น„์Šค ์ˆ˜๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ ์‹œ ์ตœ์†Œ ๋ฐ ์ตœ๋Œ€ ์ž‘์—… ์ˆ˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค Auto Scaling์„ ์œ„ํ•œ IAM ์—ญํ•  - ์„ ํƒํ•˜๋‹ค AWSServiceRoleForApplicationAutoScaling_ECSService.

์ž๋™ ์ž‘์—… ํ™•์žฅ ์ •์ฑ… โ€” ์Šค์ผ€์ผ๋ง ๊ทœ์น™. 2๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  1. ํ‘œ์  ์ถ”์  โ€” ๋ชฉํ‘œ ์ง€ํ‘œ(CPU/RAM ์‚ฌ์šฉ๋Ÿ‰ ๋˜๋Š” ๊ฐ ์ž‘์—…์— ๋Œ€ํ•œ ์š”์ฒญ ์ˆ˜)๋ฅผ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ‰๊ท  ํ”„๋กœ์„ธ์„œ ๋กœ๋“œ๊ฐ€ 85%๊ฐ€ ๋˜๊ธฐ๋ฅผ ์›ํ•˜๋ฉฐ, ์ด ๋กœ๋“œ๊ฐ€ ๋†’์•„์ง€๋ฉด ๋ชฉํ‘œ ๊ฐ’์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์ƒˆ ์ž‘์—…์ด ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๋ถ€ํ•˜๊ฐ€ ๋‚ฎ์œผ๋ฉด ์ถ•์†Œ ๋ฐฉ์ง€๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋Š” ํ•œ ์ž‘์—…์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค(์ถ•์†Œ ๋น„ํ™œ์„ฑํ™”).
  2. ๋‹จ๊ณ„ ์Šค์ผ€์ผ๋ง - ์ž„์˜์˜ ์‚ฌ๊ฑด์— ๋Œ€ํ•œ ๋ฐ˜์‘. ์—ฌ๊ธฐ์—์„œ๋Š” ์ด๋ฒคํŠธ(CloudWatch ๊ฒฝ๋ณด)์— ๋Œ€ํ•œ ๋ฐ˜์‘์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ง€์ •๋œ ์ž‘์—… ์ˆ˜๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ •ํ™•ํ•œ ์ž‘์—… ์ˆ˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ™•์žฅ ๊ทœ์น™์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์œ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์„œ๋กœ ์ถฉ๋Œํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

์ง€์นจ์„ ๋”ฐ๋ฅด๊ณ  ๋™์ผํ•œ Docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์„œ๋น„์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

AWS ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์— ํ™•์žฅ ๊ฐ€๋Šฅํ•œ API ๊ตฌ์ถ•

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

์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€๊ทœ๋ชจ ์ด๋ฉ”์ผ ์บ ํŽ˜์ธ์—์„œ ๊ด‘๊ณ ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๋กœ๋“œ๊ฐ€ ๊ธ‰์ฆํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ์„ ๊ธฐ์ค€์œผ๋กœ ํฌ๊ธฐ ์กฐ์ •์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„ํ‘œ.

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

์ŠคํŒŸ ์ธ์Šคํ„ด์Šค์™€ ECS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํฅ๋ฏธ๋กœ์šด ์‚ฌ๋ก€๋‚˜ ํ™•์žฅ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๋Œ“๊ธ€๋กœ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ๊ธฐ์  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ณง ์ฃผ๋กœ ์„œ๋ฒ„๋ฆฌ์Šค ์Šคํƒ(๋ˆ ํฌํ•จ)์—์„œ ์ดˆ๋‹น ์ˆ˜์ฒœ ๊ฐœ์˜ ๋ถ„์„ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ GitLab CI ๋ฐ Terraform Cloud๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค ๋ฐฐํฌ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ธฐ์‚ฌ๊ฐ€ ๋‚˜์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋ฅผ ๊ตฌ๋…ํ•˜๋ฉด ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋“ฑ๋ก๋œ ์‚ฌ์šฉ์ž๋งŒ ์„ค๋ฌธ ์กฐ์‚ฌ์— ์ฐธ์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ์ธ์ œ๋ฐœ

ํ”„๋กœ๋•์…˜์—์„œ ์ŠคํŒŸ ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

  • 22,2%์˜ˆ6

  • 66,7%18

  • 11,1%๊ธฐ์‚ฌ๋ฅผ ํ†ตํ•ด ์ด์— ๋Œ€ํ•ด ๋ฐฐ์› ์œผ๋ฉฐ ์ด๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค3

27๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ํˆฌํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. 5๋ช…์˜ ์‚ฌ์šฉ์ž๊ฐ€ ๊ธฐ๊ถŒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

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