3 ๋ถ„ ์†Œ์š”

AWS๋ž€? ๐Ÿ’ฏ

AWS : ์•„๋งˆ์กด๋‹ท์ปด์—์„œ ๊ฐœ๋ฐœํ•œ ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… ํ”Œ๋žซํผ - ๋น„์ฆˆ๋‹ˆ์Šค์™€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๊ณ  ์ •๊ตํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์ถ•ํ•˜๋„๋ก ์ง€์›ํ•˜์—ฌ ์ค€๋‹ค.

EC2

  • Elastic Compute Cloud
  • AWS ์ƒ์—์„œ ์‚ฌ์šฉํ•˜๋Š” Server๋กœ, EC2 ์„œ๋ฒ„์— API๋ฅผ ๋ฐฐํฌํ•˜๊ฒŒ ๋จ.
  • EC2๋Š” ๋‹ค์–‘ํ•œ ์‚ฌ์–‘ ์˜ต์…˜์„ ์ œ๊ณตํ•จ. t2.nanoย (CPU 1, 0.5 GB memory) ๋ถ€ํ„ฐย x1.32xlargeย (CPU 128, RAM 1952 GB) ๊นŒ์ง€ ๋‹ค์–‘ํ•˜๊ฒŒ ์ œ๊ณตํ•จ์œผ๋กœ ํ•„์š”ํ•œ ์‚ฌ์–‘์˜ EC2 ์ธ์Šคํ„ด์Šค(instnace)๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

Security Group

  • EC2 ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ํŠธ๋ž˜ํ”ฝ์„ ์ œ์–ดํ•˜๋Š” ๊ฐ€์ƒ ๋ฐฉํ™”๋ฒฝ ์—ญํ• .
  • ์ฆ‰ security group ์„ค์ •์„ ํ•ด์ค˜์•ผ EC2 ์ธ์Šคํ„ด์Šค์— HTTP์™€ SSH ์ ‘์†์ด ๊ฐ€๋Šฅ.

RDS

  • Relational Database Service
  • AWS์˜ database ์„œ๋น„์Šค.
  • RDS๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์„œ๋ฒ„๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์„ค์ •ํ•˜๊ณ  ๊ด€๋ฆฌ ํ•˜์ง€ ์•Š์Œ.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค RDS๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ๋” ์ €๋ ดํ•จ.

Load Balancer

  • ๋กœ๋“œ๋ฐœ๋ž€์„œ๋Š” HTTP ์š”์ฒญ๋“ค์„ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ„์‚ฐํ• ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • HTTP ์š”์ฒญ์ด ๋งŽ์„๋•Œ๋Š” ์„œ๋ฒ„ ํ•˜๋‚˜๋งŒ์œผ๋กœ ๋ชจ๋‘ ์ฒ˜๋ฆฌ ํ•˜๊ธฐ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„ ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š”๊ฒƒ์ด ์ผ๋ฐ˜์ . ์—ฌ๋Ÿฌ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋กœ๋“œ๋ฐœ๋Ÿฐ์„œ๊ฐ€ HTTP ์š”์ฒญ๋“ค์„ ์„œ๋ฒ„๋“ค์— ๋ถ„์‚ฐ ํ•ด์ฃผ๋Š” ํ˜•ํƒœ๋กœ ์‹œ์Šคํ…œ์ด ๊ตฌ์„ฑ๋จ.

Route 53

  • AWS์˜ DNS ์„œ๋น„์Šค.
  • API ์‹œ์Šคํ…œ์„ ์‹ค์ œ ๋„๋ฉ”์ธ๊ณผ ์—ฐ๊ฒฐ.

AWS S3

  • AWS S3(Simple Storage Service)๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ํŒŒ์ผ์„ ์‰ฝ๊ฒŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.
  • ํŒŒ์ผ์„ ์ €์žฅ ํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋ผ, ์—…๋กœ๋“œ๋œ ํŒŒ์ผ๋งˆ๋‹ค ๊ณ ์œ  ์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— S3์— ์ €์žฅํ•œ ํŒŒ์ผ์„ ์›น์ƒ์—์„œ ์‰ฝ๊ฒŒ ์ฝ์–ด๋“ค์ผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ฃผ๋กœ ์‚ฌ์ดํŠธ์ƒ์˜ ์ด๋ฏธ์ง€๋“ค์„ ์ €์žฅํ•˜๊ณ  ์‚ฌ์ดํŠธ์—์„œ ์ฝ์–ด๋“ค์—ฌ ๋ Œ๋”๋ง ํ•ด์ฃผ๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… - ์ธํ„ฐ๋„ท์„ํ†ตํ•ด IT ๋ฆฌ์†Œ์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์˜จ๋””๋งจ๋“œ๋กœ ์ œ๊ณตํ•˜๋Š”์„œ๋น„์Šค

  • ๊ธฐ์กด์˜ ๋ฌผ๋ฆฌ์ ์ธ ํ˜•ํƒœ์˜ ์‹ค๋ฌผ ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ๋„คํŠธ์›Œํฌ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ.

  • ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ๋„คํŠธ์›Œํฌ ์ƒ์—์„œ ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค์˜ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€ ๋ถ„๋ฅ˜๋กœ ๋‚˜๋ˆ„๊ธฐ๋„ ํ•œ๋‹ค.

โ–ถ IaaS(Infrastructure as a Service)

  • AWS, ๋„ค์ด๋ฒ„ํ”Œ๋žซํผ ๊ณผ ๊ฐ™์€ ์ธํ”„๋ผ์ŠคํŠธ๋Ÿญ์ณ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค.

  • ๊ฐ€์ƒ ์„œ๋ฒ„ ๋˜๋Š” ์Šคํ† ๋ฆฌ์ง€, ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ์„œ๋น„์Šค ํ˜•ํƒœ๋กœ ์ œ๊ณตํ•œ๋‹ค.

  • ์‚ฌ์šฉ์ž๋Š” ๋ฌผ๋ฆฌ์ ์ธ ํ•˜๋“œ์›จ์–ด๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ์ง์ ‘์ ์œผ๋กœ ์„œ๋น„์Šค ์ด์šฉ์„ ํ†ตํ•ด ์ปดํ“จํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค. (AWS, ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ(MS) ์• ์ €, IBM ์†Œํ”„ํŠธ๋ ˆ์ด์–ด ๋“ฑ์˜ ์—…์ฒด๋“ค์ด ์žˆ๋‹ค.)

  • ํด๋ผ์šฐ๋“œ IT์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ (๋„คํŠธ์›Œํ‚น, ์ปดํ“จํ„ฐ, ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ๊ณต๊ฐ„)

โ–ถ PaaS(Platform as a Service)

  • DB ๋˜๋Š” Application ์„œ๋ฒ„ ๋“ฑ์˜ ์ด๋ฏธ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

  • ํ•˜๋“œ์›จ์–ด/OS/๋ฏธ๋“ค์›จ์–ด ์— ๋Œ€ํ•œ ๊ด€๋ฆฌ๋Š” ์„œ๋น„์Šค ์ œ๊ณต์ž๊ฐ€ ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ์ œ๊ณต๋œ ๋ฏธ๋“ค์›จ์–ด๋งŒ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ฃผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ๊ด€๋ จํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.(OS, DB, WAS, JDK)

  • ๊ธฐ๋ณธ ์ธํ”„๋ผ (ex. ํ•˜๋“œ์›จ์–ด์™€ ์šด์˜ ์ฒด์ œ)๋ฅผ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

โ–ถ SaaS(Software as a Service)

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

AWS ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ…์˜ ์žฅ์ 

  • ์ €๋ ดํ•œ ๋น„์šฉ

AWS๋Š” ์‚ฌ์ „ ํ™•์•ฝ๊ธˆ์ด๋‚˜ ์žฅ๊ธฐ ์•ฝ์ • ์—†์ด ์ €๋ ดํ•œ ์ข…๋Ÿ‰ ๊ณผ๊ธˆ์ œ ๋ฐฉ์‹์œผ๋กœ ์šด์˜๋œ๋‹ค.

ํ™•์žฅํ˜• ๊ธ€๋กœ๋ฒŒ ์ธํ”„๋ผ๋ฅผ ๊ตฌ์ถ• ๋ฐ ๊ด€๋ฆฌํ•˜๊ณ , ๋” ์ €๋ ดํ•œ ์š”๊ธˆ์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋น„์šฉ ์ ˆ๊ฐ ํ˜œํƒ์„ ๊ณ ์Šค๋ž€ํžˆ ๋Œ๋ ค์ค€๋‹ค.

์ž๋ณธ๋น„์šฉ์„ ๊ฐ€๋ณ€๋น„์šฉ์œผ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์‹œ๊ฐ„๋Œ€๋ณ„๋กœ๋„ ์ž์›์„ ๋Œ์ˆ˜์žˆ์Œ.

  • ์†๋„ ๋ฐ ๋ฏผ์ฒฉ์„ฑ ๊ฐœ์„ 

๋ฐ์ดํ„ฐ์„ผํ„ฐ์šด์˜ ๋ฐ ์œ ์ง€๊ด€๋ฆฌ์— ๋น„์šฉํˆฌ์ž ๋ถˆํ•„์š”

๋ช‡๋ถ„๋งŒ์— ์ „์„ธ๊ฒŒ์— ๋ฐฐํฌ

AWS๋Š” ์–ธ์–ด ๋ฐ ์šด์˜ ์ฒด์ œ์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š๋Š” ํ”Œ๋žซํผ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์˜ ๋น„์ฆˆ๋‹ˆ์Šค์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ฐœ๋ฐœ ํ”Œ๋žซํผ ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ชจ๋ธ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉํ•  ์„œ๋น„์Šค๋ฅผ ํ•œ ๊ฐœ ๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์„ ํƒํ•˜๊ณ , ๊ทธ ์‚ฌ์šฉ ๋ฐฉ์‹๋„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฏผ์ฒฉ์„ฑ, ์ฆ‰๊ฐ์  ์œตํ†ต์„ฑ

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

์ง์ ‘ ๋ฐฐํฌํ•ด๋ณด๊ธฐ

front package.json

"distribute": "npm i && npm run build && pm2 serve build 3000 --name <project-front> --spa"
  1. npm i โžก๏ธ gitignore์— nodemodule์ด ๋“ค์–ด๊ฐ€์žˆ์œผ๋‹ˆ ํด๋ก ๋ฐ›์„์‹œ์— nodemodule์ด ์—†๋‹ค. ์ฆ‰ install ๋ฐ›์•„์ค˜์•ผํ•จ

  2. npm run build โžก๏ธ ํ”„๋กœ๊ทธ๋žจ์„ build ์‹œํ‚ด

  3. pm2 serve build 3000 โ€“name --spa โžก๏ธ pm2 ํ”„๋กœ๊ทธ๋žจ์˜ serve ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด์„œ build ํด๋”๋ฅผ serving์‹œํ‚ด

back package.json

"distribute": "npm i && npx prisma generate && pm2 start server.js --name <project-back> -i max"  // ๊ธฐ๋ณธ

--๋ฐ”๋ฒจ์‚ฌ์šฉ์‹œ--
"start": "babel-node server.js",
"distribute": "npm i && prisma generate && pm2 start --name <project-back> -i max npm -- run start"
  1. pm2 start โžก๏ธ jsํŒŒ์ผ์‹คํ–‰ - ๊ธฐ์กด node ๋ช…๋ น์–ด๋Š” ์ „์—ญ ์—๋Ÿฌ๊ฐ€ ๋‚  ์‹œ ์žฌ ์‹œ์ž‘์ด ๋˜์ง€ ์•Š์ง€๋งŒ pm2 start๋ฅผ ์ด์šฉํ•˜๋ฉด ์žฌ์‹œ์ž‘๋จ



AWS์—์„œ EC2, RDS๋ฅผ ์…‹ํŒ… ํ›„

์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์—ฌ key.pem์„ ๋‹ค์šด๋ฐ›์ž.

key.pem์ด ์žˆ๋Š” ํด๋”์œ„์น˜์—์„œ ssh -i key.pem ec2-user@<ํ™•์ธํ•œ public ip> ์‹คํ–‰

sudo yum install git
git clone <repo_front>
git clone <repo_back>

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

nvm install --lts
nvm use --lts

์ด์ œ๋ถ€ํ„ฐ npm์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

front .env

REACT_APP_BASE_URL='http://13.125.235.62:8000'
GENERATE_SOURCEMAP=false
  • GENERATE_SOURCEMAP โžก๏ธ create-react-app์œผ๋กœ React ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜์—ฌ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ webpack์— ์˜ํ•ด ๋ฒˆ๋“ค๋ง ๋œ ํŒŒ์ผ๊ณผ ํ•ด๋‹น ํŒŒ์ผ์— ๋Œ€์‘๋˜๋Š” sourcemap์ด ์ƒ์„ฑ๋จ sourcemap์€ ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด, ๋””๋ฒ„๊น…์„ ์œ„ํ•œ ํŒŒ์ผ์ด๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์ด ์žˆ๋‹ค๋ฉด ์••์ถ•๋˜๊ณ  ๋‚œ๋…ํ™”๋œ ํŒŒ์ผ์„ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ ๋‹ค์‹œ ์›๋ณธ ์†Œ์Šค์ฒ˜๋Ÿผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ. ํ•˜์ง€๋งŒ, ์‹ค์ œ ๋ฐฐํฌ ์‹œ sourcemap์€ ์ œ๊ฑฐ๋˜์–ด์•ผ ํ•จ. ๋‚ด๋ถ€ ์ฝ”๋“œ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜๋ฏ€๋กœ, ๋‚œ๋…ํ™”์˜ ์ด์ ์„ ๋ชจ๋‘ ์ƒ์‹ค. ๋…ธ์ถœ๋˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ผ์ˆ˜๋ก ๋”์šฑ ์น˜๋ช…์ ์ผ ์ˆ˜ ์žˆ์Œ. ๋นŒ๋“œ ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ(OOM) ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

back .env

DATABASE_URL="mysql://junHyeok:dlwnsgur1@project-wetown.ccrudlxgt09s.ap-northeast-2.rds.amazonaws.com:3306/wetown"
JWT_SECRET="1234"

back, front ๋ชจ๋‘ ํ™˜๊ฒฝ๋ณ€์ˆ˜ํŒŒ์ผ ์ƒ์„ฑ(gitignore ๋˜์–ด์žˆ๊ธฐ๋•Œ๋ฌธ)

๊ทธ๋ฆฌ๊ณ  ๊ฐ์ž์˜ ํด๋ก  ํด๋”์—์„œ npm run distribute ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰์‹œ์ผœ ๋ฐฐํฌํ•จ

๋

๋‚ด๊ฐ€ ์ง์ ‘ ๋ฐฐํฌํ•œ ์‚ฌ์ดํŠธ

WETOWN

์—…๋ฐ์ดํŠธ: