suvera-dev ๐Ÿฅฆ

AWS ) ์ •์  ์›น ์‚ฌ์ดํŠธ ๋ฐฐํฌ ๋ฐฉ์‹ ๋น„๊ต ( nginx / cloudFront / amplify ) ๋ณธ๋ฌธ

Infra/AWS

AWS ) ์ •์  ์›น ์‚ฌ์ดํŠธ ๋ฐฐํฌ ๋ฐฉ์‹ ๋น„๊ต ( nginx / cloudFront / amplify )

suvera 2023. 7. 15. 15:45

์•ž์„œ AWS ๋ฐฐํฌ ๊ณผ์ •์„ ํฌ์ŠคํŒ…ํ•˜๋ฉด์„œ EC2 + WebServer๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์‹ค์Šต์„ ํ•ด๋ณด์•˜๋Š”๋ฐ์š”.

๊ทธ ์™ธ์—๋„ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•๋“ค์ด ์žˆ์–ด์„œ ํ•œ๋ฒˆ ๋น„๊ตํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

1. AWS - EC2 + WebServer(Nginx) ๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ

2. AWS - CloudFront + S3๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ

3. AWS - Amplify๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ

 

1. EC2 + WebServer ( Nginx ) ๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ

- AWS EC2 ์ธ์Šคํ„ด์Šค ์œ„์— Nginx ์›น์„œ๋ฒ„๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„ ํ˜ธ์ŠคํŒ…์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•. EC2๋Š” ํ•˜๋‚˜์˜ ์ž‘์€ ๊ฐ€์ƒ์˜ ์„œ๋ฒ„์ด๊ณ , Nginx๋Š” OS์œ„์— ์›น ์„œ๋น„์Šค๋ฅผ ๋„์šฐ๊ธฐ ์œ„ํ•œ ์›น ์„œ๋ฒ„. EC2์™€ Nginx๋ฅผ ์ด์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •์ ์ธ ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์žฅ์  

1) Nginx๋Š” ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€๋ฒผ์›€๊ณผ ๋†’์€ ์„ฑ๋Šฅ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ์›น์„œ๋ฒ„์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ์œผ๋กœ ์ •์  ํŒŒ์ผ ํ˜ธ์ŠคํŒ…์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

2) Nginx๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐฐํฌํ•˜๋ฉด Nginx ํ™˜๊ฒฝ์„ ์ง์ ‘ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋–„๋ฌธ์— ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ Nginx์˜ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค, Proxy ํ™˜๊ฒฝ, ๋™์ ์ธ ํŽ˜์ด์ง€ ๊ตฌ์ถ• ๋“ฑ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค๋“ค์„ ํŽธ์˜์— ๋งž๊ฒŒ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

3) ํ•˜๋‚˜์˜ ์›น๋ฃจํŠธ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ Demo๋“ค์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋–„๋ฌธ์— ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค. 

- ์˜ˆ๋ฅผ ๋“ค์–ด, example.com ์ด๋ผ๋Š” ๋„๋ฉ”์ธ์„ ์†Œ์œ ํ•˜์˜€์„ ๋•Œ https://example.com/demo1 , https://example.com/demo2 ์™€ ๊ฐ™์ด 2๊ฐœ์˜ ์›นํŽ˜์ด์ง€๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๋‹จ์  

1) ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด nginx.conf ๋ฌธ๋ฒ• ๋ฐ ๋ฆฌ๋ˆ…์Šค ๊ธฐ๋ฐ˜ ํ„ฐ๋ฏธ๋„ ๋ช…๋ น์„ ์ˆ™์ง€ํ•˜์—ฌ์•ผ ํ•จ. ์ฆ‰ ์›น์„œ๋ฒ„๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

2) ์‹ค์ œ EC2์„œ๋ฒ„๊ฐ€ ์žˆ๋Š” ๋ฆฌ์ „์ด ์•„๋‹Œ ์ „ ์„ธ๊ณ„์— ์ง€์—ญ์ด ์žˆ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ EC2 ์„œ๋ฒ„๋กœ ์ •์ ์ธ ํŽ˜์ด์ง€๋ฅผ ์š”์ฒญํ•  ๋•Œ latency( ์‘๋‹ต์‹œ๊ฐ„ )๊ฐ€ ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ฑฐ๋ฆฌ ๋–„๋ฌธ !

3) ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” SPA์•ฑ์„ ์ด์šฉํ•  ๋•Œ ์ถ”๊ฐ€์ ์ธ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด React๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ react-router-dom์ด๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜  BrowserRouter๋ฅผ ํ†ตํ•ด Router๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ BrowserRouter๋Š” Single Page์ธ React ํŽ˜์ด์ง€์— ๊ฒฝ๋กœ๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ์ด ๋ฉ๋‹ˆ๋‹ค. 

 

- BrowserRouter๋Š” URL ์ฃผ์†Œ๊ฐ€ ๋ฐ”๋€” ๋•Œ ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ํ•˜๋Š”๋ฐ, ์‹ค์ œ๋กœ ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ React ์•ฑ์˜ ๊ฒฝ๋กœ๋ฅผ ์ฝ๊ธฐ ์œ„ํ•ด์„œ React ๋‚ด๋ถ€์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ๊ฒฝ๋กœ๋ฅผ ๋ฐ”๊พผ ๋’ค ๋ธŒ๋ผ์šฐ์ € ์ƒˆ๋กœ๊ณ ์นจ์„ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด 404์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋Š” BrowserRouter๊ฐ€ ๋™์ž‘ํ•˜๊ธฐ ์ „์— ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ์›น ๋ฆฌ์†Œ์Šค ์š”์ฒญ์ด ์ผ์–ด๋‚˜๋Š”๋ฐ ์ด์— ๋Œ€ํ•œ 404์—๋Ÿฌ ๋ฐœ์ƒ. 

-> ์‹ค์ œ๋กœ ์–ด๋–ค ๋ฆฌ์†Œ์Šค๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ ๋ฆฌ์•กํŠธ ๋‚ด๋ถ€์˜ ๊ฒฝ๋กœ์ด๊ธฐ ๋•Œ๋ฌธ ! 

 

- ์ด์™€ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Nginx๋กœ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์›น request์˜ ๊ฒฝ๋กœ๋ฅผ ์‹ค์ œ ๋ฆฌ์•กํŠธ SPA์•ฑ์˜ index.html๋กœ ์น˜ํ™˜์‹œ์ผœ์ฃผ๋Š” try-files ๋ผ๋Š” ์˜ต์…˜์ด ํ•„์š” !

 

 

2. CloudFront + S3 ๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ

- S3๋Š” AWS์—์„œ ์ œ๊ณตํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค. ์•ˆ์ •์ ์ธ ๋‚ด๊ตฌ์„ฑ, ๊ฐ€์šฉ์„ฑ ๋ฐ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋–„๋ฌธ์— ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ํด๋ผ์šฐ๋“œ ํŒŒ์ผ์„œ๋ฒ„๋กœ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. ๋˜ S3๋งŒ์„ ์ด์šฉํ•˜์—ฌ ์ •์  ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

 

1) ๋‚ด๊ตฌ์„ฑ ? ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋น ๋ฅธ ์‹œ๊ฐ„ ๋‚ด๋กœ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ. ์˜ˆ๋ฅผ ๋“ค์–ด ์–ด๋–ค ์„œ๋น„์Šค์˜ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์„ ๋•Œ ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ํ•ด๋‹น ์„œ๋น„์Šค์˜ ์žฅ์• ๋ฅผ ๊ณ ์น˜๊ณ  ์„œ๋น„์Šค๋ฅผ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๊ฐ€ ์ข‹์€ ๋‚ด๊ตฌ์„ฑ์„ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€.

 

2) ๊ฐ€์šฉ์„ฑ ? ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋–„ ์„œ๋น„์Šค๋ฅผ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ. ๋‚ด๊ตฌ์„ฑ์ด๋ž‘ ๋‹ค๋ฅธ ์ ์€ ์žฅ์• ๋ณต๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์žฅ์• ๊ฐ€ ๋ณต๊ตฌ๋˜๊ธฐ ์ „์— ์„œ๋น„์Šค๊ฐ€ ์žฅ์• ๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜์ง€ ์•Š๋„๋ก ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋†’์€ ๊ฐ€์šฉ์„ฑ์˜ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ๋†’์€ ๊ฐ€์šฉ์„ฑ์„ ๊ฐ€์ง„ ์„œ๋น„์Šค๋“ค์„ ๋ณดํ†ต ์žฅ์• ๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋  ๋–„๋ฅผ ๋Œ€๋น„ํ•ด ๋Œ€์‘์ฑ…์„ ๋งŒ๋“ค์–ด๋†”์„œ ์žฅ์• ๋ฐœ์ƒ ์‹œ ๋‹ค๋ฅธ ์ชฝ์œผ๋กœ ์šฐํšŒํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ง€์†์‹œํ‚ด. 

 

3) ํ™•์žฅ์„ฑ ? ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ๊ทœ๋ชจ๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ. ํŠธ๋ž˜ํ”ฝ์ด๋‚˜ ์œ ์ € ์ ‘์†์ด ๋งŽ์•„์ ธ์„œ ์„œ๋ฒ„๊ฐ€ ๋ถ€๋‹ด์ด ๋˜๋Š” ๊ฒฝ์šฐ ์„œ๋ฒ„๋ฅผ ์Šค์ผ€์ผ์—…ํ•˜๊ฑฐ๋‚˜ ์Šค์ผ€์ผ ์•„์›ƒ ํ•ด์•ผํ•จ. ์ด ๋•Œ ํ•ด๋‹น ์„œ๋ฒ„๊ฐ€ ๋ฐ›๋Š” ๋†’์€ ๋ถ€ํ•˜๋ฅผ ๋ถ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ฒŒ ํƒ„๋ ฅ์ ์œผ๋กœ ์„œ๋ฒ„์˜ ์Šค์ผ€์ผ๋ง์„ ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š”์ง€๊ฐ€ ๋†’์€ ํ™•์žฅ์„ฑ์˜ ๊ธฐ์ค€.

 

=> S3๋Š” ์ด์™€ ๊ฐ™์€ ๋†’์€ ๋‚ด๊ตฌ์„ฑ, ๊ฐ€์šฉ์„ฑ, ํ™•์žฅ์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์Šคํ† ๋ฆฌ์ง€ ์„œ๋น„์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ •์  ์›น ์‚ฌ์ดํŠธ๋ฅผ ์†์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

 

CloudFront ?

- ์ด๋ฏธ์ง€ ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ •์  ๋ฐ ๋™์  ์›น ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋” ๋นจ๋ฆฌ ๋ฐฐํฌํ•˜๋„๋ก ์ง€์›ํ•˜๋Š” CDN์„œ๋น„์Šค. CDN์„œ๋น„์Šค๋ž€ Content Delivery Network ์˜ ์•ฝ์ž๋กœ ์ง€๋ฆฌ,๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋–จ์–ด์ ธ ์žˆ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฝ˜ํ…์ธ ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค. 

 

- CloudFront๋ฅผ ์ด์šฉํ•˜๋ฉฐ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€๊นŒ์šด ๊ณณ์— ์บ์‹œ์„œ๋ฒ„๊ฐ€ ์œ„์น˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ฝ˜ํ…์ธ ๋ฅผ ์š”์ฒญ ์‹œ ๊ฐ€๊นŒ์šด ๊ณณ์— ์žˆ๋Š” ์บ์‹œ์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•ด์ฃผ๋Š”๋ฐ ์ด๋Ÿฌํ•œ AWS์˜ CloudFront์˜ ์บ์‹œ์„œ๋ฒ„๋ฅผ ๋ณดํ†ต ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์ด๋ผ๊ณ  ํ•จ.

 

CloudFront + S3 

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

 

์žฅ์  ! 

1) CDN ์„œ๋น„์Šค ์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๋‚˜๋ผ์—์„œ ์„œ๋น„์Šค๋ฅผ ํ•  ๋•Œ ์•ˆ์ •์ ์ธ ์†๋„๋ฅผ ๋ณด์žฅ.

2) AWS ์ฝ˜์†”์—์„œ S3์—…๋กœ๋“œ, ์—ฃ์ง€ ๋กœ์ผ€์ด์…˜์˜ ์บ์‹œ ๋ฌดํšจํ™”, ์š”์ฒญ์— ๋Œ€ํ•œ ๋ฆฌ๋‹ค๋ ‰์…˜ ์ฒ˜๋ฆฌ ๋“ฑ์˜ ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

3) CloudFront๋ฅผ ์ด์šฉํ•˜์—ฌ Route53 ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ ๋ฐ SSL ์ธ์ฆ์„œ ์—ฐ๊ฒฐ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค. 

4) ์„œ๋ฒ„๋ฅผ ์ง์ ‘ ์ž„๋Œ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์šด์šฉ ๋น„์šฉ์ด ๋ถ€๊ณผ๋˜์ง€ ์•Š๊ณ , ์‹ค์ œ ์—ฃ์ง€์™€ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด์— ๋ฐœ์ƒํ•œ ํŠธ๋ž˜ํ”ฝ ๋งŒํผ๋งŒ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋œ๋‹ค. ๊ฐ๊ฐ์˜ Edge๋ณ„๋กœ ํŠธ๋ž˜ํ”ฝ ์š”๊ธˆ์ด ์ƒ์ดํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ํ•œ๊ตญ Edge์—์„œ๋Š” GB๋‹น 0.12$, ๋ฏธ๊ตญ์€ 0.085$์ด๋‹ค.

5) ํŠธ๋ž˜ํ”ฝ ์š”๊ธˆ์— ๋Œ€ํ•œ ๊ณผ๊ธˆ์€ EC2์™€ ์œ ์‚ฌํ•˜๋‹ค. EC2๋„ ์–ด๋Š ๋ฆฌ์ „์— ์žˆ๋Š”์ง€์— ๋”ฐ๋ผ ํŠธ๋ž˜ํ”ฝ ์š”๊ธˆ์ด ๋‹ฌ๋ผ์ง.

6) S3์˜ ํŠน์ง•์œผ๋กœ ํ•ญ์ƒ ๊ณ ๊ฐ€์šฉ์„ฑ ๋ฐ ๋‚ด๊ตฌ์„ฑ์„ ๋ณด์žฅ ํ•œ๋‹ค.

 

๋‹จ์  !

1) ์ดˆ๊ธฐ ๊ตฌ์ถ• ์‹œ S3์™€ CloudFront ์„ค์ •์— ๋Œ€ํ•ด ์ƒ์„ธํžˆ ์•Œ์•„์•ผํ•œ๋‹ค. SSL ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ACM ๋ฐ Route53์— ๋Œ€ํ•ด์„œ๋„ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค. 

2) React์™€ ๊ฐ™์€ SPA ์‚ฌ์ดํŠธ ๊ตฌ์ถ•์‹œ์— 403, 404 ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ๋“ฑ์˜ ์ถ”๊ฐ€ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค. ํ•˜๋‚˜์˜ ๋ฆฌ์•กํŠธ ์•ฑ์„ ์œ„ํ•ด CloudFront + S3 ๊ตฌ์„ฑ์ด ๊ฐ๊ฐ ๊ฐœ๋ณ„์ ์œผ๋กœ ํ•„์š”ํ•˜๋‹ค.

3) Nginx + EC2 ๋ฐฐํฌ ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ์ •์ ์ธ ์›น์‚ฌ์ดํŠธ๋“ค์„ ํ˜ธ์ŠคํŒ… ํ•  ์ˆ˜๋Š” ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, S3์˜ ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…์€ ๋ฒ„ํ‚ท์˜ ๊ฐ€์žฅ ์‚ฌ์œ„์— ์žˆ๋Š” index.html ๋งŒ์„ ๋ฐ”๋ผ๋ณด๊ธฐ ๋•Œ๋ฌธ์— S3๋ฒ„ํ‚ท์˜ ์„œ๋ธŒ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ index.html์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€.

 

 

3. Amplify๋ฅผ ์ด์šฉํ•œ ๋ฐฐํฌ

- Amplify๋Š” CI/CD ์›Œํฌํ”Œ๋กœ๋ฅผ ํ†ตํ•ด ์ •์  ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธ€๋กœ๋ฒŒ ๋ฐฐํฌ ๋ฐ ํ˜ธ์ŠคํŒ…์„ ์ง€์›ํ•˜๋Š” ์„œ๋น„์Šค. Amplify ์ฝ˜์†”์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ  ์ปค๋ฐ‹ํ•  ๋•Œ๋งˆ๋‹ค ์ž๋™์œผ๋กœ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ CloudFront+ S3๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.  => ๋นŒ๋“œ ์™„๋ฃŒ์‹œ ์ž๋™ ๋ฐฐํฌ.

 

์žฅ์  ?

1) ๊นƒํ—™ ์—ฐ๊ฒฐ + ํด๋ฆญ๋งŒ์œผ๋กœ ์‰ฝ๊ฒŒ ์ •์  ์›น์‚ฌ์ดํŠธ ํ˜ธ์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

2) Amplify๋ฅผ ํ†ตํ•ด ์ •์  ์‚ฌ์ดํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋ฉด Amplify๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ S3+ CloudFront ๋ฐฐํฌ๋ฅผ ์‚ฌ์šฉ. ์ง์ ‘ ๊ตฌ์ถ•ํ•  ํ•„์š”๊ฐ€ ์—†์Œ. 

3) Amplify์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์„ ์ ๊ทน ํ™œ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์šฉ์ด. ํ˜ธ์ŠคํŒ… ์„œ๋น„์Šค ๋ณ„๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง์ด ๊ฐ€๋Šฅ.

4) ๋นŒ๋“œ ์‹œ๊ฐ„ + ๋ฐ์ดํ„ฐ ํŠธ๋ž˜ํ”ฝ ์†ก์ˆ˜์‹  ๋น„์šฉ + ์ €์žฅ๊ณต๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰์— ๋Œ€ํ•œ ๋น„์šฉ๋งŒ ์ฒญ๊ตฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— EC2์„œ๋ฒ„๋ฅผ ์šด์šฉํ•  ๋•Œ ์ฒ˜๋Ÿผ ๊ณ„์† ๊ณผ๊ธˆ์ด ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉํ•œ ๋งŒํผ๋งŒ ๊ณผ๊ธˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ๊ตฌ์ถ•ํ•˜๋ฉด ๋น„์šฉ ์ ˆ๊ฐ๋ฉด์—์„œ ํšจ์œจ์ . 

5) ๊นƒํ—™ ํ‘ธ์‹œ๊ฐ€ ์ผ์–ด๋‚  ๋•Œ๋งˆ๋‹ค auto-deploy ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ฐฐํฌ๊ฐ€ ์ผ์–ด๋‚˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹จ์  ? 

1) S3 ๊ทœ์น™, CloudFront ๊ทœ์น™์„ ์ƒ์„ธํ•˜๊ฒŒ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•ด์•ผํ•  ๋•Œ๋Š” Amplify๋กœ ๋ถˆ๊ฐ€๋Šฅ. 

2) ํŠธ๋ž˜ํ”ฝ ์š”๊ธˆ์ด 30ํ”„๋กœ ๋” ๋น„์Œˆ. 

3) ๋นŒ๋“œ ์‹œ๊ฐ„๋‹น ์š”๊ธˆ ๋ฐœ์ƒ, ๋นŒ๋“œ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ํ”„๋กœ์ ํŠธ๋ผ๋ฉด ๊ณผ๊ธˆ์ด ๋งŽ์ด ๋  ์ˆ˜ ์žˆ์Œ.

 

Comments