Cloud Design 4th BE - 100-hours-a-week/KTB4-1st-wiki GitHub Wiki
- ๋ฐฐํฌ ๋จ์
- ๋ฐฑ์๋ ์ํ๊ฐ ๋ถ๋ฆฌ
- ๋ฐฑ์๋ ์๊ตฌ ์ฑ๋ฅ
- ์ปจํ ์ด๋ ์ด์ฉ ๋ฐฉ์
Important
๋ฐฑ์๋ ์๋น์ค๋ ๋ ๋ฆฝ๋ ์ธ์คํด์ค๋ก ํ์ฅ, ๋ฐฐํฌํ๋ค.
ํ๋ก ํธ, ๋ฐฑ์๋, AI, DB๋ ๊ฐ๊ฐ ๋ณ๋ชฉ ์ง์ ์ด ๋ค๋ฅด๊ณ , ์๊ตฌํ๋ ์ฌ์์ด ๋ค๋ฅด๋ค. ๊ฐ๊ฐ์ ์๋น์ค๋ฅผ ํ๋๋ก ๋ฌถ์ด์ ์ผ๊ด์ ์ผ๋ก ๊ฐ์๋ฅผ ๋๋ฆฌ๋ฉด ๊ฐ ์๋น์ค์์ ํ์ํ ์ฑ๋ฅ๋ณด๋ค ์ค์ ๋ก ๋ ์ ๊ฑฐ๋ ๋ง์ ์ฑ๋ฅ์ ๋ฐฐ์ ๋ฐ์ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ํ๋ก ํธ SSR์ CPU bound ์์ ์ด์ง๋ง ์คํ๋ง๋ถํธ๋ ์ปค๋ฅ์ ์ ์ ๊ฐ ๋ง์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ํ์๋ก ํ๋ ๋ฆฌ์์ค์ ํฌ๊ธฐ์ ์ข ๋ฅ๊ฐ ๋ค๋ฅด๋ค. ๊ทธ๋์ ํ๋ก ํธ ์๋น์ค์ CPU ํ ๋น์ ๋๋ฆฌ๊ธฐ ์ํด ์ธํ๋ผ๋ฅผ ๋๋ฆฌ๊ฒ ๋๋ฉด, ๋๋จธ์ง ๋ฐฑ์๋, AI ์๋ฒ์์๋ ์ฌ์ฉํ์ง ์๋ ์์์ ๋ฐฐ์ ๋ฐ์ ์ ์๋ค.
DB๋ฅผ ํฌํจํ์ฌ v1์ ์ธํ๋ผ๋ฅผ ๊ทธ๋๋ก ๋ณต์ ํ๋ ๊ฒฝ์ฐ DB๋ ํ๋์ฉ ๋์ด๋๋๋ฐ, ์ด๋ฌ๋ฉด ์ธ์คํด์ค๋ง๋ค ๋ค๋ฅธ DB๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ง์ฝ DB๋ฅผ ์ ์ธํ ์ธํ๋ผ๋ฅผ ๋ณต์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋๋ฐ, ํ๋ก ํธ์๋ ๋ถํ ๋๋ฌธ์ ๋ฐฑ์๋๋ ํจ๊ป ๋์ด๋, ํ์ ์๋ ๋ฐฑ์๋๋ง๋ค DB ์ปค๋ฅ์ ์ ์ก๋๋ค. ์ ํด ์ปค๋ฅ์ ์ ํ ์ค์ (minimumIdle)์ผ๋ก ์ค์ผ ์ ์์ง๋ง, DB ์ต๋ ์ปค๋ฅ์ ์ ๋ฐฑ์๋ ์ ร ํ ์ต๋ ํฌ๊ธฐ(maximumPoolSize)๋ก ์ก์์ผ ํ๋ฏ๋ก ๋ฐฑ์๋ ์๊ฐ ํ๋ก ํธ์๋ ๋ถํ์ ๋ฐ๋ผ ๋์ด๋๋ฉด DB์ ์ต๋ ์ปค๋ฅ์ ์ ๊ทธ๋งํผ ๋๋ฆฌ๊ฑฐ๋, ๋ฐฑ์๋๋ง๋ค ํ ์ต๋ ํฌ๊ธฐ๋ฅผ ์ค์ฌ์ผ ํ๋ค.
| ๋ณต์ ์ธ์คํด์ค ์ | HikariCP ์ต๋ ํ 10๊ฐ ร ์ธ์คํด์ค ๊ฐ์ | v1 MySQL max-connections=30
|
|---|---|---|
| 1๋ | 10 | OK |
| 3๋ | 30 | ํ๊ณ ๋๋ฌ |
| 5๋ | 50 | ์ด๊ณผ |
์์ ๊ฐ์ ์ด์ ๋ก ๋ฐฑ์๋ ์๋น์ค๋ ๋ ๋ฆฝ๋ ์ธ์คํด์ค๋ก ๋ฐฐํฌํด์ผ ํ๋ค.
๋ฐฑ์๋ ์๋น์ค๋ฅผ ๋ ๋ฆฝ ์ธ์คํด์ค๋ก ๋ฐฐํฌํ ๋, v1 ์ธํ๋ผ์์ ๊ด๋ฆฌํ๋ ๊ฐ์ ๋ถ๋ฆฌํ ํ์๊ฐ ์๋ค.
v1 ๋ฐฐํฌ์์๋ JWT์ ๋ฆฌํ๋ ์ ํ ํฐ์ MySQL์์ ๊ด๋ฆฌํ๊ณ , ๋ก๊ทธ์ธ ์ธ์ ์ ์ฌ์ฉํ์ง ์์๋ค. v2 ๋ฐฐํฌ์์๋ ์๋น์ค ํธ๋ํฝ ํ์ฅ์ ๋ฐ๋ผ ๋น ๋ฅธ ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ฅผ ์ํด์ ๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ๋ก๊ทธ์ธ ์ธ์ ์ Redis์์ ๊ด๋ฆฌํ ๊ฒ์ด๋ค.
๋ฐฑ์๋ ์๋น์ค๋ฅผ ์ฌ๋ฌ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌํ๋ ๊ฒฝ์ฐ์, ๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ๋ก๊ทธ์ธ ์ธ์ ์ ๊ฐ ์ธ์คํด์ค์์ ๊ด๋ฆฌํ๋ค๋ฉด ์ฌ์ฉ์๋ ๊ธฐ์กด์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์๋ฒ์๋ง ์์ฒญํด์ผ ํ๋ค. ์ด๋ฅผ ์ํด์ ๋ก๋๋ฐธ๋ฐ์๋ฅผ ํตํด์ ๊ณ ์ ์ธ์ (sticky-session)์ ์ ์ฉํ ์ ์๋๋ฐ, ์๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
- ์ธ์คํด์ค ์๋ฅผ ์ ๋์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ด๋ ต๋ค. ์ฐ๋ฆฌ ์๋น์ค๋ ์ฌ์ฉ์๊ฐ ํน์ ์๊ฐ๋์ ๋ชฐ๋ฆฌ๋ฏ๋ก, ์ค์ผ์ผ๋ง์ ์ฌ์ฉํด ํผํฌ ์๊ฐ๋์ ์ธ์คํด์ค ์๋ฅผ ๋๋ฆฌ๊ณ ํ๊ฐํ ์๊ฐ๋์๋ ๊ทธ ์๋ฅผ ์ค์ฌ์ผ ํ๋ค. ๊ทธ๋ฌ๋ ๊ณ ์ ์ธ์ ์ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ฉ์๊ฐ ํน์ ์ธ์คํด์ค์๋ง ํต์ ํ๋ ๊ฒ์ ๊ฐ์ ๋ก ์ค๋จํด์ผ ํ๋ค. ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ก ๋ก๊ทธ์์๋๋ ์ ๋์ ๋ฌธ์ ์ง๋ง, ๋งค์ผ ๊ฐ์ ์ผ์ด ๋ฐ๋ณต๋๋ค๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ํฐ ๋ฌธ์ ๊ฐ ๋๋ค.
- ์๋ฒ๋ฅผ ๋๋ ค๋ ๋ถํ๊ฐ ๋ฐ๋ก ๋๋์ง ์๋๋ค. ์ฌ์ฉ์๋ ํน์ ์ธ์คํด์ค๋ก๋ง ์์ฒญ์ ํด์ผํ๋ฏ๋ก ์ฌ์ฉ์๊ฐ ๋ชฐ๋ ค๋ ์ฎ๊ธธ ์ ์๋ค.
๊ณ ์ ์ธ์ ์ ์ฌ์ฉํ์ง ์๊ณ , ๋ชจ๋ ์ธ์คํด์ค์์ ๋์ผํ ๊ฐ์ ๊ฐ์ง๋๋ก ์ค์ ํ ์ ์๋ค. ๊ทธ๋ฌ๋ ์ธ์คํด์ค ์๋งํผ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ฏ๋ก(e.g. ๋ฐฑ์๋ ์ธ์คํด์ค 10๊ฐ = ์ฌ์ฉ์ A์ ๋ก๊ทธ์ธ ์ธ์ 10๊ฐ ์ ์ฅ) ์์คํ ์์ ๋ญ๋น๊ฐ ๋ฐ์ํ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์๋ฒ๋ฅผ ๋ฌด์ํ๋ก ๋ง๋ค์ด์ผ ํ๋ค. ํ์ฌ ์๋น์ค์์ ๋ฆฌํ๋ ์ ํ ํฐ๊ณผ ๋ก๊ทธ์ธ ์ธ์ ์ ๊ณต์ฉ ๊ณต๊ฐ์ ์ ์ฅํด์, ๋ชจ๋ ๋ฐฑ์๋ ์ธ์คํด์ค์์ ์ ๊ทผํ ์ ์๋ค๋ฉด ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ๋ฐ๋ผ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ธ์คํด์ค๊ฐ ํจ๊ป ์ ๊ทผํ๋ ๊ณต์ ์ ์ฅ์์์ ๊ด๋ฆฌํ๋ค.
Important
ElastiCache Serverless(Valkey)๋ฅผ ์ฌ์ฉํ๋ค. ์ ์ฝ $8~12๋ก ์ ํ์ง ์ค ๊ฐ์ฅ ์ ๋ ดํ๊ณ , ์ฌ๋ฌ AZ ๋ณต์ ์ ์๋ ์ ํ์ด ๊ธฐ๋ณธ์ผ๋ก ํฌํจ๋๋ค.
Refresh Token๊ณผ ๋ก๊ทธ์ธ ์ธ์ ์ ํฌ๊ธฐ์ ๊ฐ์๋ฅผ ์๋์ ๊ฐ์ด ๊ฐ์ ํ๋ค. ์ธ์ ๊ณผ ํค์ ํฌ๊ธฐ๋ ๋ฐฑ์๋ ๊ตฌํ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ฏ๋ก ๊ฐ์ ํ๋ค.
| ํญ๋ชฉ | ๊ฐ์ ๊ฐ์ | ํฌ๊ธฐ ๊ฐ์ | ํฉ๊ณ |
|---|---|---|---|
| Refresh Token (TTL 14์ผ) | 14์ผ ์์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ต๋ 20๋ง (MAU ์ ์ฒด) | 0.5KB | ์ฝ 100MB |
| ๋ก๊ทธ์ธ ์ธ์ | DAU 4๋ง | 1KB | ์ฝ 40MB |
| ํฉ๊ณ | ์ฝ 140MB |
- ์ฒ๋ฆฌ๋: Peak 80 RPS์์ ์์ฒญ๋ง๋ค Redis ๋ช ๋ น์ 1~2๋ฒ ๋ณด๋ด๋ ์ด๋น ์ต๋ 160๊ฑด์ด๋ค. Redis๋ ์์ ๋ ธ๋์์๋ ์ด๋น ์๋ง ๊ฑด์ ์ฒ๋ฆฌํ๋ฏ๋ก ์ฒ๋ฆฌ๋์๋ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ํ๋จํ๋ค. spare_cores-t3 nano redis ๋ฒค์น๋งํฌ
- ์ฅ์ ํ์ฉ ๊ธฐ์ค: Redis์์ ๋ก๊ทธ์ธ ์ธ์ ๊ณผ JWT ๋ฆฌํ๋ ์ ํ ํฐ๋ง์ ๊ด๋ฆฌํ๋ฏ๋ก, ๋ฐ์ดํฐ๋ ์ ์ค๋ผ๋ ๊ด์ฐฎ๋ค.(์ฌ๋ก๊ทธ์ธ์ด ํ์) ๊ทธ๋ฌ๋ Redis๊ฐ ๋ฉ์ถ๋ค๋ฉด ์ธ์ฆ์ด ํ์ํ ๋ชจ๋ ์์ฒญ์ด ๋ถ๊ฐ๋ฅํด์ง๋ฏ๋ก ํ์ฉํ ์ ์๋ค.
์ง์ ์ด์(EC2)๊ณผ ๊ด๋ฆฌํ(ElastiCache)์ ๋น๊ตํ๋ค. ์์ธ ๋ฆฌ์ ๊ณต์ ์๊ธ ๊ธฐ์ค์ด๋ฉฐ, ํ ๋ฌ์ 730์๊ฐ์ผ๋ก ๊ณ์ฐํ๋ค.
| ๋ฐฉ์ | ๊ตฌ์ฑ | ์ ๋น์ฉ | ์๋ ์ ํ | ์ถ๊ฐ ๊ด๋ฆฌ |
|---|---|---|---|---|
| EC2 ์ง์ , replica ์ฌ์ฉ | t4g.micro ร 2 + gp3 20GB ร 2 | ์ฝ $19 | ์์ | ๋ณต์ ์ค์ , ๋ฐฑ์ , ํจ์น, ์ฅ์ ์ ์ฌ๋์ด replica๋ฅผ ์น๊ฒฉํด์ผํจ |
| EC2 ์ง์ , Sentinel ์ฌ์ฉ | t4g.micro ร 3 + EBS | ์ฝ $28 | ์์ | Sentinel 3๋ ๊ตฌ์ฑ, ํด๋ผ์ด์ธํธ๋ฅผ Sentinel ๋ฐฉ์์ผ๋ก ์ค์ , ์ ํ |
| ElastiCache ๋ ธ๋, Redis OSS | cache.t4g.micro ร 2 ($0.024/h) | $35.0 | ์์ | ์๋ธ๋ท ๊ทธ๋ฃน, ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน |
| ElastiCache ๋ ธ๋, Valkey | cache.t4g.micro ร 2 ($0.0192/h) | $28.0 | ์์ | ์์ ๋์ผ |
| ElastiCache Serverless, Redis OSS | ์ต์ 1GB ๊ณผ๊ธ ($0.151/GB-h) | ์ฝ $110 | ์์ | ์์ |
| ElastiCache Serverless, Valkey | ์ฝ 0.14GB ($0.101/GB-h) | ์ฝ $12 | ์์ | ์์ |
- EC2 ์๊ธ: t4g.micro $0.0104/h, gp3 GB๋น ์ ์ฝ $0.09
- Serverless Valkey ์ ์ฅ ์๊ธ: 0.14GB ร $0.101 ร 730 โ $10.3
- Serverless Valkey ์ฒ๋ฆฌ ์๊ธ: 1KB ์ดํ ๋จ์ ์ฝ๊ธฐ, ์ฐ๊ธฐ๋ ๋ช ๋ น๋น 1 ECPU. 160 ๋ช ๋ น(80 RPS ร ๋ช ๋ น 2๊ฐ)์ ํ๋ฃจ ์ข ์ผ ๋ฐ๋๋ค๊ณ ํฌ๊ฒ ์ก์๋ ์ 4.1์ต ECPU ร $0.0027/๋ฐฑ๋ง ECPU = ์ฝ $1.1
- AWS ElastiCache pricing
- EC2๋ก ์ง์ ์ด์ํ๋ ๊ฒ์ ์ ๋ ดํ์ง ์๊ณ , ์ฌ๋์ด replica๋ฅผ ์น๊ฒฉํ๊ฑฐ๋ redis๋ฅผ ์ต์ 3๋๋ก ๊ตฌ์ฑํด์ผ ํ๋ค. ๋ํ Redis ๊ตฌ์ฑ์ด๋ ๋ฐฑ์ , ์ ํ ๋ฑ์ ์ ๋ถ ๊ด๋ฆฌํด์ผ ํ๋ค.
- ElastiCache ์ค Serverless Valkey๊ฐ ๊ฐ์ฅ ์ ๋ ดํ๊ณ ์ฌ๋ฌ AZ์ ๋ณต์ ๋๋ฏ๋ก AZ ๋ฐฐ์น๋ฅผ ๋ฐ๋ก ์ค๊ณํ ํ์๊ฐ ์๋ค. ๋ฐ๋ผ์ ElastiCache Serverless Valkey๋ฅผ ์ฌ์ฉํด ์ธ์ ๊ณผ ๋ฆฌํ๋ ์ ํ ํฐ์ ๊ด๋ฆฌํ๋ค.
- ๋ค๋ง ์ดํ ํธ๋ํฝ์ด ๋์ฑ ์ฑ์ฅํ๋ ๊ฒฝ์ฐ, ์ ์ฅ ๋ฐ์ดํฐ๊ฐ ๋์ด๋๋ ๋งํผ Serverless ์ฌ์ฉ ๋น์ฉ์ด ๋์ด๋๋ฏ๋ก ๋ ธ๋ ๋ฐฉ์์ด ๋ ์ ๋ ดํด์ง ์ ์๋ค. (e.g. MAU 500๋ง -> Refresh Token 2.5GB -> ์ต์ $184/์)
Redis Multi-AZ ํต์ ๋ฐฉ๋ฒ
- ๋ฐฑ์๋๋ ์๋ํฌ์ธํธ ์ฃผ์ ํ๋๋ก ์ ์ํ๋ค. ์ด๋ ๋ ธ๋๊ฐ primary์ธ์ง, ์ ํ์ด ์ผ์ด๋ฌ๋์ง๋ AWS๊ฐ ๊ด๋ฆฌํ๋ค.
- Redis๋ ์ธํฐ๋ท์ผ๋ก ๋๊ฐ ์ผ์ด ์์ผ๋ฏ๋ก ํ๋ผ์ด๋น ์๋ธ๋ท์ ๋๋ค. ๋ณด์๊ทธ๋ฃน์ 6379 ํฌํธ๋ฅผ ๋ฐฑ์๋ ๋ณด์๊ทธ๋ฃน์์๋ง ๋ฐ๋๋ค.
- AZ ๊ฐ ์ ์ก ๋น์ฉ์ ํ๋จ ์์๊ฐ ์๋๋ค. ์์ฒญ๋น 1KB๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ 80 RPS๊ฐ ํ๋ฃจ ์ข ์ผ Redis์ ์์ฒญํ๋ค๊ณ ๊ฐ์ ํด๋ ์ ์ฝ 207GB, ์ ๋ฐ์ด AZ๋ฅผ ๋์ผ๋ฉด ์ฝ 104GB ร ๋ฐฉํฅ๋น $0.01 ร 2 = ์ฝ ์ $2๋ค.
Important
์ธ์คํด์ค ๊ฐ ์ฑํ ๋ฉ์์ง ์ค๊ณ๋ ๋ฐฑ์๋๊ฐ ๊ฒฐ์ ํ Redis Pub/Sub์ผ๋ก ํ๊ณ , ์์์ ๋์ ํ ElastiCache Serverless(Valkey)๋ฅผ ์ฌ์ฌ์ฉํ๋ค. ์ฑํ ๋ฉ์์ง๋ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก Pub/Sub์๋ ์ ์ฅ ๋น์ฉ์ด ๋ค์ง ์๊ณ , 1:1 ๋ํ๋ฐฉ์ด๋ผ ๋ฐํ ๊ฑด์์ ๋น๋กํด ์ฒ๋ฆฌ ์๊ธ๋ง ์ถ๊ฐ๋๋ค.
๋ฐฑ์๋ ์๋ฒ๊ฐ 2๋ ์ด์์ผ๋ก ๋์ด๋๋ฉด, ํ์ฌ ์ฑํ
๊ตฌ์กฐ(Spring ๋ด์ฅ SimpleBroker)์์๋ ๊ฐ์ ์ธ์คํด์ค์ ์ฐ๊ฒฐ๋ ๊ตฌ๋
์์๊ฒ๋ง ๋ฉ์์ง๊ฐ ์ ๋ฌ๋๋ค. ๋ํ ์๋ A์ B๊ฐ ์๋ก ๋ค๋ฅธ ์ธ์คํด์ค์์ ํต์ ํ๋ฉด A์ ๋ฉ์์ง๊ฐ B์๊ฒ ๋์ฐฉํ์ง ์๋๋ค. ๋ฐ๋ผ์ ์ธ์คํด์ค ์ฌ์ด์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์ค๊ณ๊ฐ ํ์ํ๋ค. ๋ฉ์์ง๋ DB์ ๋จผ์ ์ ์ฅํ ๋ค ๋ฐํํ๋ฏ๋ก, ์ค๊ณ๋ ์ค์๊ฐ ์ ๋ฌ๋ง ๋ด๋นํ๊ณ ๊ธฐ๋ก์ DB์ ๋จ๋๋ค.
Redis Pub/Sub ๋์ ๋น์ฉ
Pub/Sub ๋ฉ์์ง๋ ๊ตฌ๋ ์์๊ฒ ์ ๋ฌ๋๋ฉด ์ฌ๋ผ์ง๊ณ ์ ์ฅ๋์ง ์์ผ๋ฏ๋ก ์ ์ฅ ์๊ธ์ด ๋์ง ์๋๋ค. ๋ฐ๋ผ์ ์๊ธ์ ์ ๋ฌ ๊ฑด์์ ๋น๋กํ๋ค. ์ฐ๋ฆฌ ์๋น์ค๋ ์ฑํ ๋ฐฉ์ด 1:1์ด๋ผ ๋ฉ์์ง ํ ๊ฑด์ ๋ฐ๋ ์ธ์คํด์ค๊ฐ ์ต๋ 2๊ฐ(๋ณด๋ธ ์ฌ๋๊ณผ ๋ฐ๋ ์ฌ๋์ ์ธ์คํด์ค)๋ค. ๋ํ๋ฐฉ ํ๋๋น ์ฑ๋ ํ๋๋ฅผ ์ฐ๊ณ , ๊ทธ ๋ฐฉ์ ์ฐธ์ฌ์๊ฐ ํต์ ํ๋ ์ธ์คํด์ค๋ง ๊ตฌ๋ ํ๋ฉด ์ฌ์ฉ์ ์๊ฐ ๋์ด๋ ๋ฉ์์ง ํ ๊ฑด์ ์ ๋ฌ ์๋ ๋์ง ์๋๋ค.
| ํญ๋ชฉ | ๊ฐ | ๋น๊ณ |
|---|---|---|
| ๋ฉ์์ง ๋ฐ์๋ | Peak 7๊ฑด/์ด | ์ฑํ ๋ฉ์์ง ์ก์์ Peak RPS |
| ํ๋ฃจ ์ข ์ผ Peak๋ก ๋ฐ๋๋ค๊ณ ๊ฐ์ ํ ์ ๋ฉ์์ง | 7 ร 86,400 ร 30 = ์ฝ 1,800๋ง ๊ฑด | |
| ๋ฉ์์ง๋น ECPU | ๋ฐํ 1 + ์ ๋ฌ ์ต๋ 2 = 3 | 1KB ์ดํ ๋ช ๋ น์ 1 ECPU |
| ์ ECPU | ์ฝ 5,400๋ง |
์ฑํ ์ค๊ณ Redis Pub/Sub ๊ตฌ์ฑ ๋ฐฉ์
| ์ ํ์ง | ์ถ๊ฐ ๋น์ฉ | ํ๋จ |
|---|---|---|
| ElastiCache Serverless, Valkey | ์ ์ฝ $0.15 | ์ ์ธํ๋ผ๊ฐ ์๊ณ , ์๊ธ์ด ๋ฉ์์ง ๊ฑด์์๋ง ๋น๋กํ๋ค. Multi-AZ์ ์๋ ์ฅ์ ์กฐ์น(primary ์ ํ) |
| ์ฑํ ์ฉ Redis EC2์ ๊ตฌ์ถ | t4g.micro ํ ๋ ์ด์, ์ ์ฝ $8 ์ด์. ๊ฐ์ฉ์ฑ์ ๊ณ ๋ ค ์ ์ฝ $19~28 | ์ ์ฅ์ด ์๋ ์ฉ๋์ธ๋ฐ๋ ์๋ฒ ๋น์ฉ์ด ๊ณ ์ ์ผ๋ก ๋๊ฐ๊ณ , ํจ์น์ ์ฅ์ ๋์์ ์ง์ ํด์ผ ํ๋ค. |
| ElastiCache ๋ ธ๋, Valkey | cache.t4g.micro ร 2 ์ฝ $28 | Serverless๊ฐ Pub/Sub์ ๋ง์ง ์์ ๋์ ๋์ฒด์์ด๋ค. ํ์์๋ ๊ณ ์ ๋น๊ฐ ๋ ํฌ๋ค |
| ์ธ๋ถ STOMP ๋ธ๋ก์ปค (Amazon MQ) | ๋ธ๋ก์ปค ์ธ์คํด์ค ์์ ๊ณผ๊ธ, ์ด์คํ ์ 2๋ (์์ธ ์๊ธ ๋ฏธํ์ธ) | Spring์ ๋ธ๋ก์ปค ์ฐ๋(enableStompBrokerRelay)์ ๊ทธ๋๋ก ์ฐ๊ณ ์ ๋ฌ ๋ณด์ฅ๋ ๋์ง๋ง, ๋ฉ์์ง๋ฅผ DB์ ์ด๋ฏธ ์ ์ฅํ๋ฏ๋ก ํ์ํ์ง ์์ |
| SNS/SQS๋ก ์ธ์คํด์ค์ ์ ๋ฌ | ํธ์ถ๋น ์์ก | |
DB ํด๋ง (๊ฐ ์ธ์คํด์ค๊ฐ chat_messages์ ์ ํ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์กฐํ) |
์ถ๊ฐ ์ธํ๋ผ ์์ | ์ธ์คํด์ค ์์ ํ์ฑ ๋ฐฉ ์์ ๋น๋กํด DB ์กฐํ๊ฐ ๋ฐ์ |
| ์ธ์คํด์ค๋ผ๋ฆฌ ์ง์ ์ ๋ฌ | ์์ | ์ค์ผ์ผ๋ง์ผ๋ก ๋ฐ๋๋ ์ธ์คํด์ค ์ฃผ์๋ฅผ ์๋ก ์์์ผ ํจ |
ElastiCache Serverless Valkey๊ฐ ์ ๋ ดํ ๋น์ฉ์ผ๋ก Multi AZ์ ์๋ ์ฅ์ ์กฐ์น๊น์ง ์ง์ํ๋ฉฐ, ๋ฐฑ์๋ ์ํ ๋ถ๋ฆฌ์์ ์ด๋ฏธ ์ฌ์ฉํ๋ ์ธํ๋ผ์ด๋ฏ๋ก ๋์ ํ๊ธฐ์ ์ ์ ํ๋ค๊ณ ํ๋จํ๋ค.
๊ทธ๋ฌ๋, ์ ๋ฌ์ ๋ณด์ฅํ์ง ์๋ ๋ฌธ์ ๊ฐ ์๋ค. Pub/Sub์ ๊ตฌ๋ ์๊ฐ ์๊ฑฐ๋ ์ฐ๊ฒฐ์ด ๋๊ธด ์๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ฒ๋ฆฐ๋ค. ๋ฉ์์ง๋ฅผ DB์ ๋จผ์ ์ ์ฅํ๋ฏ๋ก ๋์น ๋ฉ์์ง๋ ์ฌ์ฉ์๊ฐ ๋ค์ ์ ์ํ ๋ ์ฑํ ํ์คํ ๋ฆฌ ์กฐํ๋ก ๋ฐ๋๋ค. ๊ตํ ์ฝ์์ ์ก๋ ์ฑํ ์์๋ "๊ฐ๋ ์ค์๊ฐ ์ ๋ฌ์ ๋์ณ๋ ๊ธฐ๋ก์ ๋จ๋๋ค" ์์ค์ด๋ฉด ์ถฉ๋ถํ๋ค๊ณ ํ๋จํ๋ค.
์ฐ๋ฆฌ ์๋น์ค์ ํ๊ฒ์ธต์ 20, 30๋ ์์ทจ ํน์ ๊ธฐ์์ฌ์์ ์ํํ๋ ์ฌ๋์ด๋ฏ๋ก, ํธ๋ํฝ ์๊ฐ ๋ถํฌ๋ ์ด ํ๊ฒ์ธต์ด ํ๋ฐํ ์ธํฐ๋ท์ ์ฌ์ฉํ๋ ์๊ฐ์ผ๋ก ์ ํ๋ ๊ฒ์ด ํ๋นํ๋ค. 2026๋ CJ ๋ฉ์กฐ๋ฏธ๋์ด 20๋, 30๋ ํ๊ฒ ๋ฆฌํฌํธ์ "์ธํฐ๋ท ์ด์ฉ ์๊ฐ๋" ์๋ต์ ์ฐ๋ฆฌ ์๋น์ค์ ์๊ฐ๋๋ณ ๋ถํ ๋ถํฌ๋ก ๋ณธ๋ค.
CJ ๋ฉ์กฐ๋ฏธ๋์ด 2026๋ 20๋, 30๋ ์ธํฐ๋ท ์ด์ฉ ์๊ฐ๋ ์๋ฃ
- ๊ฐ์ฅ ๋ถ๋น๋ ์๊ฐ์ RPS๋ฅผ 80์ผ๋ก ๋๊ณ , ๋๋จธ์ง ๊ตฌ๊ฐ์ ์๊ฐ๋น ๊ฐ์ ๋น๋กํด ๊ณ์ฐํ๋ค.
- ๊ธฐ์ ์งํ์ ์ฌ์ผ๋ ์๋ฃ์ ๋ ์๊ฐ์ด ์์ด ๊ฐ๊ฐ 1์๊ฐ(06-07), 3์๊ฐ(23-02)์ผ๋ก ๊ฐ์ ํ๋ค. 02-06์๋ ๊ณ์ฐ ํธ์์ 0์ผ๋ก ๊ฐ์ ํ๋ค.
- 20, 30๋ ๊ฐ์ ๋จ๋ ํ๊ท ์ผ๋ก ๊ณ์ฐํ๋ค.
- RPS๋ Peak ํ์์ธ 20-23์์ 1์๊ฐ ๋น์จ์ ๋น๋กํ๊ฒ ๊ณ์ฐํ๋ค.
- e.g. ๊ธฐ์์งํ 5.5%, RPS = 80 x (5.5 / 22.8) = ์ฝ 19
| ๊ตฌ๊ฐ | ์๊ฐ | 20๋ | 30๋ | ํ๊ท | 1์๊ฐ ๋น์จ | RPS |
|---|---|---|---|---|---|---|
| ๊ธฐ์ ์งํ | 06-07 | 8.0% | 3.0% | 5.5% | 5.5 | 19 |
| ๋ฑ๊ตยท์ถ๊ทผ | 07-09 | 17.0% | 18.0% | 17.5% | 8.8 | 31 |
| ์ค์ | 09-11 | 4.5% | 11.5% | 8.0% | 4.0 | 14 |
| ์ ์ฌ | 11-14 | 15.0% | 14.5% | 14.8% | 4.9 | 17 |
| ์คํ | 14-17 | 16.0% | 14.5% | 15.3% | 5.1 | 18 |
| ํ๊ตยทํด๊ทผ | 17-20 | 25.0% | 28.0% | 26.5% | 8.8 | 31 |
| ์ ๋ | 20-23 | 66.5% | 70.5% | 68.5% | 22.8 | 80 |
| ์ฌ์ผ | 23-02 | 41.5% | 26.5% | 34.0% | 11.3 | 40 |
| ์๋ฒฝ | 02-06 | โ | โ | โ | โ | 0 |
ํผํฌ ์๊ฐ๋๋ ์ ๋ ์๊ฐ๋(20-23์)๋ก, 68.5%์ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋ค๊ณ ์๋ตํ๋ค.
ํธ๋ํฝ์ ์ธ ๋จ๊ณ๋ก ๋๋ ์ ์๋ค.
| ๋จ๊ณ | ์๊ฐ | RPS |
|---|---|---|
| ํผํฌ | 20~23์ (3์๊ฐ) | 80 |
| ์ค๊ฐ | ์ถ๊ทผ 07-09์, ํด๊ทผ 17-20์, ์ฌ์ผ 23-02์ (8์๊ฐ) | 31-40 |
| ๋ฎ์ | ๊ธฐ์ ์งํ, ๋ฎ 09-17์, ์๋ฒฝ 02-06์ (13์๊ฐ) | 0~19 |
Important
๋ฐฑ์๋ ์ปจํ ์ด๋๋ ์์ฒญ 1๊ฑด์ CPU ์ฝ 5.7 ms(80 RPS ๊ธฐ์ค)๋ฅผ ์ฐ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ ๋ถํ์ ๊ฑฐ์ ๊ด๊ณ์์ด ์ฝ 460 MiB๊ฐ ํ์ํ๋ค. ๋ฐ๋ผ์ ์ปจํ ์ด๋๋ ๋ฉ๋ชจ๋ฆฌ 1 GiB๋ก ์ถฉ๋ถํ๋ค. t4g.small(2 vCPU, 2 GiB)์ ์ปจํ ์ด๋๋ฅผ 1๊ฐ์ฉ ๋์ด ํ์ฌ ํผํฌ 80 RPS๋ฅผ 2๋(AZ๋น 1๋)๋ก ์ฒ๋ฆฌํ๊ณ , ๊ฐ์ ๊ตฌ์กฐ์์ ์ธ์คํด์ค ๋์๋ง ๋๋ ค์ ๋์ ํธ๋ํฝ์ ๋์ํ๋ค.
v2 ์ํฉ์์ ๋ฐฑ์๋ ์๋ฒ ๋ฆฌ์์ค๊ฐ ์ผ๋ง๋ ํ์ํ์ง ์ธก์ ํ๋ค.
์ธก์ ๋ฐฉ๋ฒ ๋ฐ ์กฐ๊ฑด (ํด๋ฆญํด์ ํผ์น๊ธฐ)
์ธก์ ์์ฒญ์ ๋ฐฑ์๋ ์๋ฒ์ ๋ชจ๋ API๊ฐ ์๋, user flow ์์ฒญ์์ 51%๋ก ๊ฐ์ฅ ๋ง์ด ํธ์ถ๋๋ API ๋ ๊ฐ๋ก ๋ฌผํ ์์ธ ์กฐํ์ ๋ฌผํ ๋ชฉ๋ก ์กฐํ๋ฅผ ๊ณจ๋๋ค. user flow ํ์์๋ ๊ฐ๊ฐ 27.1, 13.4 RPS์๋๋ฐ, ์กฐ๊ธ ๋ ๊ฐ๋จํ ํ์ฌ ์ธก์ ์์ฒญ์ 2:1 ๋น์จ๋ก ์กฐ์ ํ๋ค.
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์ธก์ ์ผ | 2026-10-04 |
| ์ธ์คํด์ค | EC2 t4g.large 1๋ |
| ์ด๋ฏธ์ง | ๋ฐฑ์๋ dev ์ด๋ฏธ์ง |
| ๋ฐฑ์๋ ์ปจํ ์ด๋ | CPU 1๊ฐ ์ ํ, ๋ฉ๋ชจ๋ฆฌ 2 GiB |
| DB | MySQL 8.4, ๊ฐ์ ์ธ์คํด์ค, ๋น DB์ Flyway V1 ์ ์ฉ |
| ๋ฐ์ดํฐ | ๊ทธ๋ฃน 20๊ฐ, ์ฌ์ฉ์ 2,000๋ช (v2 Peak ๋์ ์ฌ์ฉ์ ์), ๋ฌผ๊ฑด 20,000๊ฐ, ์ด๋ฏธ์ง 40,000์ฅ |
| ๋ถํ | k6 ๊ณ ์ RPS. 20 RPS ์๋ฐ์ 120์ด ํ 20 / 40 / 80 RPS ๊ฐ 180์ด |
| ์ธ์ฆ | ํ ์คํธ ์ ์ฉ JWT secret์ผ๋ก ์ฌ์ฉ์๋ณ Access Token์ ์๋ช |
| ์ ์ธํ ๊ฒ | Sentry ๋นํ์ฑํ, AI ์๋ฒยท์นด์นด์ค ํธ์ถ ์์ |
| CPU ์์ง ๊ธฐ์ค | ๊ตฌ๊ฐ ์์ยท๋์ process_cpu_time_ns_total ์ฐจ์ด |
| ๋ฉ๋ชจ๋ฆฌ ์์ง ๊ธฐ์ค | docker stats |
- CPU ์์ง ๊ธฐ์ค ์์ธ: ๊ตฌ๊ฐ ๋ process_cpu_time โ ๊ตฌ๊ฐ ์์ process_cpu_time
์ธก์ ๊ฒฐ๊ณผ
| ๋ชฉํ RPS | ์ฒ๋ฆฌ ์์ฒญ ์ | ๋ฐฑ์๋ CPU ์ฌ์ฉ ์๊ฐ | ์์ฒญ๋น CPU | ํ๊ท ์ฌ์ฉ CPU | p95 ๋ชฉ๋ก / ์์ธ | ์คํจ์จ | ์ปจํ ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ต๋ |
|---|---|---|---|---|---|---|---|
| 20 | 3,601๊ฑด | 33.7์ด | 9.35 ms | 0.19 vCPU | 16.5 / 16.5 ms | 0% | 444 MiB |
| 40 | 7,201๊ฑด | 53.1์ด | 7.37 ms | 0.29 vCPU | 15.7 / 17.0 ms | 0% | 458 MiB |
| 80 | 14,401๊ฑด | 81.7์ด | 5.67 ms | 0.45 vCPU | 15.4 / 17.0 ms | 0% | 457 MiB |
- ์์ฒญ๋น CPU = ์ ์ฒด CPU ์ฌ์ฉ ์๊ฐ / ์ฒ๋ฆฌํ ์์ฒญ ์
- 80 RPS์์๋ CPU 1๊ฐ์ 45%๋ง ์ฐ๊ณ p95๋ 17 ms๋ค. 1 vCPU๊ฐ ํ์ฌ ํผํฌ ์ ์ฒด๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ์๋ฐ์ 120์ด ๋์์ 20 RPS์์๋ p95๊ฐ ๋ชฉ๋ก 2,362 ms, ์์ธ 2,055 ms์๋ค.
- ๋ฐฑ์๋ ์ปจํ ์ด๋๋ฅผ ์ ์ธํ OS์ Docker๋ฅผ ์ํ ๋ฉ๋ชจ๋ฆฌ๋ ์ฝ 340 MiB๊ฐ ํ์ํ๋ค.
| ํ์ | vCPU / ๋ฉ๋ชจ๋ฆฌ | ๊ธฐ์ค ์ฑ๋ฅ | ์๊ฐ๋น ๋น์ฉ |
|---|---|---|---|
| t4g.micro | 2 / 1 GiB | 10% ร 2 = 0.2 vCPU | $0.0104 |
| t4g.small | 2 / 2 GiB | 20% ร 2 = 0.4 vCPU | $0.0208 |
| t4g.medium | 2 / 4 GiB | 20% ร 2 = 0.4 vCPU | $0.0416 |
- v2 ์ํฉ์ Peak RPS 80์ ๋์ํ๊ธฐ ์ํด์, ๋ฐฑ์๋ ์๋ฒ ์ธ์คํด์ค๋ ์ต์ 0.45 vCPU, ์ฝ 800 MiB(OSยทDocker ์ฝ 340 MiB + ๋ฐฑ์๋ ์ปจํ ์ด๋ ์ฝ 460 MiB) ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ๋ค.
- t4g.small 1๋๋ ๊ธฐ์ค ์ฑ๋ฅ 0.4 vCPU ์์์ ์ฝ 71 RPS๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. (0.4 vCPU รท ์์ฒญ๋น 5.67 ms) ๋ฐ๋ผ์ ๊ฐ์ฉ์ฑ ํํ์ ์ธ 2๋(AZ๋น 1๋)๋ก ํผํฌ 80 RPS๋ฅผ ๊ธฐ์ค ์ฑ๋ฅ ์์์ ์ฒ๋ฆฌํ๋ค(1๋๋น 40 RPS, 0.23 vCPU).
- AZ ํ๋๊ฐ ๋น ์ ธ๋ ๋จ์ 1๋๊ฐ ๋ฒ์คํธ(์ต๋ 2 vCPU)๋ก 80 RPS(0.45 vCPU)๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
- ๋ฉ๋ชจ๋ฆฌ 2 GiB๋ OS+Docker(์ฝ 340 MiB)์ ๋ฐฑ์๋ ์ปจํ ์ด๋(์ฝ 460 MiB)๋ฅผ ๋ฃ๊ณ ๋ ์ฌ์ ๊ฐ ์๋ค.
- t4g.micro๋ ๋ฐฑ์๋์ ์ฝ 580 MiB๋ง ๋จ์, ์์ฒญ์ด ๋ชฐ๋ฆฌ๋ฉด OOM์ผ๋ก ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ์ ์๋ค.
- ๋ฐ๋ผ์ t4g.small 1๋๋ฅผ ๋ AZ์ ์ด 2๋๋ฅผ ๋์ด ์ด์ฉํ ๊ฒ์ด๋ค.
ํ๊ณ
- ๋ฌผํ ๋ชฉ๋ก, ๋ฌผํ ์์ธ๋ง ์ธก์ ํ๋ค. ๋ก๊ทธ์ธ์ด๋ ๋ฌผ๊ฑด ๋ฑ๋ก(S3, AI ํธ์ถ), ๊ตํ, ์ฑํ ์ ์ธก์ ํ์ง ์๊ณ ์์ ์ธก์ ํ ๋ ํญ๋ชฉ๊ณผ ์์ฒญ๋น ๊ฐ์ CPU๊ฐ ํ์ํ๋ค๊ณ ๊ฐ์ ํ๋ค. ๊ทธ๋ฌ๋ ๋ก๊ทธ์ธ๊ณผ ๋ฌผ๊ฑด ๋ฑ๋ก์ ์ธ๋ถ ์๋ต์ ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ๋ก ์ค๋ ๋ ์ ์ ์๊ฐ์ด ๊ธธ ๊ฒ์ผ๋ก ์์๋๋ค.
Important
๋ฐฑ์๋๋ ECS on EC2๋ก ์ด์ํ๋ค. t4g.small 2๋(AZ๋น 1๋)์ ๋ฐฑ์๋ ํ์คํฌ๋ฅผ 1๊ฐ์ฉ ๋๋ค. ๊ฐ์ ์๊ตฌ๋ฅผ ๋ง์กฑํ๋ ์ต์ ๊ตฌ์ฑ์ผ๋ก ๋น๊ตํ๋ฉด ECS on EC2๊ฐ Fargate๋ณด๋ค ์ ์ฝ $14 ์ ๋ ดํ๋ค. ๊ธ์ก ์์ฒด๋ ์์ง๋ง, Fargate์ ๋ ๋ด๋ ๋น์ฉ์ผ๋ก ์ป๋ ์ด์ (์ธ์คํด์ค ๊ด๋ฆฌ ์๋ต, ๋น ๋ฅธ ํ์ฅ)์ ์ฐ๋ฆฌ ์ํฉ์์๋ ASG์ ์ฌ์ ์ฆ์ค๋ก ๋์ ํ ์ ์์ผ๋ฏ๋ก ๋ ๋ผ ํ์๊ฐ ์๋ค๊ณ ํ๋จํ๋ค. EC2 + ASG๋ณด๋ค๋ ์ ์ฝ $4 ๋น์ธ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ๋ฐฐํฌํ๋ ๋จ์, ์ปจํ ์ด๋๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ ECS๋ฅผ ๊ณ ๋ฅธ๋ค. ๋์ ์ธ์คํด์ค์ ํ์คํฌ ๋ ๊ณ์ธต์ ์ค์ผ์ผ๋ง์ ํจ๊ป ์ด์ํด์ผ ํ๋ค.
์ํฉ
- v2 ์ฌ์ฉ์๋ ์๋น์ค ์ค๋จ์ ์ฉ๋ฉํ์ง ์์ผ๋ฏ๋ก ๋ฐฐํฌ๋ ๋ฌด์ค๋จ์ผ๋ก ํ๋ค. ๋ฐฐํฌ ์์ ์ ํ์ด ์์ด์ง๋ฉด์ ๋ฐฐํฌ ๋น๋๊ฐ ๋์ด๋๋ค.
- 2์ฐจ ๋ฐฐํฌ๊น์ง๋ ์๋น์ค ์์ต์ด ์ ๋ค๊ณ ํ๋จํ๋ค. ๊ทธ๋์ ๊ฐ์ฉ์ฑ ํํ์ (AZ ๋ ๊ณณ์ ๋ฐฐํฌ)์ ์งํค๋ ๋ฒ์์์ ์ต์ ๋น์ฉ์ ์ฌ์ ํ 1์์๋ก ๋๋ค.
์ปจํ ์ด๋ ์ด์ฉ ๋ฐฉ์ ์ธ ๊ฐ์ง
| ํญ๋ชฉ | EC2 + ASG | ECS on EC2 | ECS on Fargate |
|---|---|---|---|
| ๊ฐ์๋ฅผ ๋ง์ถ๋ ๋์ | ์ธ์คํด์ค(ASG์ desired capacity) | ํ์คํฌ(์๋น์ค์ desired count)์ ์ธ์คํด์ค(์ฉ๋ ๊ณต๊ธ์๊ฐ ASG๋ฅผ ์กฐ์ ) | ํ์คํฌ |
| ์ปจํ ์ด๋ ์คํ ์ฃผ์ฒด | ์ธ์คํด์ค ๋ถํ ๋ ์คํ๋๋ user data ์คํฌ๋ฆฝํธ | EC2 ์ธ์คํด์ค์ ECS ์์ด์ ํธ | Fargate |
| ์คํํ ์ด๋ฏธ์ง ๋ฒ์ | ์์ ํ ํ๋ฆฟ(user data์ ์ด๋ฏธ์ง ํ๊ทธ) | ํ์คํฌ ์ ์ ๋ฆฌ๋น์ ์ ์ปจํ ์ด๋ ์ ์(container definitions) | ํ์คํฌ ์ ์ ๋ฆฌ๋น์ ์ ์ปจํ ์ด๋ ์ ์ |
| ALB ๋์ | ์ธ์คํด์ค | bridge ๋ชจ๋: ์ธ์คํด์ค(๋์ ํฌํธ) awsvpc ๋ชจ๋: ํ์คํฌ IP |
ํ์คํฌ IP(awsvpc ๊ณ ์ ) |
- ์ธ ๋ฐฉ์ ๋ชจ๋ 2๊ฐ AZ์ ์คํ ๋จ์๋ฅผ ๋๋ฉด ๊ฐ์ฉ์ฑ ํํ์ ์ ๋ง์กฑํ๋ค.
- ์๊ธ ์ฒด๊ณ๋ EC2 ๊ณ์ด๊ณผ Fargate๊ฐ ๋ค๋ฅด๋ค. EC2(t4g)๋ ์ธ์คํด์ค ๋จ์๋ก ๊ณผ๊ธํ๊ณ , CPU๋ฅผ ๊ธฐ์ค ์ฑ๋ฅ๊ณผ ํฌ๋ ๋ง ๋ฒ์คํธ๋ก ์ ๊ณตํ๋ค. Fargate๋ ์ง์ ํ vCPU์ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ๊ฐ ๊ณผ๊ธํ๊ณ , ์ง์ ํ vCPU๋ฅผ ๋ฒ์คํธ ์์ด ๋ณด์ฅํ๋ค.
- ํ์คํฌ ์ ์ ๋ฆฌ๋น์ : ํ์คํฌ ์ ์(์ด๋ฏธ์ง, CPUยท๋ฉ๋ชจ๋ฆฌ, ํ๊ฒฝ๋ณ์ ๋ฑ)๋ฅผ ๋ฐ๊ฟ ๋๋ง๋ค ๋ง๋ค์ด์ง๋ ์ ๋ฒ์
- ์์ธ ๋ฆฌ์ , ์จ๋๋งจ๋, ์ 730์๊ฐ ๊ธฐ์ค
- ๋ฐฑ์๋ ์๋ฒ ์ธก์ ์น์ ๋ฐ๋ผ Peak RPS 80์์ 0.45 vCPU๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค.
- ์ธก์ ์น์ ํ๊ณ๊ฐ ์์ผ๋ฏ๋ก, ์ฌ์ ๋ฅผ ๋๊ธฐ ์ํด AZ ์ฅ์ ๋ก ์คํ ๋จ์๊ฐ ํ๋ ๋น ์ง ์ํฉ๊น์ง Peak RPS์์
vCPU ์ฌ์ฉ ๋น์จ์ 70% ์ดํ๋ก ์ ์งํด์ผ ํ๋ค๊ณ ํ๋จํ๋ค.
| ๊ตฌ์ฑ | ์คํ ๋จ์ vCPU ์ฌ์ฉ ๋น์จ | AZ ์ฅ์ ์ vCPU ์ฌ์ฉ ๋น์จ | ์ ๋น์ฉ |
|---|---|---|---|
| Fargate 0.5 vCPU / 1 GB ร 2 | 45% | 90% | $33.2 |
| Fargate 0.5 vCPU / 1 GB ร 3 (AZ 3๊ฐ) | 30% | 45% | $49.7 |
| Fargate 1 vCPU / 2 GB ร 2 | 23% | 45% | $66.3 |
| t4g.small ร 2 (ECS on EC2) | 56% (๊ธฐ์ค ์ฑ๋ฅ 0.4 vCPU ๋๋น) | 23% (๋ฒ์คํธ ์ํ 2 vCPU ๋๋น) | $35.8 |
| t4g.small ร 2 (ASG + EC2) | ๋์ผ | ๋์ผ | $31.8 |
- Fargate: ARM64 vCPU ์๊ฐ๋น $0.03725, GB ์๊ฐ๋น $0.00409. ํ์คํฌ๋น ์์ ์คํ ๋ฆฌ์ง 20 GiB๊ฐ ์๊ธ์ ํฌํจ๋๋ค.
- t4g.small: ์๊ฐ๋น $0.0208 ร 2๋ = $30.4์ ๋ฃจํธ EBS๊ฐ ๋ํด์ง๋ค. ECS ์ต์ ํ AMI์ ๋ฃจํธ ๋ณผ๋ฅจ์ด ๊ธฐ๋ณธ 30 GiB(gp3 GB-์ $0.0912)๋ผ 2๋์ ์ $5.5๊ฐ ๋ ๋ค. EC2 + ASG๋ ์ผ๋ฐ AL2023 AMI(8 GiB)๋ฅผ ์ฐ๋ฏ๋ก ์ $31.8์ด๋ค.
Fargate 0.5 vCPU, 1 GB ๊ตฌ์ฑ์ AZ ์ฅ์ ์ ์ ํ์คํฌ๊ฐ ํ ๋น๋๊ธฐ ์ ๊น์ง vCPU์ 90%๋ฅผ ์ฌ์ฉํ๋ค. 70%๋ฅผ ๋์ผ๋ฏ๋ก ๋ ๋์ ์ฑ๋ฅ์ด ํ์ํ๊ณ , ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๋ค.
- AZ ๊ฐ์๋ฅผ ๋๋ ค ์ด ์ธ ๊ณณ์ 0.5 vCPU, 1 GB ํ์คํฌ๋ฅผ ๋๋ค.
- ํ์คํฌ ๋ฆฌ์์ค๋ฅผ 1 vCPU, 2 GB๋ก ๋๋ฆฐ๋ค. Fargate์๋ 0.75 vCPU๊ฐ ์๊ณ , 1 vCPU์ ์ต์ ๋ฉ๋ชจ๋ฆฌ๊ฐ 2 GB๋ค.
2๋ฒ์ 1๋ฒ๋ณด๋ค ๋น์ฉ์ด ์ฝ 33% ๋์ผ๋ฏ๋ก, Fargate๋ฅผ ์ด๋ค๋ฉด 1๋ฒ์ ์ด๋ค.
EC2๋ t4g.small์ ์ธ ์ ์๋ค. ํ์์๋ ๊ธฐ์ค ์ฑ๋ฅ(0.4 vCPU) ๋๋น ์ฌ์ฉ ๋น์จ์ด Fargate๋ณด๋ค ๋๋ค. ํ์ง๋ง 0.4 vCPU๋ฅผ ๋๋ ์๊ฐ๋ถํฐ๋ ์ ๋ฆฝํ ํฌ๋ ๋ง์ผ๋ก 2 vCPU๊น์ง ๋ฒ์คํธํ๋ฏ๋ก, AZ ์ฅ์ ์์๋ ์ฌ์ฉ ๋น์จ์ด ์ํ ๋๋น 23%์ ๊ทธ์น๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์๊ตฌ๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฅ ์ ๋ ดํ Fargate ๊ตฌ์ฑ($49.7)์ด ECS on EC2($35.8)๋ณด๋ค ์ ์ฝ $14, ์ฝ 1.4๋ฐฐ ๋น์ธ๋ค.
Fargate๋ฅผ ์ฐ์ง ์๋ ์ด์
Fargate๋ EC2 ๊ณ์ด๋ณด๋ค 14~18 ๋ฌ๋ฌ์ ๋ ์ ๋ ดํ์ง๋ง, "๋น์ธ์ ์ฐ์ง ์๋๋ค"๊ฐ ์๋๋ผ "๊ทธ ๋์ ๋ ๋ด๊ณ ์ป๋ ๊ฒ์ด ์ฐ๋ฆฌ์๊ฒ ํ์ํ๊ฐ"๋ก ํ๋จํ๋ค. Fargate๊ฐ ํ์ฌ ์ฐ๋ฆฌ ์๋น์ค ์ํฉ์์ EC2๋ณด๋ค ๋์ ์ ์ ๋ ๊ฐ์ง์ด๊ณ , ๋ ๋ค ์ฐ๋ฆฌ ์ํฉ์์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ ์ ์๋ค.
| Fargate์ ์ด์ | ์ฐ๋ฆฌ ์ํฉ์์์ ๋์ |
|---|---|
| ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ์ง ์๋๋ค | ์ธ์คํด์ค ๊ต์ฒด์ ๊ฐ์ ์ ์ง๋ ASG๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค. AMI ๊ฐฑ์ ์ ์ธ์คํด์ค ์๋ก ๊ณ ์นจ์ผ๋ก ๋ฐ์ํ๋ค. |
| ํ์ฅ์ด ๋น ๋ฅด๋ค. EC2๋ ์ ์ธ์คํด์ค๋ฅผ ๋์ด ๋ค์์ผ ํ์คํฌ๋ฅผ ๋ฐฐ์นํ๋ค | ํ์ฌ peak RPS ํธ๋ํฝ์ผ๋ก๋ t4g.small ํ ๋ ๋ง์ผ๋ก๋ ์๋น์ค๋ฅผ ์ ์งํ ์ ์๋ค. ์๋น์ค๊ฐ ์ ์ ๋ ์ฑ์ฅํ๋ ์ํฉ์์๋ ํผํฌ ํ์์ ๋ง์ถฐ ASG๋ก ์ธ์คํด์ค๋ฅผ ๋๋ ค์ ๋์ํ ์ ์๋ค. ํธ๋ํฝ ๊ธ์ฆ์ ์ธ๋ถ ์์ธ๋ณด๋ค ๋ด๋ถ ์ด๋ฒคํธ๋ก ์๊ธธ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ฏ๋ก, ์ด๋ฒคํธ ์ ์ ์ธ์คํด์ค๋ฅผ ์๋์ผ๋ก ๋๋ฆฐ๋ค. |
๊ฐ์ํ๋ ๊ฒ
- 80 RPS์ CPU๋ง ๋ณด๋ฉด t4g.small 1๋๋ก๋ ์ฒ๋ฆฌํ ์ ์๋ค. ํ์ง๋ง ๊ฐ์ฉ์ฑ ํํ์ ๋๋ฌธ์ 2๋๋ฅผ ๋๊ณ , ์ธ์คํด์ค๋ง๋ค ๋ฐฑ์๋ ํ๋๋ง ์คํํ๋ค.
- ๋ฉ๋ชจ๋ฆฌ๋ OS+Docker(์ฝ 340 MiB)์ ์ปจํ ์ด๋(์ฝ 460 MiB)๋ฅผ ํฉ์ณ ์ฝ 800 MiB๋ค. ์ฌ์ ๋ฅผ ๋์ด 1.5 GiB๋ก ์ก์๋ ์ธ์คํด์ค๋ง๋ค ์ฝ 500 MiB๊ฐ ํ์์๋ ์ฐ์ด์ง ์๋๋ค.
- ์์ธกํ์ง ๋ชปํ ๊ธ์ฆ์๋ Fargate๋ณด๋ค ๋ฆ๊ฒ ๋์ํ๋ค. ์ ์ธ์คํด์ค ๋ถํ , ECS ์์ด์ ํธ ๋ฑ๋ก, ํ์คํฌ ๋ฐฐ์น๋ฅผ ๊ฑฐ์ณ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
EC2 + ASG ๋์ ECS๋ฅผ ๊ณ ๋ฅด๋ ์ด์ ๋ ๊ด๋ฆฌ ๋จ์๋ค.
- ์ฐ๋ฆฌ๊ฐ ๋ฐฐํฌํ๋ ๋จ์๋ ์ปจํ ์ด๋๋ค. ASG๋ ์ธ์คํด์ค ๊ฐ์๋ง ๊ด๋ฆฌํ๊ณ , ECS๋ ์ปจํ ์ด๋(ํ์คํฌ)๋ฅผ ์ง์ ๊ด๋ฆฌํ๋ค. ๊ทธ๋์ ์ ์ฝ $4์ ๋น์ฉ ์ฐจ์ด๊ฐ ์์ด๋ ECS๋ฅผ ์ฌ์ฉํ๋ค.
- EC2 + ASG์์๋ ์ปจํ ์ด๋์ ๋ฒ์ ๊ณ ์ , ์ฅ์ ๊ต์ฒด, ๋ฌด์ค๋จ ๋ฐฐํฌ๋ฅผ user data์ ๋ฐฐํฌ ์คํฌ๋ฆฝํธ๋ก ์ง์ ๋ง๋ค์ด์ผ ํ๊ณ , ์ด ์ผ์ ๋ฐฐํฌ์ ์ฅ์ ๊ฐ ์์ ๋๋ง๋ค ๋ฐ๋ณต๋๋ค.
- ECS๋ ์ด๋ฅผ ํ์คํฌ ์ ์์ ์๋น์ค ์ค์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋์ , ์ธ์คํด์ค(์ฉ๋ ๊ณต๊ธ์)์ ํ์คํฌ(์๋น์ค) ๋ ๊ณ์ธต์ ์ค์ผ์ผ๋ง์ ์ฒ์์ ํจ๊ป ๊ตฌ์ฑํด์ผ ํ๋ ๋ถ๋ด์ ์ง๋ค.
| ์์ | EC2 + ASG | ECS on EC2 |
|---|---|---|
| ๋ฌด์ค๋จ ๋ฐฐํฌ | ์ธ์คํด์ค์ CodeDeploy ์์ด์ ํธ, appspec, ํ ์คํฌ๋ฆฝํธ๊ฐ ํ์. ์ธ์คํด์ค ๋ฌถ์ ๋จ์๋ก ์ ํ | ์ด๋ฏธ์ง๊ฐ ํ์คํฌ ์ ์์ ๊ณ ์ ๋์ด, ์ค์ผ์ผ ์์์ด๋ ๊ต์ฒด๋ก ์๊ธฐ๋ ํ์คํฌ๋ ํ์ฌ ๋ฒ์ ์ ์คํํ๋ค. CodeDeploy ECS ๋ธ๋ฃจ/๊ทธ๋ฆฐ์ ์๋น์ค ์ค์ ์ผ๋ก ์ด๋ค |
| ์ฅ์ ์ ๋ณต๊ตฌ | ASG ํฌ์ค ์ฒดํฌ ์ ํ์ ELB๋ก ๋์ด, ALB๊ฐ ์ธ์คํด์ค ํฌ์ค์ฒดํฌ ํ ASG๊ฐ ์ธ์คํด์ค ๊ต์ฒด | ํ์คํฌ ์ฅ์ : ์ฅ์ ๊ฐ ๋ฐ์ํ ํ์คํฌ๋ง ์ค์งํ๊ณ ์๋ก ๋์ด๋ค ์ธ์คํด์ค ์ฅ์ : ์ ์ธ์คํด์ค ๊ต์ฒด |
| ์ธ์คํด์ค ๊ต์ฒด | ๋์ ๊ทธ๋ฃน์ ๋ฑ๋ก ํด์ ์ง์ฐ์ด ๋๋๋ฉด ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํ๊ณ ์ธ์คํด์ค ๊ต์ฒด | ์ธ์คํด์ค ๋๋ ์ด๋์ด ์ข ๋ฃํ ์ธ์คํด์ค์ ํ์คํฌ๋ฅผ ๋ค๋ฅธ ์ธ์คํด์ค์ ๋จผ์ ๋์ด ๋ค ๊ธฐ์กด ํ์คํฌ๋ฅผ ๋ฉ์ถ๋ค |
| ๋น๋ฐ๊ฐ | user data๊ฐ SSM์์ ์ฝ์ด ํ๊ฒฝ๋ณ์๋ก ๋ฃ๋๋ค. ๊ถํ์ ์ธ์คํด์ค ํ๋กํ์ผ ๋จ์๋ค | ํ์คํฌ ์ ์ secrets๊ฐ ์ฃผ์
ํ๋ค. ๊ถํ์ ํ์คํฌ ์ญํ ๋จ์๋ค |
- ๋๋ ์ด๋: EC2 ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํ๊ฑฐ๋ ๊ต์ฒดํ ๋ ์คํ ์ค์ธ ํ์คํฌ(Task)๋ฅผ ์์ ํ๊ฒ ์ค์งํ๊ณ , ์๋ก์ด ํ์คํฌ๊ฐ ํด๋น ์ธ์คํด์ค์ ๋ฐฐ์น๋์ง ์๋๋ก ์ํ๋ฅผ ์ ํํ๋ ๊ธฐ๋ฅ ๊ณต์๋ฌธ์
| ํญ๋ชฉ | ๊ฐ |
|---|---|
| ์ธ์คํด์ค | t4g.small 2๋ (AZ๋น 1๋), ECS์ Capacity Provider๋ ASG |
| ํ์คํฌ | ์ธ์คํด์ค๋น ํ์์ 1๊ฐ. ์ปจํ
์ด๋ cpu๋ ๊ฐ์ค์น๋ง ๋๋ค. memoryReservation ์ฝ 512 MiB |
| ๋คํธ์ํฌ | bridge ๋ชจ๋ |
| ๋ฐฐํฌ ์ ๋ต | ๋ธ๋ฃจ/๊ทธ๋ฆฐ ๋ฌด์ค๋จ ๋ฐฐํฌ. AWS CodeDeploy๋ฅผ ์ด์ฉํด AllAtOnce ๋ฐฉ์์ผ๋ก ์ ๋ฒ์ ์ Task๋ฅผ ๋์์ ๋ฐฐํฌ |
๋คํธ์ํฌ ๋ชจ๋
- awsvpc ๋ชจ๋: ECS์์ Task์ ENI๋ฅผ ์ง์ ํ ๋นํ์ฌ, EC2 ์ธ์คํด์ค์ ๋์ผํ ์์ค์ ๋
๋ฆฝ๋ ํ๋ผ์ด๋น IPv4 ์ฃผ์์ ๋คํธ์ํฌ ์์ฑ์ ๋ถ์ฌํ๋ ๋คํธ์ํน ๋ชจ๋
- Task์ private IPv4 ์ฃผ์๋ฅผ ๋ฐ์ผ๋ฏ๋ก ๋ฐฑ์๋์์ ์นด์นด์ค OAuth ์์๋ฐ์ด๋ ํธ๋ํฝ์ ํ์ฉํ๊ธฐ ์ํด NAT ๊ฒ์ดํธ์จ์ด๊ฐ ํ์ํจ
- bridge ๋ชจ๋: ์ปจํ
์ด๋๊ฐ ์ธ์คํด์ค์ ๋คํธ์ํฌ๋ฅผ ๊ฑฐ์ณ ๋๊ฐ๋ฏ๋ก ์ธ์คํด์ค ๊ณต์ธ IP๋ก ์ธ๋ถ์ ์ฐ๊ฒฐ
- ์ปจํ ์ด๋ 8080์ ์ธ์คํด์ค์ ๋์ ํฌํธ์ ๋งคํ
- ALB ๋์ ์ ํ์ instance
์ฃผ์์ฌํญ
์คํ ๋จ์์ ์๋น์ค ์ข ๋ฅ๊ฐ ๋์ด AMI์ ์ฉ๋ ๊ณต๊ธ์ ๊ด๋ฆฌ๊ฐ ์๋น์ค ๋น์ฉ ์ฐจ์ก์ธ ์ $18๋ณด๋ค ํฐ ๋ถ๋ด์ด ๋๋ฉด Fargate๋ฅผ ๋ค์ ๋น๊ตํ๋ค. ํ์คํฌ ์ ์๋ ๊ทธ๋๋ก ์ธ ์ ์์ง๋ง ์๋น์ค์ ์ฉ๋ ๊ณต๊ธ์ ์ ํ์ ๋ฐ๋ก ๋ฐ๊ฟ ์ ์์ผ๋ฏ๋ก, ์ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ALB์์ ํธ๋ํฝ์ ๋๊ธด๋ค.
์ฐธ๊ณ ์๋ฃ (ํด๋ฆญํด์ ํผ์น๊ธฐ)
-
AWS Fargate ์๊ธ
- ํ์คํฌ 1๊ฐ ์๊ฐ๋น = vCPU ์ ร $0.03725 + ๋ฉ๋ชจ๋ฆฌ GB ร $0.00409
- 0.5 ร 0.03725 + 1 ร 0.00409 = $0.022715 = ์ฝ $33.2