๊ฐ์
์์ผ๋ก ํ๋ฌ๊ฐ AWS ECS Fargate๋ฅผ ํ์ฉํ ํ ์ธ ์ฟ ํฐ ๋ฐ๊ธ ์์คํ
์ ๊ฐ๋ฐํด๋ณด๋ ค๊ณ ํ๋ค.
์ด์ ๋ ํ๊ต ์์
์ค ํด๋ผ์ฐ๋ ์ปดํจํ
์์
์ ์ต์ข
ํ๋ก์ ํธ ๊ณผ์ ๋ฅผ ์ํํ๊ธฐ ์ํด์ ์ด๊ณ ์ถํ์ ๋์ฑ ๋ฐ์ ์์ผ ํฌํ ํด๋ฆฌ์ค๋ก๋ ์ฌ์ฉํ ์์ ์ด๋ค.
๋ชฉํ
์ฐ์ ์ด ํ๋ก์ ํธ ๋ชฉํ๋ ๋๋ฅผ ๋ฐ์ ์ํค๋๋ฐ์ ์๋ค. ๋ค์ฃฝ๋ฐ์ฃฝ ๋์ด์๋ ๊ทธ๊ฐ์ ๊ฐ๋ฐ ๊ณต๋ถ ๋ด์ฉ๋ค๊ณผ ๋ฐฐ์ฐ์ง ์์๋ ๋ด์ฉ๋ค์ ์ง์ค์ ์ผ๋ก ํ๋ฌ๊ฐ ์ํํ๋ฉด์ ๊ผญ ์ ์๋ฏธํ ๊ฒฐ๊ณผ๊ฐ ๋์์ผ๋ฉด ์ข๊ฒ ๋ค.
ํ๋ก์ ํธ ๋ชฉํ
๋น์ง๋์ค ๋ชฉํ
- ๋๊ท๋ชจ ํ ์ธ ์ฟ ํฐ ์ด๋ฒคํธ์ ์์ ์ ์ธ ์ด์ ์์คํ ๊ตฌ์ถ
- ์ ์ฐฉ์ 100๋ช ์๊ฒ ํ ์ธ ์ฟ ํฐ ๋ฐ๊ธ
- ๊ณต์ ํ๊ณ ํฌ๋ช
ํ ์ฟ ํฐ ๋ฐ๊ธ ํ๋ก์ธ์ค ์ ๊ณต
๊ธฐ์ ์ ๋ชฉํ
- ECS Fargate๋ฅผ ํ์ฉํ ์๋ฒ๋ฆฌ์ค ์ปจํ ์ด๋ ์ํคํ ์ฒ ๊ตฌํ
- ์ด๋น 1000๊ฑด ์ด์์ ๋์ ์์ฒญ ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์์คํ ๊ตฌ์ถ
- 99.9% ์ด์์ ์์คํ ๊ฐ์ฉ์ฑ ํ๋ณด
- API ์๋ต ์๊ฐ 300ms ์ดํ ์ ์ง
๊ตฌ์ฒด์ ์ธ ์ฑ๋ฅ ๋ชฉํ
- ๋์ ์ ์์ 5000๋ช ์ํฉ์์ ์์ ์ ์๋น์ค ์ ๊ณต
- ์ฟ ํฐ ๋ฐ๊ธ ์ฑ๊ณต๋ฅ 99.9% ๋ฌ์ฑ
- ์ค๋ณต ๋ฐ๊ธ ๋ฐ ๋ถ์ ๋ฐ๊ธ 0% ๋ฌ์ฑ
์ด์ ๋ชฉํ
- ๋ฌด์ค๋จ ๋ฐฐํฌ ์ฒด๊ณ ๊ตฌ์ถ
- ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๋ฐ ์๋ฆผ ์ฒด๊ณ ๊ตฌ์ถ
- ์์คํ ํ์ฅ/์ถ์ ์๋ํ
์ฐ์ ์ด์ ๋๋ก ๋ชฉํ๋ฅผ ์ก๊ณ ์ถํ์ ์ข๋ ๋ฐ์ ๋ ๋ชฉํ๋ฅผ ์ํํ ์ ์๋๋ก ํ์ฅํด๋ณผ ๊ณํ์ด๋ค.
ํ๋ก์ ํธ ํ๊ฒฝ
-
๋ฐฑ์๋: Spring Boot 3.x (Java 21)
-
ํ๋ก ํธ์๋ : Thymeleaf
-
์ปจํ ์ด๋: Docker, ECS Fargate
-
๋ฐ์ดํฐ๋ฒ ์ด์ค: RDS MySQL (์ฟ ํฐ ๋ฐ์ดํฐ ์ ์ฅ)
-
์บ์: ElasticCache Redis (์ฌ๊ณ ๊ด๋ฆฌ, ๋์์ฑ ์ ์ด)
-
๋ก๋๋ฐธ๋ฐ์: Application Load Balancer
-
CI/CD: GitHub Actions
-
๋ชจ๋ํฐ๋ง: CloudWatch
AWS ์์นด๋ฐ๋ฏธ ํ๊ฒฝ
๊ณํ
1์ฃผ์ฐจ: ๊ธฐ๋ณธ ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ ์ธํ๋ผ ์ค์
- ์ด๋ฐ 3์ผ
- Spring Boot ํ๋ก์ ํธ ์์ฑ ๋ฐ ๊ธฐ๋ณธ ์ค์
- Docker ํ๊ฒฝ ๊ตฌ์ถ ๋ฐ Dockerfile ์์ฑ
- GitHub ์ ์ฅ์ ์ค์ ๋ฐ ์ด๊ธฐ ํ๋ก์ ํธ ๊ตฌ์กฐ ์ค๊ณ
- ํ๋ฐ 4์ผ
- AWS VPC, ์๋ธ๋ท, ๋ณด์ ๊ทธ๋ฃน ๊ตฌ์ฑ
- ECS Fargate ํด๋ฌ์คํฐ ์์ฑ
- RDS MySQL, ElasticCache Redis ์ธ์คํด์ค ์์ฑ ๋ฐ ์ฐ๋
- Application Load Balancer ์ค์
2์ฃผ์ฐจ: ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ
- ์ด๋ฐ 3์ผ
- ์ฟ ํฐ ๋๋ฉ์ธ ์ค๊ณ ๋ฐ ๊ธฐ๋ณธ CRUD API ๊ตฌํ
- Redis ์ฐ๋ ๋ฐ ์ฌ๊ณ ๊ด๋ฆฌ ๋ก์ง ๊ตฌํ
- MySQL ํ ์ด๋ธ ์ค๊ณ ๋ฐ JPA ์ํฐํฐ ๋งคํ
- ํ๋ฐ 4์ผ
- ๋ถ์ฐ ๋ฝ ๊ตฌํ ๋ฐ ๋์์ฑ ์ ์ด ๋ก์ง ๊ฐ๋ฐ
- ๋ถ์ ๋ฐ๊ธ ๋ฐฉ์ง ๋ก์ง ๊ตฌํ
- ๋จ์ ํ ์คํธ ๋ฐ ํตํฉ ํ ์คํธ ์์ฑ
3์ฃผ์ฐจ: CI/CD ๋ฐ ๋ชจ๋ํฐ๋ง ๊ตฌ์ถ
- ์ด๋ฐ 3์ผ
- GitHub Actions ์ํฌํ๋ก์ฐ ์ค์
- ECR ์ ์ฅ์ ์์ฑ ๋ฐ ๋์ปค ์ด๋ฏธ์ง ๋ฐฐํฌ ์๋ํ
- ECS ๋ฐฐํฌ ํ์ดํ๋ผ์ธ ๊ตฌ์ถ
- ํ๋ฐ 4์ผ
- CloudWatch ๋์๋ณด๋ ๊ตฌ์ฑ
- ๋ก๊น ์์คํ ๊ตฌ์ถ
- ์๋ฆผ ์ค์ (CPU, ๋ฉ๋ชจ๋ฆฌ, ์๋ฌ์จ ๋ฑ)
4์ฃผ์ฐจ: ์ฑ๋ฅ ์ต์ ํ ๋ฐ ํ ์คํธ
- ์ด๋ฐ 3์ผ
- nGrinder ํ๊ฒฝ ๊ตฌ์ถ
- ๋ถํ ํ ์คํธ ์๋๋ฆฌ์ค ์์ฑ
- ์ด๊ธฐ ์ฑ๋ฅ ํ ์คํธ ์คํ
- ํ๋ฐ 4์ผ
- ํ ์คํธ ๊ฒฐ๊ณผ ๋ถ์ ๋ฐ ๋ณ๋ชฉ ์ง์ ํ์
- ์ฑ๋ฅ ์ต์ ํ ์์
- Auto Scaling ์ ์ฑ ์๋ฆฝ ๋ฐ ์ ์ฉ
5์ฃผ์ฐจ: ๋ง๋ฌด๋ฆฌ ๋ฐ ๋ฌธ์ํ
- ์ด๋ฐ 3์ผ
- README ์์ฑ
- API ๋ฌธ์ํ (Swagger)
- ํธ๋ฌ๋ธ ์ํ ๊ธฐ๋ก ์ ๋ฆฌ
- ํ๋ฐ 4์ผ
- ๋ฐํ ์๋ฃ ์ค๋น
- ์์ฐ ์์ ์ ์
- ์ต์ข ํ ์คํธ ๋ฐ ๋ฒ๊ทธ ์์
์ฃผ์์ฌํญ ๋ฐ ์ฒดํฌํฌ์ธํธ
- ๊ฐ ์ฃผ์ฐจ ๋ง์ง๋ง ๋ ์๋ ์ฃผ๊ฐ ํ๊ณ ๋ฐ ๋ค์ ์ฃผ์ฐจ ๊ณํ ์กฐ์
- ๋งค์ผ ๊ฐ๋ฐ ์ผ์ง ์์ฑ์ผ๋ก ์งํ ์ํฉ ์ถ์
- ํต์ฌ ๊ธฐ๋ฅ ๊ฐ๋ฐ ์ ๋จ์ ํ ์คํธ ํ์ ์์ฑ
- ๋ณด์ ์ค์ ๋ฐ ๋ฏผ๊ฐ ์ ๋ณด ๊ด๋ฆฌ ์ฒ ์ ๊ฐ ๊ฐ๋ฐ ์ผ์ ์ ๋์ด๋์ ๋ฐ๋ผ ์กฐ์ ์ด ๋ ์ ์์
ํ๋ ์ผ์ ์ด ๋ ๊ฒ ๊ฐ๋ค. ๋ง์ด ์ด๋ ต๊ธฐ๋ ํ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ ๊ทธ๋์๊ณ ์์ผ๋ก๋ ๊ทธ๋ด๊ฑฐ๋ค ๋๋ ํด๋ผ ๊ฒ์ด๊ณ ํด๋ผ๊ฑฐ๋ค ํ์ดํ !