๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[AWS] AWS CloudFront + Lambda@Edge ๋ฅผ ํ†ตํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋ณธ๋ฌธ

๐—ฃ๐—ฟ๐—ผ๐—ด๐—ฟ๐—ฎ๐—บ๐—บ๐—ถ๐—ป๐—ด๐Ÿ’ป/๐€๐–๐’

[AWS] AWS CloudFront + Lambda@Edge ๋ฅผ ํ†ตํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•

๐ŸคRyusun๐Ÿค 2025. 4. 3. 11:00

์ด์ „ ๊ธ€์—์„œ Lambda๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ๋ฆฌ์‚ฌ์ด์ง• ํ›„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

https://ryusunny.tistory.com/153

 

[AWS] S3 + Lambda ๋ฅผ ํ†ตํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• (macOS sharp ๋ชจ๋“ˆ ์˜ค๋ฅ˜, ๋ฌดํ•œ ๋ฆฌ์‚ฌ์ด์ง• ์˜ค๋ฅ˜)

๋ฒ„ํ‚ท ์ƒ์„ฑ, ๋žŒ๋‹ค ์ƒ์„ฑ, IAM ์—ญํ•  ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ๋” ์ž˜ ์„ค๋ช…๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋œ๋‹ค.https://oliveyoung.tech/2023-05-19/aws-lambda-resize/ AWS Lambda Image Resize ๋„์ž…๊ธฐ | ์˜ฌ๋ฆฌ

ryusunny.tistory.com

 

ํ•˜์ง€๋งŒ ์ด ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  1. /origin ๊ฒฝ๋กœ์— ์›๋ณธ ์ด๋ฏธ์ง€, /resized ๊ฒฝ๋กœ์— ๋ฆฌ์‚ฌ์ด์ฆˆ๋œ ์ด๋ฏธ์ง€๊ฐ€ S3์— ์ €์žฅ๋˜์–ด ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  2. ํด๋ผ์ด์–ธํŠธ์—์„œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ(์˜ˆ: ์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์ŠคํŽ™ ๋ณ€๊ฒฝ), ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์‹œ ํ•„์š”ํ•œ ์ด๋ฏธ์ง€์˜ ์‚ฌ์ด์ฆˆ์— ๋งž๊ฒŒ ๋ฆฌ์‚ฌ์ด์ง• ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

 

CloudFront์™€ Lambda@Edge๋ฅผ ํ™œ์šฉํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

 

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CloudFront์™€ Lambda@Edge๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญ ์‹œ์ ์— ๋™์ ์œผ๋กœ ๋ฆฌ์‚ฌ์ด์ง•ํ•˜๋Š” ๋ฐฉ์‹์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์‚ฌ์šฉ์ž๊ฐ€ ํŠน์ • ํฌ๊ธฐ์˜ ์ด๋ฏธ์ง€๋ฅผ ์š”์ฒญํ•˜๋ฉด CloudFront๊ฐ€ ์š”์ฒญ์„ Lambda@Edge๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  2. Lambda@Edge๋Š” S3์—์„œ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์š”์ฒญ๋œ ํฌ๊ธฐ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ณ€ํ™˜๋œ ์ด๋ฏธ์ง€๋Š” CloudFront์— ์บ์‹ฑ๋˜๋ฏ€๋กœ ๋™์ผํ•œ ์š”์ฒญ์ด ๋ฐ˜๋ณต๋  ๊ฒฝ์šฐ Lambda@Edge์˜ ๋ฆฌ์‚ฌ์ด์ง• ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์ฆ‰์‹œ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ๋ถˆํ•„์š”ํ•œ S3 ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ์„ ์ค„์ด๊ณ , ํด๋ผ์ด์–ธํŠธ์—์„œ ์š”์ฒญํ•˜๋Š” ์ด๋ฏธ์ง€ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์ž๋™์œผ๋กœ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

CDN(Content Delivery Network)

 

CDN(์ฝ˜ํ…์ธ  ์ „์†ก ๋„คํŠธ์›Œํฌ)์€ ์ „ ์„ธ๊ณ„ ์—ฌ๋Ÿฌ ์œ„์น˜์— ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์›น ์ฝ˜ํ…์ธ ๋ฅผ ๋”์šฑ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์›น์‚ฌ์ดํŠธ์˜ HTML, CSS, JavaScript, ์ด๋ฏธ์ง€, ๋™์˜์ƒ ๋“ฑ์˜ ์ •์  ๋ฐ ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ์บ์‹ฑํ•˜์—ฌ, ์‚ฌ์šฉ์ž์™€ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์„œ๋ฒ„(์—ฃ์ง€ ์„œ๋ฒ„)์—์„œ ์‘๋‹ตํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

 

CloudFront

Amazon CloudFront๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” CDN ์„œ๋น„์Šค๋กœ, ์ „ ์„ธ๊ณ„์˜ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜(Edge Location)์„ ํ†ตํ•ด ์ •์  ๋ฐ ๋™์  ์ฝ˜ํ…์ธ ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

 

ํŠน์ง•

  • ์ •์  ๋ฐ ๋™์  ์ฝ˜ํ…์ธ  ์ œ๊ณต
    • HTML, CSS, JavaScript, ์ด๋ฏธ์ง€๋ฟ๋งŒ ์•„๋‹ˆ๋ผ API ์‘๋‹ต, ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆฌ๋ฐ ๋“ฑ์˜ ๋™์  ์ฝ˜ํ…์ธ ๋„ ์ง€์›
  • ์ „ ์„ธ๊ณ„ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜ ํ™œ์šฉ
    • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๋‚ฎ์€ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์œผ๋กœ ๋ผ์šฐํŒ…๋จ
  • ์บ์‹ฑ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™”
    • ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์ด๋ฏธ ์บ์‹œ์— ์žˆ์œผ๋ฉด ์ฆ‰์‹œ ์ œ๊ณต
  • ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ œ๊ณต
    • AWS WAF(Web Application Firewall), DDoS ๋ฐฉ์–ด, ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ ์ง€์›
  • ์˜ค๋ฆฌ์ง„(Origin)๊ณผ ์—ฐ๋™
    • Amazon S3, MediaPackage, HTTP ์„œ๋ฒ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์˜ค๋ฆฌ์ง„์—์„œ ์ฝ˜ํ…์ธ  ์ œ๊ณต ๊ฐ€๋Šฅ

 

CloudFront์˜ ๋™์ž‘ ๋ฐฉ์‹

  1. ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์š”์ฒญํ•˜๋ฉด CloudFront๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  2. ์š”์ฒญ๋œ ์ฝ˜ํ…์ธ ๊ฐ€ ์‚ฌ์šฉ์ž์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์— ์บ์‹œ๋ฅผ ํ™•์ธํ•œํ›„ ์บ์‹œ๋˜์–ด ์žˆ์œผ๋ฉด ์ฆ‰์‹œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  3. ์บ์‹œ์— ์—†๋Š” ๊ฒฝ์šฐ, CloudFront๋Š” ์˜ค๋ฆฌ์ง„(S3)์—์„œ ๋“ฑ์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  4.  ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์— ๊ฐ€์ ธ์˜จ ์ฝ˜ํ…์ธ ๋ฅผ ์ผ์ • ๊ธฐ๊ฐ„ ๋™์•ˆ ์ฝ˜ํ…์ธ (์บ์‹œ) ์ €์žฅํ•˜์—ฌ ์ดํ›„ ์š”์ฒญ์„ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

CloudFront์˜ ์žฅ์ 

  • ์ง€์—ฐ ์‹œ๊ฐ„ ๊ฐ์†Œ
    • ์‚ฌ์šฉ์ž์˜ ๊ฐ€๊นŒ์šด ์œ„์น˜์—์„œ ์ฝ˜ํ…์ธ  ์ œ๊ณต
  • ๋„คํŠธ์›Œํฌ ๋ถ€ํ•˜ ๋ถ„์‚ฐ
    • ์—ฌ๋Ÿฌ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์— ๋ถ„์‚ฐํ•˜์—ฌ ์„œ๋ฒ„ ๋ถ€ํ•˜ ๊ฐ์†Œ
  • ๋ณด์•ˆ ๊ฐ•ํ™”
    • AWS WAF, DDoS ๋ฐฉ์–ด, ์•”ํ˜ธํ™” ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณด์•ˆ ๊ธฐ๋Šฅ ์ œ๊ณต
  • ๋น„์šฉ ์ ˆ๊ฐ
    • ์›๋ณธ ์„œ๋ฒ„(์˜ค๋ฆฌ์ง„)๋กœ์˜ ์š”์ฒญ ํšŸ์ˆ˜๋ฅผ ์ค„์—ฌ ํŠธ๋ž˜ํ”ฝ ๋น„์šฉ ์ ˆ๊ฐ
  • ๋†’์€ ํ™•์žฅ์„ฑ
    • ํŠธ๋ž˜ํ”ฝ ๊ธ‰์ฆ์—๋„ ์•ˆ์ •์ ์ธ ์„œ๋น„์Šค ์ œ๊ณต

Lambda@Edge

Lambda@Edge๋Š” AWS Lambda์˜ ํ™•์žฅ๋œ ์ปดํ“จํŒ… ์„œ๋น„์Šค๋กœ, CloudFront์˜ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜(Edge Location)์—์„œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Lambda ํ•จ์ˆ˜๊ฐ€ ์ „ ์„ธ๊ณ„์˜ ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์— ๋ณต์‚ฌ๋˜์–ด ๋ฐฐํฌ๋˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์—ฃ์ง€ ์„œ๋ฒ„์—์„œ ์‹คํ–‰๋˜๋Š” Lambda ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฐฉ์‹์€ ์›น ์ฝ˜ํ…์ธ ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์œ ์šฉํ•˜๋ฉฐ, ์ด๋ฏธ์ง€ ๋ณ€ํ™˜, ๋ณด์•ˆ ํ—ค๋” ์ถ”๊ฐ€, ์‚ฌ์šฉ์ž๋ณ„ ์‘๋‹ต ์ตœ์ ํ™” ๋“ฑ ๋‹ค์–‘ํ•œ ์šฉ๋„๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 ๊ทธ๋ž˜์„œ ํ•„์ž๋Š” Lambda@Edge + Cloudfront๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•ํ•˜๋Š” ๊ฐ€๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 


 

CloudFront, Lambda@Edge ์„ค์ •

https://blog.kmong.com/๋”-๋‚˜์€-์‚ฌ์šฉ์ž-๊ฒฝํ—˜์„-์œ„ํ•œ-์ด๋ฏธ์ง€-๋ฆฌ์‚ฌ์ด์ง•์„-ํ•ด๋ณด์ž-cffbb55b9d95

 

๋” ๋‚˜์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์œ„ํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์„ ํ•ด๋ณด์ž

์•ˆ๋…•ํ•˜์„ธ์š”! ํฌ๋ชฝ์˜ ํ‘ธ๋ฅธํ”ผ, ๋– ์˜ค๋ฅด๋Š” ๋ธ”๋ฃจ์นฉ Blue(๋ธ”๋ฃจ)์ž…๋‹ˆ๋‹ค.

blog.kmong.com

์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ธ”๋กœ๊ทธ์— ์„ค์ • ๊ณผ์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ด ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค.

 

cloudwatch ๋กœ๊ทธ๋ฅผ ์œ„ํ•œ ๋กœ๊ทธ ์ •์ฑ…์„ ํฌํ•จํ•œ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "LambdaEdgePermissions",
			"Effect": "Allow",
			"Action": [
				"lambda:GetFunction",
				"lambda:EnableReplication*",
				"cloudfront:UpdateDistribution",
				"s3:GetObject",
				"s3:ListBucket",
				"logs:CreateLogGroup",
				"logs:CreateLogStream",
				"logs:PutLogEvents",
				"logs:DescribeLogStreams"
			],
			"Resource": "*"
		}
	]
}

 

 

Lambda ํ•จ์ˆ˜ ์ฝ”๋“œ

const sharp = require('sharp');
const aws = require('aws-sdk');

const s3 = new aws.S3({ region: 'ap-northeast-2' });
const BUCKET = 'iruyeon';

exports.handler = async (event, _, callback) => {
  const { request, response } = event.Records[0].cf;

  /** ์ฟผ๋ฆฌ ์„ค๋ช…
   * w : width
   * h : height
   * f : format
   * q : quality
   * t : type (contain, cover, fill, inside, outside)
   */
  const querystring = request.querystring;
  const searchParams = new URLSearchParams(querystring);

  if (!searchParams.get('w') && !searchParams.get('h')) {
    console.log("No resizing parameters found. Returning original response.");
    return callback(null, response);
  }

  const { uri } = request;

  const match = uri.match(/\/?(.*)\.(.*)/);
  if (!match) {
    console.error("Invalid URI format:", uri);
    return callback(null, response);
  }

  const [, imageName, extension] = match;

  const width = parseInt(searchParams.get('w'), 10);
  const height = parseInt(searchParams.get('h'), 10);
  const quality = parseInt(searchParams.get('q'), 10) || DEFAULT_QUALITY;
  const type = searchParams.get('t') || DEFAULT_TYPE;
  const f = searchParams.get('f');
  const format = (f === 'jpg' ? 'jpeg' : f) || extension;
  
  try {
    const s3Object = await getS3Object(s3, BUCKET, imageName, extension);

    const resizedImage = await resizeImage(s3Object, width, height, format, type, quality);

    response.status = 200;
    response.body = resizedImage.toString('base64');
    response.bodyEncoding = 'base64';
    response.headers['content-type'] = [{ key: 'Content-Type', value: `image/${format}` }];
    response.headers['cache-control'] = [{ key: 'cache-control', value: 'max-age=31536000' }];

    return callback(null, response);
  } catch (error) {
    console.error("Processing error:", error);
    return callback(error);
  }
};

const DEFAULT_QUALITY = 80;
const DEFAULT_TYPE = 'contain';

async function getS3Object(s3, bucket, imageName, extension) {
  const key = decodeURI(`${imageName}.${extension}`);

  try {
    const s3Object = await s3.getObject({ Bucket: bucket, Key: key }).promise();
    return s3Object;
  } catch (error) {
    console.error("s3.getObject error:", error);
    throw error;
  }
}

async function resizeImage(s3Object, width, height, format, type, quality) {

  try {
    const resizedImage = await sharp(s3Object.Body)
      .resize(width, height, { fit: type })
      .toFormat(format, { quality })
      .toBuffer();

    return resizedImage;
  } catch (error) {
    console.error("resizeImage error:", error);
    throw error;
  }
}

 

 

์ดํ›„, CloudFront Domain Name์œผ๋กœ ์ ‘์†ํ•˜์—ฌ ์›ํ•˜๋Š” query๋ฅผ ์„ค์ • ํ›„ x-cache ํ—ค๋”๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

x-cache ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• (ํฌ๋กฌ)

1. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์—ด๊ธฐ (F12 ๋˜๋Š” Ctrl + Shift + I (Mac: Cmd + Option + I)
2. ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ Network(๋„คํŠธ์›Œํฌ) ํด๋ฆญ
3. ์ƒ๋‹จ์˜ Img(์ด๋ฏธ์ง€) ํ•„ํ„ฐ ํด๋ฆญ
4. ํ•ด๋‹น ์ด๋ฏธ์ง€ ์„ ํƒ
5. Headers(ํ—ค๋”) ํƒญ ํด๋ฆญ
6. x-cache ํ•ญ๋ชฉ์„ ์ฐพ์œผ๋ฉด, ํ•ด๋‹น ๊ฐ’์ด Hit/Miss/Expired์ธ์ง€ ํ™•์ธ ๊ฐ€๋Šฅ

 

 

x-cache ๊ฐ’์˜ ์˜๋ฏธ

Hit from cloudfront CloudFront ์บ์‹œ์—์„œ ์ œ๊ณต๋จ (์บ์‹ฑ ์„ฑ๊ณต)
Miss from cloudfront CloudFront ์บ์‹œ์— ์—†์Œ (์ƒˆ ์š”์ฒญ)
Expired from cloudfront ์บ์‹œ ๋งŒ๋ฃŒ ํ›„ ์ƒˆ ์š”์ฒญ ์ˆ˜ํ–‰
RefreshHit from cloudfront ์บ์‹œ๋œ ๊ฐ์ฒด๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ

 

 

[์†๋„ ๋น„๊ต]

์ตœ์ดˆ ์š”์ฒญ ์‹œ CloudFront์— ์บ์‹œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ์˜ค๋ฆฌ์ง„์ธ S3์—์„œ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ Lambda@Edge๊ฐ€ ๋ฆฌ์‚ฌ์ด์ง•์„ ์ˆ˜ํ–‰ํ•œ ํ›„ ์ ์ ˆํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

์ดํ›„ ๋™์ผํ•œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด CloudFront์— ์บ์‹ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ์ฆ‰์‹œ ์ œ๊ณตํ•˜์—ฌ ์‘๋‹ต ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

 

 

[์ฐธ๊ณ ]

https://wired.company/blog_original/?bmode=view&idx=15848347

 

CloudFront์™€ AWS Lambda@edge๋ฅผ ํ™œ์šฉํ•œ ์ด๋ฏธ์ง€ ์ตœ์ ํ™” : ์™€์ด์–ด๋“œ์ปดํผ๋‹ˆ

์•ˆ๋…•ํ•˜์„ธ์š”. ์ €๋Š” ์™€์ด์–ด๋“œ์ปดํผ๋‹ˆ ๊ฐœ๋ฐœํŒ€์ž…๋‹ˆ๋‹ค.Kemi์—์„œ ๋ฆฌ์‚ฌ์ด์ง•๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ฐ›์•„ ๋น ๋ฅด๊ฒŒ ์ปจํ…์ธ ๋ฅผ ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ–ˆ๋˜ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.๋ฌธ์ œ ์ธ์‹ "์ปจํ…์ธ ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ

wired.company

https://medium.com/@115taegyeong/image-resizing-d4cea1b1ba55

 

Lambda@Edge Image Resizing

์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•&ํ‘œ๋งท๋ณ€ํ™˜์„ ํ†ตํ•œ ์„ฑ๋Šฅ ๊ฐœ์„ 

medium.com