IaC ์์ฑ์ด ํ๋ค๊ณ ๊ท์ฐฎ์ ๋ ์ด๊ฑธ ์ฌ์ฉํด ๋ณด์ธ์. AWS Application Composer
- 2023๋ 3์ 15์ผ
- 2๋ถ ๋ถ๋
AWS Hands-on Lab #1 : IaC ์์ฑ์ด ํ๋ค๊ณ ๊ท์ฐฎ์ ๋ ์ด๊ฑธ ์จ๋ณด์ธ์. AWS Application Composer

Written by Minhyeok Cha ํ์ฌ ํด๋ผ์ฐ๋ IaC๋ ์ฃผ๋ก Terraform์ ์ฌ์ฉํ๊ฑฐ๋ AWS์ CloudFormation์ ์ฌ์ฉํด ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๊ธฐ์กด์ ์ฌ์ฉํ ์ฌ๋๋ค์ Yaml, Json ๋ฑ ๊ธฐ์กด ์์์ ๊ฐ๊ณ ์์ง๋ง ์ฒ์ ์ ํ๋ ์ฌ๋๋ค์ ์ฒ์๋ถํฐ ๋ฐฐ์ฐ๋ ๊ฒ์ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
์ด ๋ AWS Application Composer ์๋น์ค๋ฅผ ์ฌ์ฉํด IaC ์ฝ๋์์ฑ ๋ฐ ๊ณต๋ถ ์๊ฐ์ ์ค์ฌ์ค๋๋ค. ๋ฟ๋ง ์๋๋ผ ๊ธฐ์กด IaC ์ฌ์ฉ์์ธ ๊ฒฝ์ฐ ์๋ฒ๋ฆฌ์ค ํ๊ฒฝ์ ๊ตฌ์ฑํ๊ฒฝ์ IaC๋ก ๊ตฌ์ฑ ๊ด๋ฆฌ๋ฅผ ํ๋ฉด Yaml, Json ํ์ผ์ด ๋ค์์ผ ๋ ํดํ๊ธฐ๊ฐ ํ๋ค์ง๋ง AWS Application Composer๋ฅผ ์ฌ์ฉํด ๊ฐ๋จํ๊ฒ AWS ์๋ฒ๋ฆฌ์ค ์๋น์ค๋ฅผ ์ ๋ชฉ ์ํฌ ์ ์์ต๋๋ค.
AWS Application Composer๋ฅผ ์ฌ์ฉํ๋ฉด ์บ๋ฒ์ค๋ก ์ง์ ๋์์ธํ๊ณ ์ค๊ณํ ์๋น์ค๋ฅผ ๋์ด ํ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ถํฉํ๋ CloudFormation yaml ํ์ผ์ ์์ฑํ์ฌ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
AWS Application Composer๋?
AWS Application Composer๋ AWS์์ ์ ๊ณตํ๋ ์๊ฐ์ ๋๊ตฌ๋ก, ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ๋์์ฃผ๋ ์๋น์ค์ ๋๋ค.
AWS Application Composer๋ฅผ ์ฌ์ฉํ๋ฉด ์บ๋ฒ์ค๋ก ์ง์ ๋์์ธํ๊ณ ์ค๊ณํ ์๋น์ค๋ฅผ ๋์ด ํ ๋ชจ๋ฒ ์ฌ๋ก์ ๋ถํฉํ๋ CloudFormation yaml ํ์ผ์ ์์ฑํ์ฌ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.

๊ฐ๋จํ AWS ์๋ฒ๋ฆฌ์ค ํ ์คํธ ์บ๋ฒ์ค ์์ฑ
์ด๋ฒ ๊ฒ์๊ธ์์๋ ์์๋ก Game Item DB๋ฅผ AWS Application Composer๋ฅผ ์ฌ์ฉํด ๋ง๋ค์ด ๋ณด์์ต๋๋ค.
API G/W ์ DB๋ฅผ ๊ฐ๋จํ ์ฐ๊ฒฐ ํ ์ ์์์ง๋ง ์๋ก์ด ์๋น์ค์ ๊ธฐ๋ฅ์ ํ ์คํธ ๊ฒธ ๊ณต๋ถํด๋ณด๊ธฐ ์ํด SNS์ SQS๋ฅผ ์ถ๊ฐํด ๋ณด์์ต๋๋ค.
1. ์บ๋ฒ์ค ์์ฑ

์บ๋ฒ์ค๋ก ์๋น์ค๋ฅผ ๋์ดํ๊ณ ๊ฐ ๋ฆฌ์์ค ์ค์ ์ ๋๋ด๋ฉด ์ข์ธก ์๋จ์ ํ ํ๋ฆฟ์ ํตํด AWS CloudFormation์ผ๋ก IaC๋ฅผ ๋๋ฆด ์ ์๋ Yaml ํ์ผ์ด ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค.
2. ํ ์คํธ ๋ชฉ์
๊ฐ์์ ๊ฒ์ ํด๋ผ์ด์ธํธ์์ ๋์จ API ๋ฐ์ดํฐ๋ฅผ API G/W์ ์ ๋ฌ (์ด ๋ ๊ฒ์ ์ฑ์ ๋ฐ๋ก ์์์ผ๋ก API G/W์ ํ ์คํธ๋ฅผ ์ฌ์ฉ)
Lambda๋ฅผ ํตํด SNS ๋ฐ SQS๋ฅผ ํตํด ์๋ํฌ์ธํธ ์์ (์ด ๋ถ๋ถ์ ํ ์คํธ, ๊ณต๋ถ ๊ฒธ ์ฌ๋ฆฐ ๊ฑฐ๋ผ ๋ฌด์ํ์ ๋ ๋ฉ๋๋ค.)
๋ ๋ฒ์งธ Lambda์์ DynamoDB ํ ์ด๋ธ์ ์ง์ ๋ฐ Key-Value ๋งคํํ์ฌ DB ์ ์ฌ
3. Lambda ํธ๋ค๋ง ์ฝ๋ ์์ฑ

๋ฌผ๋ก ์์ ๋ณด์ด๋ฏ AWS ์๋น์ค๋ฅผ ์ฌ์ฉํ ๋์ ๊ฐ๋จํ ์ค์ ์ ์์ ๊ฐ๋ฅํ์ง๋ง, Lambda ๊ฐ์ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ์ง์ ์จ ๋ฃ์ด์ผ ํฉ๋๋ค.

์์์ ์์ฑํ Yaml ํ์ผ์ SAM์ ์ฌ์ฉํด ๋ฆฌ์์ค๋ฅผ ๊ตฌ์ฑํ ์์ ์ ๋๋ค.
AWS SAM (Serverless Application Model)
SAM์ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ธํ๋ผ ์ฝ๋๋ฅผ ์ ์ํ๊ณ ๊ด๋ฆฌ๋ฅผ ํด์ค๋๋ค. ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด ํ ํ๋ฆฟ์ ํตํด ์ธํ๋ผ๋ฅผ ์๋์ผ๋ก ์ ์ํด์ฃผ๊ณ CLI๋ฅผ ํตํด ๊ตฌ์ถ ๋ฐ ์คํ์ ๋์์ฃผ๋ AWS ํด ํท์ ๋๋ค.
SAM์ Application Composer์ ํตํฉํ์ฌ ๋ณต์ก์ฑ์ ์ถ์ํ๋ฅผ ์ํฌ ์ ์์ต๋๋ค.
์์์ ์์ฑ๋ Yaml ํ์ผ๋ก CloudFormation์ ์ฌ์ฉํ ์๋ ์์ง๋ง SAM์ CloudFormation ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ Application Composer๋ ์๋ฒ๋ฆฌ์ค ์๋น์ค๋ง ๊ตฌ์ฑํ๋ค ๋ณด๋ CloudFormation ๋ณด๋จ ์์์ ์ธ๊ธ๋ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ๊ด๋ฆฌ๊ฐ ์ฉ์ดํ SAM์์ ๊ตฌ๋ํ๋ ํธ์ด ํจ์จ์ ์ด๋ผ ์๊ฐํ์ฌ ์ฌ์ฉํด๋ดค์ต๋๋ค.
์ด๋ฒ ๊ฒ์๋ฌผ์ SAM์ ๊ด๋ จ๋ ๊ธ์ด ์๋๊ธฐ ๋๋ฌธ์ ๋์ฑ ์์ธํ ์ฌํญ์ ๋ค์์ ํ๋ฒ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
SAM ๊ตฌ์ฑ
ํด์ ์ฌ์ฉํ๊ธฐ ์ํด ๋จผ์ AWS SAM CLI๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
์ดํ ํฐ๋ฏธ๋์ ๋ค์ด๊ฐ ์์์ ์ ์ํ Yaml ๋ฐ Lambda ์ฝ๋๊ฐ ์๋ ๊ฒฝ๋ก์ ๋ค์ด๊ฐ โsam buildโ๋ฅผ ์ฌ์ฉํด ๋น๋๋ฅผ ์์ํฉ๋๋ค.

์ดํ โsam deploy โguidedโ ๋ฅผ ์ฌ์ฉํด ๋ฐฐํฌ๋ฅผ ์งํํฉ๋๋ค.


API Gateway๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ DB ์๊ธฐ

๊ฒ์ ์ฑ์ ์์๋ก ๋ค์๊ธฐ ๋๋ฌธ์ API G/W์์ ํ ์คํธ๋ฅผ ์ฌ์ฉํด ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ผ๋ก ๋ฃ๊ณ ํ ์คํธ ํด๋ณด์์ต๋๋ค.


DynamoDB ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๊ธฐ๋ก๋์ด ์๋ ๊ฑธ ํ์ธํ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
์ด๋ฒ ๋ธ๋ก๊ทธ๋ AWS ์๋ก์ด ์๋น์ค์ธ Application Composer๋ฅผ ์ฌ์ฉํ Yaml ์์ฑ๊ณผ SAM์ ์ฌ์ฉํ ์ธํ๋ผ ๋ฆฌ์์ค ๋ฐฐํฌ๋ฅผ ํด๋ณด์์ต๋๋ค.
์ฒ์๋ถํฐ ์ ์ํคํ ์ฒ๋ฅผ ์์ํ ์๋ ์๊ณ , Application Composer์์ ์์ฑ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ ธ์์ ์์ ํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ๋ ์ฝ๊ฒ ์๋ฒ๋ฆฌ์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๊ณ ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค.
๊ทธ๋ฌ๋ Terraform์ด๋ CloudFormation์ด ์ด์ฉ๋๊ณ ์๋ ๊ฒฝ์ฐ ๊ตณ์ด ํด๋น ์๋น์ค๋ฅผ ์ถ๊ฐ๋ก ์ฌ์ฉํ ๊ธฐํ๊ฐ ์์ ๊ฒ ๊ฐ์ต๋๋ค.





