IT/Project

AWS) Web Hosting

ํ”„ํ‹ฐ 2025. 3. 9. 00:49
๋ฐ˜์‘ํ˜•

Web Hosting?

๐Ÿ’ก์›น ์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ์—‘์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค

์›น์‚ฌ์ดํŠธ์— ์—‘์„ธ์Šคํ•˜๋Š” ๊ณผ์ •๊ณผ ์›๋ฆฌ

๐Ÿ’ก์›น์‚ฌ์ดํŠธ๋ฅผ ๋ณธ๋‹ค === IP ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•œ๋‹ค

 

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๋ณดํ†ต IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ์›น์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•˜์ง€ ์•Š๋Š”๋‹ค.

1. ์œ ์ €๊ฐ€ ๋ธŒ๋ผ์šฐ์ € URL ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

๐Ÿ’กURL์˜ 2๊ฐ€์ง€ ํ˜•ํƒœ

  • ๋„๋ฉ”์ธ (ex. naver.com)
  • IP ์ฃผ์†Œ (ex. 172.0.0.1) </aside>

๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„์˜ ์„œ๋น„์Šค๋“ค์€ URL ์ฃผ์†Œ๋กœ IP๋ฅผ ์ง์ ‘ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ์šฉ์ž์˜ ํŽธ์˜์„ฑ์„ ์œ„ํ•˜์—ฌ, ์ธ์‹ํ•˜๊ธฐ ์‰ฌ์šด naver.com๊ณผ ๊ฐ™์€ ๋„๋ฉ”์ธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๋„๋ฉ”์ธ์œผ๋กœ ์›น์‚ฌ์ดํŠธ์— ์ ‘๊ทผํ•˜๋Š” ์›๋ฆฌ

  • ๋„๋ฉ”์ธ์€ IP ์ฃผ์†Œ์™€ ๋งค์นญ๋˜์–ด์žˆ๋‹ค.
  • DNS ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋„๋ฉ”์ธ๊ณผ ๋งค์นญ๋˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

 

DNS(๋„๋ฉ”์ธ ๋„ค์ž„ ์‹œ์Šคํ…œ)

DNS ์ฟผ๋ฆฌ๊ฐ€ ์บ์‹œ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด, IP ํƒ์ƒ‰์€ Root ์˜์—ญ์œผ๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.

Root ์˜์—ญ์—์„œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‚ด๋ ค๊ฐ€๋ฉฐ, ์ตœ์ข…์ ์œผ๋กœ ํ•ด๋‹น ๋„๋ฉ”์ธ๊ณผ ๋งค์นญ๋˜๋Š” IP ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š”๋‹ค.

์ฐพ์€ IP ์ฃผ์†Œ๋Š” ์ตœ์ข…์ ์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ˜ํ™˜๋˜๋ฉฐ, ๋ฐ˜ํ™˜๋œ IP ์ฃผ์†Œ๋กœ ์›น ์‚ฌ์ดํŠธ๋ฅผ ์š”์ฒญํ•œ๋‹ค.

 

๊ฐ€๋น„์•„, ๊ณ ๋Œ€๋””์™€ ๊ฐ™์ด ๋„๋ฉ”์ธ ๊ฑฐ๋ž˜ ์„œ๋น„์Šค ์—…์ฒด์—์„œ ํŠน์ • ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ๊ตฌ๋งคํ•  ์ˆ˜ ์žˆ๋‹ค.

 

DNS ์„ค์ •

DNS๋Š” ๋“ฑ๋ก๋œ ๋ ˆ์ฝ”๋“œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ IP๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

 

๐Ÿ’ก์ฐธ๊ณ  - ๋ ˆ์ฝ”๋“œ ์ข…๋ฅ˜๋ณ„ ์ •๋ณด

NS / A ๋ ˆ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ IP ํƒ์ƒ‰ ํ๋ฆ„

1 NS ๋ ˆ์ฝ”๋“œ → ๋„ค์ž„์„œ๋ฒ„ ์ •๋ณด ์š”์ฒญ

2 ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ DNS ์š”์ฒญ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๋„ค์ž„์„œ๋ฒ„ ์ •๋ณด ํš๋“
3 ๋„ค์ž„์„œ๋ฒ„ ์ •๋ณด → A ๋ ˆ์ฝ”๋“œ ์ •๋ณด ์š”์ฒญ
4 A ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ IP ์ฃผ์†Œ ํš๋“

CNAME์˜ ์—ญํ• 

ํ•˜์œ„ ๋„๋ฉ”์ธ์˜ ์ด๋ฆ„๊ณผ ๋งค์นญ๋˜๋Š” ์ •๋ณด

CNAME์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•œ๋‹ค๋ฉด, ์—ฐ๊ฒฐ๋œ ๋„๋ฉ”์ธ์„ ๋จผ์ € ํƒ์ƒ‰ํ•œ ํ›„์— NS / A ๋ ˆ์ฝ”๋“œ๋ฅผ ํ†ตํ•œ IP ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•œ๋‹ค.

2. URL ์ฃผ์†Œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์„œ๋ฒ„์— ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•œ๋‹ค.

๐Ÿ’ก์„œ๋ฒ„์˜ ์ข…๋ฅ˜

  • ์ž์ฒด์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๋‚ด๋ถ€์„œ๋ฒ„
  • ํด๋ผ์šฐ๋“œ๋ฅผ ํ†ตํ•ด ์ž„๋Œ€ํ•˜๋Š” ์™ธ๋ถ€์„œ๋ฒ„

ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„์˜ ์žฅ์ 

  • ์„œ๋ฒ„์˜ ๋ฌผ๋ฆฌ์ ์ธ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•  ํ•„์š”๊ฐ€ ์—†์Œ
  • ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์— ๋Œ€ํ•˜์—ฌ ์•ˆ์ •์ ์ด๊ณ  ์ผ๊ด€์„ฑ ์žˆ๋Š” ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•จ

ํด๋ผ์šฐ๋“œ ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ ์€ ๋ฆฌ์†Œ์Šค๋กœ ์•ˆ์ •์ ์ด๊ณ  ์‹ ๋ขฐ์„ฑ์žˆ๋Š” ์„œ๋น„์Šค ์ œ๊ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์ฐธ๊ณ ) ์œ„ํŽ„์Šจ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์šฐ๋“œGCP: Cloud Functions, Authentication
  • AWS: ์›น ํ˜ธ์ŠคํŒ…, S3 ๋ฒ„ํ‚ท

AWS๋กœ ์›น ํ˜ธ์ŠคํŒ…ํ•˜๊ธฐ

S3 Bucket ์ƒ์„ฑ

ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋ ค๋ฉด,

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ณด๋‚ผ ์›น ์‚ฌ์ดํŠธ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

S3 > ๋ฒ„ํ‚ท ๋งŒ๋“ค๊ธฐ

๐Ÿ’ก๋ฒ„ํ‚ท ์ •๋ณด ์ž…๋ ฅ

  • ๋ฒ„ํ‚ท ์ด๋ฆ„ : CloudFront, Route53์—์„œ ์ƒ์„ฑํ•  ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ ์ง€์ •
  • ACL ํ™œ์„ฑํ™” ๋ฒ„ํ‚ท ์†Œ์œ ์ž : ๋ฒ„ํ‚ท์„ ์†Œ์œ ํ•œ ๊ณ„์ •์—๊ฒŒ ๋ฒ„ํ‚ท์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด(ํŒŒ์ผ๋“ค)์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ถŒํ•œ์ด ์žˆ์Œ : ๋ฒ„ํ‚ท ์†Œ์œ ์ž๊ฐ€ ์•„๋‹Œ ์‚ฌ๋žŒ์ด ํ•ด๋‹น ๋ฒ„ํ‚ท์— ๊ฐ์ฒด ์—…๋กœ๋“œ๋ฅผ ํ•˜๋Š” ๊ฒฝ์šฐ, ๋ฒ„ํ‚ท ์†Œ์œ ์ž์—๊ฒŒ ๋ชจ๋“  ๊ถŒํ•œ์„ ์ด์ „ํ•˜๋Š” ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•จ (--acl bucket-owner-full-control) ๊ฐ์ฒด ๋ผ์ดํ„ฐ : ๋ฒ„ํ‚ท์— ์—…๋กœ๋“œํ•œ ๊ฐ์ฒด์˜ ๊ถŒํ•œ์€, ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์—…๋กœ๋“œํ•œ ์‚ฌ๋žŒ์—๊ฒŒ ์žˆ์Œ
  • ํผ๋ธ”๋ฆญ ์—‘์„ธ์Šค ์ฐจ๋‹จ ์„ค์ • : ๋ฒ„ํ‚ท์˜ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์—‘์„ธ์Šค ๊ถŒํ•œ ์„ค์ • : CloudFront๋ฅผ ํ†ตํ•ด์„œ๋งŒ S3 ๋ฒ„ํ‚ท์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ, ์—‘์„ธ์Šค ์ฐจ๋‹จ์„ ํ’€์–ด์คŒ

์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…

๋ฒ„ํ‚ท > ๋ฒ„ํ‚ท ์ด๋ฆ„ > ์†์„ฑ > ์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… > ํŽธ์ง‘

์ •์  ์›น ์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…์„ ํ™œ์„ฑํ™”

→ ์ง€์ •ํ•œ ์ธ๋ฑ์Šค ๋ฌธ์„œ์— ๋Œ€ํ•œ ์›๋ณธ ์ฃผ์†Œ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ

CloudFront ๋ฐฐํฌํ•˜๊ธฐ ( + ๊ธฐ์กด ์บ์‹œ๋œ ํŒŒ์ผ ๋ฌดํšจํ™” )

๐Ÿ’กCloudFront > ๋ฐฐํฌ ์ƒ์„ฑ

  • ์›๋ณธ Origin Domain : S3 Bucket์˜ ์ฃผ์†Œ
  • ์›๋ณธ ์—‘์„ธ์Šค Legacy access Identities : ์›๋ณธ ์—‘์„ธ์Šค ID๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Bucket์— ์ ‘๊ทผ : ์ƒˆ OAI ์ƒ์„ฑ์œผ๋กœ ID ๋“ฑ๋ก
  • ๊ธฐ๋ณธ ์บ์‹œ ๋™์ž‘ ๋ทฐ์–ด > ํ”„๋กœํ† ์ฝœ ์ •์ฑ… > Redirect HTTP to HTTPS : weperson์—์„œ๋Š” ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ์„ ์œ„ํ•ด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์˜ต์…˜ ์‚ฌ์šฉ์ค‘ ๋ทฐ์–ด > ํ—ˆ์šฉ๋œ HTTP ๋ฐฉ๋ฒ• > GET, HEAD : weperson์€ SPA ์„œ๋น„์Šค์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ตœ์†Œ ํ—ˆ์šฉ ์˜ต์…˜ ์‚ฌ์šฉ์ค‘
  • ์„ค์ • Custom SSL certificate - optional : HTTPS ๋ณด์•ˆ ์„ธํŒ…์„ ์œ„ํ•œ SSL ํŒŒ์ผ ๋“ฑ๋ก

์ƒ์„ฑ ํ›„

aws cli๋ฅผ ํ†ตํ•ด ๋นŒ๋“œํ•œ ํŒŒ์ผ์„ ์—…๋กœ๋“œ / ์บ์‹œ ๋ฌดํšจํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.

// ๋นŒ๋“œ
yarn build

// ๊ธฐ์กด dist/spa ์ œ๊ฑฐ ํ›„ ์ƒˆ๋กญ๊ฒŒ ๋นŒ๋“œ๋œ dist/spa ํŒŒ์ผ ์—…๋กœ๋“œ
aws s3 sync --acl public-read --delete dist/spa s3://์„œ๋ธŒ๋„๋ฉ”์ธ.com

// ์กด์žฌํ•˜๋Š” CDN ์บ์‹œํŒŒ์ผ ๋ฌดํšจํ™”
aws cloudfront create-invalidation --distribution-id ${{ secrets.AWS_PROD_CLOUDFRONT_ID }} --paths "/*"

 

์บ์‹œ ๋ฌดํšจํ™” ์ง์ ‘ ํ•ด๋ณด๊ธฐ

CloudFront > ๋ฐฐํฌ > ๋ฐฐํฌID > ๋ฌดํšจํ™” ์ƒ์„ฑ

๊ฒฝ๋กœ ํŒจํ„ด์„ ํ†ตํ•ด ํ•˜์œ„ ํŒŒ์ผ๋“ค์„ ํƒ€๊ฒŸํŒ…ํ•˜์—ฌ ๋ฌดํšจํ™” ์ƒ์„ฑ → ์บ์‹œ ๋ฌดํšจํ™”

Route53 ์—ฐ๊ฒฐ

๐Ÿ’กRoute53 > ํ˜ธ์ŠคํŒ… ์˜์—ญ > ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ

  • ๋ ˆ์ฝ”๋“œ ์ด๋ฆ„ : ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•  ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋ ˆ์ฝ”๋“œ ์œ ํ˜•
  1. CloudFront ์—ฐ๊ฒฐ์„ ํ•  ๋•Œ → CloudFront์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„ ๋˜๋Š” IP ์ฃผ์†Œ
  2. ์ •์  ์›น ํ˜ธ์ŠคํŒ…์„ ํ•  ๋•Œ → S3 Bucket์˜ ์ธ๋ฑ์Šค ๋ฌธ์„œ์˜ ์ฃผ์†Œ
๋ฐ˜์‘ํ˜•