๐ AWS๋ก ๋๋ฉ์ธ๊ณผ ์ ์ ์น์ฌ์ดํธ ์ฐ๊ฒฐํ๊ธฐ
์ด ๊ธ์์๋ AWS์ S3 + CloudFront + Route 53์ ์ด์ฉํด์ ์ ์ ์น์ฌ์ดํธ๋ฅผ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ๋ ๊ณผ์ ์ ์๊ฐํฉ๋๋ค.
1๏ธโฃ S3 ๋ฒํท์ผ๋ก ์ ์ ์น์ฌ์ดํธ ํธ์คํ
- S3 ๋ฒํท ์์ฑ (๋ฒํท ์ด๋ฆ = ๋๋ฉ์ธ๋ช , ์: www.example.com)
- ์ ์ ์น์ฌ์ดํธ ํธ์คํ
์ค์
- index ๋ฌธ์:
index.html
- ์ค๋ฅ ๋ฌธ์:
error.html
(์ ํ)
- index ๋ฌธ์:
- ํผ๋ธ๋ฆญ ์ ๊ทผ ํ์ฉ: ํผ๋ธ๋ฆญ ์ก์ธ์ค ์ฐจ๋จ ํด์
- ๋ฒํท ์ ์ฑ ์ถ๊ฐ:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::www.example.com/*"
}
]
}
2๏ธโฃ CloudFront ๋ฐฐํฌ ์์ฑ
- Origin Domain: S3 ์น์ฌ์ดํธ ์๋ํฌ์ธํธ ์ ๋ ฅ
- Origin Access Control(OAC) ์ค์ โ ์ฐ๊ฒฐ
- Viewer Protocol Policy: Redirect HTTP to HTTPS
- Default Root Object:
index.html
- OAC ๊ถํ์ S3์ ๋ถ์ฌ:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "cloudfront.amazonaws.com"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::www.example.com/*",
"Condition": {
"StringEquals": {
"AWS:SourceArn": "arn:aws:cloudfront::ACCOUNT_ID:distribution/DISTRIBUTION_ID"
}
}
}
]
}
3๏ธโฃ Route 53์์ ๋๋ฉ์ธ ์ฐ๊ฒฐ
- Route 53์์ ํธ์คํ ์์ญ ์์ฑ (๋๋ฉ์ธ: example.com)
- ์ธ๋ถ ๋๋ฉ์ธ์ด๋ผ๋ฉด NS ๋ ์ฝ๋ Route 53 ๊ฐ์ผ๋ก ๋ณ๊ฒฝ
- A ๋ ์ฝ๋ (Alias) ์ถ๊ฐ:
- ํ์ : A โ Alias
- Alias ๋์: CloudFront ๋ฐฐํฌ ์ ํ
โ ์ ์ ํ ์คํธ
๋ธ๋ผ์ฐ์ ์์ https://www.example.com
์
๋ ฅ โ ์ ์ ์น์ฌ์ดํธ๊ฐ ์ ์์ ์ผ๋ก ๋จ๋ฉด ์ฑ๊ณต์
๋๋ค!
๐ ๋ง๋ฌด๋ฆฌ
AWS์ ๋๋ฉ์ธ ์ฐ๊ฒฐ ํ๋ฆ์ ํ๋ฒ ์ธํ ํด๋๋ฉด ๋งค์ฐ ์์ ์ ์ด๊ณ ๋น ๋ฅธ ์ฑ๋ฅ์ ๋ณด์ฅํฉ๋๋ค. ํฅํ CI/CD๋ GitHub Actions๋ก ์๋ ๋ฐฐํฌํ๋ ๋ด์ฉ๋ ์ด์ด์ ํฌ์คํ ํ ์์ ์ ๋๋ค.