Skip to main content

12C. CloudFront ์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„ ์‚ฌ์šฉํ•˜๊ธฐ

2024๋…„ 4์›” 8์ผAbout 3 minAWScrashcoursepyrasisawsamazon-web-services

12C. CloudFront ์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„ ์‚ฌ์šฉํ•˜๊ธฐ ๊ด€๋ จ

๋ชฉ์ฐจ

์•„๋งˆ์กด ์›น ์„œ๋น„์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ 

12์žฅ - 3. CloudFront ์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„ ์‚ฌ์šฉํ•˜๊ธฐ

์•„๋งˆ์กด ์›น ์„œ๋น„์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ 

CloudFront์˜ ๊ธฐ๋ณธ ์˜ค๋ฆฌ์ง„์€ S3 ์ž…๋‹ˆ๋‹ค. S3 ์ด์™ธ์— EC2 ์ธ์Šคํ„ด์Šค, ELB, ์™ธ๋ถ€ ์›น ์„œ๋ฒ„๋ฅผ ์˜ค๋ฆฌ์ง„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„Custom Origin์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„์€ ๋™์  ์ฝ˜ํ…์ธ  ์ „์†กDynamic Content Delivery์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Node.js ํ˜น์€ PHP, JSP, ASP ๋“ฑ์˜ ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ์Šคํฌ๋ฆฝํŠธ์—์„œ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์›น ํŽ˜์ด์ง€๋ฅผ ์บ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„์„ ์‚ฌ์šฉํ•˜๋ฉด ๋™์ผํ•œ ๋„๋ฉ”์ธ์—์„œ POST, PUT, DELETE ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ๋กœ๊ทธ์ธ์ด๋‚˜ ๊ธ€ ์“ฐ๊ธฐ ๊ธฐ๋Šฅ๋„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„์˜ ํ•„์ˆ˜ ์กฐ๊ฑด์€ ์›น ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ์šด์˜์ฒด์ œ, ์›น ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ์ข…๋ฅ˜์™€๋Š” ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค.

EC2์™€ CloudFront ์—ฐ๋™ํ•˜๊ธฐ

EC2 ์ธ์Šคํ„ด์Šค์— ์›น ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  CloudFront์™€ ์—ฐ๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

EC2์™€ CloudFront ์—ฐ๋™ํ•˜๊ธฐ
EC2์™€ CloudFront ์—ฐ๋™ํ•˜๊ธฐ

์ด์ „์— ์ƒ์„ฑํ•œ EC2 ์ธ์Šคํ„ด์Šค(Example Server)๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. EC2 ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด '4.3 EC2 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑํ•˜๊ธฐ'๋ฅผ ์ฐธ์กฐํ•˜์—ฌ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค(Amazon Linux ์„ค์น˜๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค).

์›น ์„œ๋ฒ„๋Š” Node.js๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹คํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์›น ์„œ๋ฒ„๋Š” Apache๋‚˜ Nginx๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ƒ๊ด€ ์—†์Šต๋‹ˆ๋‹ค. SSH๋กœ EC2 ์ธ์Šคํ„ด์Šค (Example Server)์— ์ ‘์†ํ•œ ๋’ค ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ Node.js์™€ npm์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. Node.js ์†Œ์Šค๋ฅผ ์ปดํŒŒ์ผ ํ•˜๊ธฐ์—๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. yum์€ Amazon Linux, RHEL, CentOS์šฉ ํŒจํ‚ค์ง€ ์„ค์น˜ ๋ช…๋ น์ž…๋‹ˆ๋‹ค (Amazon Linux๋Š” EPEL ์ €์žฅ์†Œ๊ฐ€ ์ด๋ฏธ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค).

sudo yum -y install nodejs npm --enablerepo=epel

Amazon Linux, RHEL, CentOS์™€ EPEL

Amazon Linux, RHEL, CentOS๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ์šฉ ๋ฐฐํฌํŒ์ž…๋‹ˆ๋‹ค. EPEL(Extra Packages for Enterprise Linux)๋Š” ๋œป ๊ทธ๋Œ€๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Linux๋ฅผ ์œ„ํ•œ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

Amazon Linux, RHEL, CentOS์—์„œ๋Š” EPEL ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด Node.js๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Node.js๋ฅผ ํŒจํ‚ค์ง€๋กœ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰ํ•˜๊ธฐ

wget http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-x64.ta
tar vxzf node-v0.10.28-linux-x64.tar.gz

.ExampleServer๋ผ๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•œ ํ›„ express ๋ชจ๋“ˆ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

mkdir ExampleServer
cd ExampleServer
npm install express

.ExampleServer ๋””๋ ‰ํ„ฐ๋ฆฌ ์•ˆ์— ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ๋ฅผ ์—ด๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ ๋’ค app.js๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

.app.js

var express = require('express');
var app = express();

app.get(['/', '/index.html'], function (req, res) {
  res.send('Hello CloudFront - EC2');
});

app.listen(80);

ํŒŒ์ผ ์ €์žฅ์ด ๋๋‚ฌ์œผ๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์ž…๋ ฅํ•˜์—ฌ Node.js ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

sudo node app.js

์„œ๋ฒ„ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์›น ์„œ๋ฒ„์— ์ ‘์†์ด ์ž˜ ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

EC2 ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก(<FontIcon icon="iconfont icon-select"/> โ†’ )์—์„œ EC2 ์ธ์Šคํ„ด์Šค(Example Server)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ Description์—์„œ Public DNS ๋ถ€๋ถ„์ด ์ด EC2 ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
EC2 ์ธ์Šคํ„ด์Šค ๋ชฉ๋ก([INSTANCES] โ†’ [Instances])์—์„œ EC2 ์ธ์Šคํ„ด์Šค(Example Server)๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ Description์—์„œ Public DNS ๋ถ€๋ถ„์ด ์ด EC2 ์ธ์Šคํ„ด์Šค์˜ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ Public DNS ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ ์ž‘์„ฑํ•œ ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
๋ฐฉ๊ธˆ ์ž‘์„ฑํ•œ ๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ํ•ด์„ค

์›น ์„œ๋ฒ„์— ์ ‘์†๋˜์ง€ ์•Š๋Š” ๋‹ค๋ฉด EC2์˜ Security Group์—์„œ Inboud ๊ทœ์น™์— HTTP(TCP 80๋ฒˆ ํฌํŠธ)๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™ ์ถ”๊ฐ€ ๋ฐฉ๋ฒ•์€ '5์žฅ Security Group์œผ๋กœ ๋ฐฉํ™”๋ฒฝ ์„ค์ •ํ•˜๊ธฐ'๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด์ œ CloudFront ๋ฐฐํฌ ๋ชฉ๋ก์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์œ„์ชฝ <FontIcon icon="iconfont icon-select"/> ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ CloudFront ๋ฐฐํฌ ๋ชฉ๋ก์œผ๋กœ ์ด๋™ํ•˜์—ฌ ์œ„์ชฝ [Create Distribution] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ „์†ก ๋ฐฉ์‹์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋ฆฌ์ง„์ด ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋ฒ„์ด๋ฏ€๋กœ Web์˜ <FontIcon icon="iconfont icon-select"/> ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋ฆฌ์ง„์ด ์ผ๋ฐ˜์ ์ธ ์›น ์„œ๋ฒ„์ด๋ฏ€๋กœ Web์˜ [Get Started] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

์ปค์Šคํ…€ ์˜ค๋ฆฌ์ง„(EC2 ์ธ์Šคํ„ด์Šค)์„ ์‚ฌ์šฉํ•œ ๋ฐฐํฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

CloudFront ๋ฐฐํฌ ์ƒ์„ฑ ์„ค์ •
CloudFront ๋ฐฐํฌ ์ƒ์„ฑ ์„ค์ •

EC2 ์ธ์Šคํ„ด์Šค ์˜ค๋ฆฌ์ง„๊ณผ Elastic IP

EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ค๋ฆฌ์ง„์œผ๋กœ ์‚ฌ์šฉํ•  ๋•Œ๋Š” EC2 ์ธ์Šคํ„ด์Šค์— Elastic IP๋ฅผ ์—ฐ๊ฒฐํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. Elastic IP๋ฅผ ์—ฐ๊ฒฐํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ, EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด IP ์ฃผ์†Œ๊ฐ€ ๋ฐ”๋€Œ๊ธฐ ๋•Œ๋ฌธ์— Public DNS๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ดํ›„ CloudFront์—์„œ๋Š” ์˜ค๋ฆฌ์ง„์— ์ ‘์†ํ•  ์ˆ˜ ์—†์–ด์„œ, ์บ์‹œ ๊ธฐ๋Šฅ๋„ ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ์˜ค๋ฆฌ์ง„์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ผญ Elastic IP๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ด์–ด์ง€๋Š” ์„ธ๋ถ€ ์„ค์ •์ž…๋‹ˆ๋‹ค.

CloudFront ๋ฐฐํฌ ์ƒ์„ฑ ์„ค์ •
CloudFront ๋ฐฐํฌ ์ƒ์„ฑ ์„ค์ •

์ด์–ด์ง€๋Š” ์„ธ๋ถ€ ์„ค์ •์ž…๋‹ˆ๋‹ค

์‚ฌ์šฉ์ž ์ง€์ • SSL | CDN(์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ), ๋„๋ฉ”์ธ ๋“ฑ๋ก | Amazon CloudFront

์ž์ฒด ๋„๋ฉ”์ธ ์ด๋ฆ„๊ณผ ์ž์ฒด SSL ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTPS๋ฅผ ํ†ตํ•ด ์ฝ˜ํ…์ธ ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด Amazon์—์„œ ์ œ๊ณตํ•˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • SSL ์ธ์ฆ์„œ ์ง€์› ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Using HTTPS with CloudFront - Amazon CloudFront

Learn how to require HTTPS connections with CloudFront.
์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด <FontIcon icon="iconfont icon-select"/> ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ์œผ๋ฉด [Create Distribution] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

CloudFront ๋ฐฐํฌ๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฅผ ๋ณด๋ฉด ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ์ธ๋””์ผ€์ดํ„ฐ๊ฐ€ ํšŒ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๊ฐ€ ๋ชจ๋“  ์—์ง€ ๋กœ์ผ€์ด์…˜์— ์ „ํŒŒ๋˜๊ธฐ๊นŒ์ง€ ์•ฝ 15~20๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.
Status๋ฅผ ๋ณด๋ฉด InProgress๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ์ธ๋””์ผ€์ดํ„ฐ๊ฐ€ ํšŒ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐํฌ๊ฐ€ ๋ชจ๋“  ์—์ง€ ๋กœ์ผ€์ด์…˜์— ์ „ํŒŒ๋˜๊ธฐ๊นŒ์ง€ ์•ฝ 15~20๋ถ„์ด ์†Œ์š”๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ์—์ง€ ๋กœ์ผ€์ด์…˜์— ์ „ํŒŒ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Status๊ฐ€ Deployed๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

Domain Name์— CloudFront ๋ฐฐํฌ์˜ ๋„๋ฉ”์ธ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. CloudFront ๋ฐฐํฌ ๋„๋ฉ”์ธ ํ˜•ํƒœ๋Š” <FontIcon icon="fas fa-globe"/>์ด๋ฉฐ ์•ž์˜  ๋ถ€๋ถ„์€ ๋ฐฐํฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€๋‹ˆ๋‹ค.
Domain Name์— CloudFront ๋ฐฐํฌ์˜ ๋„๋ฉ”์ธ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. CloudFront ๋ฐฐํฌ ๋„๋ฉ”์ธ ํ˜•ํƒœ๋Š” http://d2patgbd6fey68.cloudfront.net์ด๋ฉฐ ์•ž์˜ d2patgbd6fey68 ๋ถ€๋ถ„์€ ๋ฐฐํฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ๋ฐ”๋€๋‹ˆ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ CloudFront์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ CloudFront์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. Node.js์—์„œ ์ž‘์„ฑํ–ˆ๋˜ ๋‚ด์šฉ์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ EC2 ์ธ์Šคํ„ด์Šค์—์„œ ์‹คํ–‰ํ•œ ์›น ์„œ๋ฒ„๋ฅผ ์˜ค๋ฆฌ์ง„์œผ๋กœ CloudFront๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์™ธ๋ถ€ ์„œ๋ฒ„์™€ CloudFront ์—ฐ๋™ํ•˜๊ธฐ

12์žฅ - 3.2. ์™ธ๋ถ€ ์„œ๋ฒ„์™€ CloudFront ์—ฐ๋™ํ•˜๊ธฐ

์•„๋งˆ์กด ์›น ์„œ๋น„์Šค๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ