๊ธ๋ก๋ฒ ์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ
๋ชฉ์ฐจ
๊ฐ์
โข
์ฝํ
์ธ ์ ์ก ๋คํธ์ํฌ ์๋น์ค(CDN)
โข
์ค๋ฆฌ์ง ์๋ฒ๋ก๋ถํฐ ์ง์ญ์ ์ผ๋ก ๋ถ์ฐ๋์ด์๋ ์บ์ ์๋ฒ๋ก ์ฝํ
์ธ ๋ถ๋ฐฐ
โฆ
์ค๋ฆฌ์ง : S3 ๋ฒํท ๋๋ HTTP ์๋ฒ (ALB ๋ EC2 ์ธ์คํด์ค)
โข
์ ์ธ๊ณ์ ๋ฐฐํฌ๋ 200๊ฐ ์ด์์ ์ฃ์ง ๋ก์ผ์ด์
์ ์ด์ฉํ์ฌ ์ฝํ
์ธ ์ ์ก
โข
์ฃ์ง ๋ก์ผ์ด์
์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ฅํ ์ ์๋ ์บ์ฑ ๊ธฐ๋ฅ์ด ์์
โข
AWS Certificate Manager, Route 53, S3๋ฑ๊ณผ ํตํฉ
CloudFront ์ํคํ ์ฒ ์์
CloudFront ์ฃผ์๊ธฐ๋ฅ
์ ์ /๋์ ์ฝํ ์ธ ๋๋ฆฌ๋ฒ๋ฆฌ
โข
์ ์ ์ฝํ
์ธ , ๋์ ์ฝํ
์ธ ๊ฐ ์กด์ฌํจ์ ๋ฐ๋ผ CloudFront๋ ์บ์ ๋์์ ์ต์ ํํ์ฌ ์ ๊ณต
์ค๋ฆฌ์ง Selection
โข
๋จ์ผ ๋ฐฐํฌ์์ ์ฌ๋ฌ ์ค๋ฆฌ์ง์ ๊ตฌ์ฑํ์ฌ ์ฝํ
์ธ ์ฒ๋ฆฌ ๊ฐ๋ฅ
โข
๊ฒฝ๋ก ํจํด์ ๋ถ์ํ์ฌ ์ค๋ฆฌ์ง ๋์์ ์ฝํ
์ธ ๋ถ์ฐ ๊ฐ๋ฅ
์ค๋ฆฌ์ง ๊ทธ๋ฃน์ ํตํ Failover
โข
์ค๋ฆฌ์ง ๊ทธ๋ฃน ๋ด ๊ธฐ๋ณธ ์ค๋ฆฌ์ง๊ณผ ๋ณด์กฐ ์ค๋ฆฌ์ง์ ๊ตฌ์ฑํ์ฌ ๊ธฐ๋ณธ ์ค๋ฆฌ์ง์์ ์๋ตํ ์ ์์ผ๋ฉด ์๋์ผ๋ก ๋ณด์กฐ ์ค๋ฆฌ์ง์ผ๋ก ๋ณํํ์ฌ Failover๋ฅผ ์ ์ง
SSL ์ง์
โข
์ฝํ
์ธ ์ ๋ํด SSL/TLS๋ฅผ ํตํด ์ ์กํ ์ ์์ผ๋ฉฐ, ๊ณ ๊ธ SSL ๊ธฐ๋ฅ์ ์๋์ผ๋ก ํ์ฑํ ๊ฐ๋ฅ
์ก์ธ์ค ์ ์ด
โข
์๋ช
๋ URL๊ณผ ์๋ช
๋ ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ํฐ ์ธ์ฆ์ ์ง์ํ์ฌ ์ธ์ฆ๋ ์ต์ข
์ฌ์ฉ์๋ง ์ก์ธ์คํ ์ ์๋๋ก ์ ํ ๊ฐ๋ฅ
Geo Restriction(์ง๋ฆฌ์ ์ ํ)
โข
ํน์ ๊ตญ๊ฐ์์์ ์ฝํ
์ธ ์ก์ธ์ค๋ฅผ ์ ํ ํ๋ ๊ธฐ๋ฅ
โข
๋ฒ๋ฅ ์ ์ธ ์ฌํญ์ผ๋ก ๊ตญ๊ฐ๋ณ๋ก ์ ์๊ถ์ด ๋ค๋ฅธ ๊ฒฝ์ฐ์ ์ฌ์ฉ๊ฐ๋ฅ
์ต์
โข
ํ์ดํธ๋ฆฌ์คํธ (Whitelist): ๋ฆฌ์คํธ์ ์๋ ๊ตญ๊ฐ๋ง ์ก์ธ์ค ํ์ฉํ๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ๊ฑฐ๋ถ
โข
๋ธ๋๋ฆฌ์คํธ (Blacklist): ๋ฆฌ์คํธ์ ์๋ ๊ตญ๊ฐ๋ง ์ก์ธ์ค ๊ฑฐ๋ถํ๊ณ ๋๋จธ์ง๋ ๋ชจ๋ ํ์ฉ
Signed URL, Signed Cookies(์๋ช ๋ URL, ์๋ช ๋ ์ฟ ํค)
โข
์๋ช
๋ URL ๋๋ ์ฟ ํค๋ฅผ ์ด์ฉํด์ ์ฝํ
์ธ ์ ์ ์ํ๋ ๊ธฐ๋ฅ
โข
URL ๋๋ ์ฟ ํค์๋ ์ฝํ
์ธ ๋ง๋ฃ๊ธฐ๊ฐ , ์ก์ธ์ค๊ฐ๋ฅํ IP ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์์
โข
์ ๋ฃ์ฝํ
์ธ ๋ ๋ณด์์ ์ํด ์ฝํ
์ธ ์ ์ ํจ ๋ง๋ฃ ๊ธฐ๊ฐ์ ์ง์ ํด์ผ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
โข
์๋ช
๋ URL ์ 1 ๊ฐ์ ํ์ผ์ 1 ๊ฐ์ ์๋ช
๋ง ์ ์ฅ (1 ๊ฐ์ ํ์ผ ์ ์์ ์ํ URL)
โข
์๋ช
๋ ์ฟ ํค๋ ํ๋์ ์ฟ ํค๋ก ์ฌ๋ฌ ๊ฐ์ ํ์ผ ์ ์ ๊ฐ๋ฅ
WAF, Shield
โข
AWS Web Application Firewall, Shield ์ ๊ฒฐํฉํด DDoS ๋ฐฉ์ด ๊ธฐ๋ฅ์ ํจ
OAI(Origin Access Identity)
โข
S3 ๋ฒํท์ OAI(Origin Access Identity) ๋ฅผ ํตํด S3 ๋ฒํท์ ์์ธ์ค๋ฅผ ํด๋ผ์ฐ๋ ํ๋ก ํธ๋ฅผ ํตํด์๋ง ํ๋๋ก ํ ์ ์์
[์ค์ต]
1.
OAI ์์ฑ ํ cloudfront์ ์๋ณธ๊ณผ ์ฐ๊ฒฐํ ๋ ์ ์ฑ
์ถ๊ฐ ์ฒดํฌ
โข
์๋์ ์ ์ฑ
์ด ์๋ณธS3์ ์๋์ผ๋ก ์ ์ฉ
{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
{
"Sid": "1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EYEHEONBZBMCN"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::hbeen-s3-cloudfront/*"
}
]
}
JSON
๋ณต์ฌ
2.
S3์ ํผ๋ธ๋ฆญ ์์ธ์ค ์ฐจ๋จ ์ ์ฉ
ํ๋๋ ๋ฒจ ์ํธํ
โข
์ ์ฉ์นด๋ ๋ฒํธ์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์ ์ถํ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ค๋ฆฌ์ง ์๋ฒ๋ก ์
๋ก๋ํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ
โข
PUT/POST ์์ฒญ์ด ์ค๋ฆฌ์ง์ผ๋ก ์ ๋ฌ๋๊ธฐ ์ ์ ์ฃ์ง๋ก์ผ์ด์
์์ ๋น๋์นญ ์ํธํ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐ๋ก ์ํธํ
โข
๋ฐ์ดํฐ๋ ํ๋ผ์ด๋น ํค๋ฅผ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์
๋ง ๋ณตํธํ ๊ฐ๋ฅ
๋น์ฉ ํจ์จ์ฑ
โข
์ผ๋ฐ ์๊ธ๊ณผ ์ฝ์ ํธ๋ํฝ ๊ฐ๋ณ ์๊ธ ์ ๊ณต
โข
AWS ํด๋ผ์ฐ๋ ์๋น์ค์ ์ค๋ฆฌ์ง์์ CloudFront ๊ฐ์ ๋ฌด๋ฃ ๋ฐ์ดํฐ ์ ์ก ๊ฐ๋ฅ
โข
S3, EC2, ELB์ ๊ฐ์ AWS ์๋น์ค๋ฅผ ์ค๋ฆฌ์ง์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ค๋ฆฌ์ง์์ CloudFront ์ฃ์ง ๋ก์ผ์ด์
์ผ๋ก ์ ์ก๋๋ ๋ฐ์ดํฐ์ ๋ํด์๋ ์๊ธ์ด ์ฒญ๊ตฌ๋์ง ์์
Labmbda@Edge
โข
CloudFront๋ฅผ ํตํด ์ ๋ฌ๋๋ ์ฝํ
์ธ ๋ฅผ ์ฌ์ฉ์ ์ง์ ํ๋ ํจ์๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ AWS Lambda๊ฐ ํ์ฅ๋ ์ปดํจํ
์๋น์ค
โข
Node.js ๋๋ Python ํจ์๋ฅผ ์์ฑํ ํ ์ฌ์ฉ์์ ๊ฐ๊น์ด ์ฃ์ง ๋ก์ผ์ด์
์์ ํด๋น ํจ์ ์คํ
โข
๋ค์๊ณผ ๊ฐ์ CloudFront ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ Lamda ํจ์ ์คํ
โฆ
CloudFront๊ฐ ์ต์ข
์ฌ์ฉ์์ ์์ฒญ์ ์์ ํ ๋
โฆ
CloudFront๊ฐ ์ค๋ฆฌ์ง์ ์์ฒญ์ ์ ๋ฌํ๊ธฐ ์
โฆ
CloudFront๊ฐ ์ค๋ฆฌ์ง์ ์๋ต์ ์์ ํ ๋
โฆ
CloudFront๊ฐ ์ต์ข
์ฌ์ฉ์์๊ฒ ์๋ต์ ๋ฐํํ๊ธฐ ์
โข
์์
โฆ
A/B ํ
์คํธ๋ฅผ ์ํด ์ฌ์ดํธ์ ๋ค์ํ ๋ฒ์ ์ ๋ณผ ์ ์๋๋ก ์ฟ ํค๋ฅผ ๊ฒ์ฌํ๊ณ URL์ ๋ค์ ์์ฑ
โฆ
User-Agent ํค๋๋ฅผ ํ์ธํ์ฌ ์ฌ์ฉ์ค์ธ ๋๋ฐ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๋ฐ์ด์ค ํ๋ฉด ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ด๋ฏธ์ง ๋ฐํ
โฆ
์ต์ข
์ฌ์ฉ์ ์์ฒญ ๋๋ ์ค๋ฆฌ์ง ์์ฒญ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋ HTTP ์๋ต ์์ฑ
โฆ
๋ฐ์ดํฐ ์ ์ก ๋น์ฉ์ ์ค์ด๊ธฐ ์ํด ์ฌ์ฉ์์๊ฒ ์ ์ก๋๋ ํ์ผ์ ์์ถ
์ฐธ๊ณ
โข
CloudFront ์ค์ ํ ์ต์ด ์ ๊ทผ ์ ์ค๋ฆฌ์ง์ผ๋ก ์ฝํ
์ธ ๋ฅผ ๋ฐ๋ ์์
์ด ํ์
โข
ํค๋ ๋ด X-Cahce ํ๋ ๊ฐ : โMiss from cloudfrontโ โ ์ฝํ
์ธ ์๋ต์ ์ฃ์ง ๋ก์ผ์ด์
์ด ์๋ ์ค๋ฆฌ์ง์ ํตํด ์๋ต์ ์ฃผ์๋ค๋ ์๋ฏธ
โข
ํค๋ ๋ด X-Cahce ํ๋ ๊ฐ : โHit from cloudfrontโ โ ์ฝํ
์ธ ์๋ต์ ์ฃ์ง ๋ก์ผ์ด์
์ด ์๋ต์ ์ฃผ์๋ค๋ ์๋ฏธ
๋ก๊น
โข
๋ก๊ทธ๋ฅผ ๊ฐ์ ๋ฆฌ์ ์ S3์ ์ถ๋ ฅ ๊ฐ๋ฅ