๐Ÿ’ป์›น(Web)/React

[React]AWS EC2๋กœ React ๋ฐฐํฌํ•˜๊ธฐ, ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ

stonesy 2023. 9. 7. 14:32
728x90

Netlify, Firebase๋กœ React ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณธ ์ดํ›„, AWS๋ฅผ ํ†ตํ•œ React ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ๋ฐฉ๋ฒ•๋„ ์•Œ์•„๋ณด์•˜๋‹ค๐Ÿ™Œ๐Ÿป

 

AWS๋ฅผ ํ†ตํ•ด React์™€ ๊ฐ™์€ SPA๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. AWS EC2๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ์™€ AWS S3+cloudfront๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ์ด๋‹ค. ์ด๋•Œ, ๊ฐ ๋ฐฐํฌ ๋ฐฉ๋ฒ•์—์„œ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋ฒ„๊ฐ€ ๋‹ค๋ฅด๋‹ค. EC2๋ฅผ ์ด์šฉํ•œ ๊ฒฝ์šฐ ์›น ์„œ๋ฒ„์™€ WAS ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ณ , S3+cloudfront๋ฅผ ์ด์šฉํ•œ ๊ฒฝ์šฐ ์ •์  ์ฝ˜ํ…์ธ ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”ŽEC2๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ

EC2๋ฅผ ํ†ตํ•ด ์›น ์„œ๋ฒ„์™€ WAS ์„œ๋ฒ„๋ฅผ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, react ํ”„๋กœ์ ํŠธ๋ฅผ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” express ์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด์•ผ ํ•œ๋‹ค. express ์„œ๋ฒ„๋Š” ์›น ์„œ๋ฒ„๋กœ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๊ณ , WAS ์„œ๋ฒ„๋กœ๋„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

EC2๋ฅผ ํ†ตํ•œ ๋ฐฐํฌ ๊ณผ์ •์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. express ์„œ๋ฒ„ ๊ตฌ์ถ•
  2. react ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋’ค ๋นŒ๋“œ
  3. express ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด react ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณต
  4. AWS EC2์— express ์„œ๋ฒ„ ๋ฐฐํฌ

1. express ์„œ๋ฒ„ ๊ตฌ์ถ•

์›ํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋”์—์„œ ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์•„๋ž˜ ๋ช…๋ น์–ด๋Š” Node.js ํ”„๋กœ์ ํŠธ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋กœ ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์„ค์ • ํŒŒ์ผ์ธ package.json์„ ์ƒ์„ฑํ•œ๋‹ค.

npm init -y

๊ทธ๋ฆฌ๊ณ  express ์„œ๋ฒ„ ๊ตฌํ˜„์— ํ•„์š”ํ•œ express package๋ฅผ ์„ค์น˜ํ•œ๋‹ค. ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

npm install —save express

๊ทธ ๋‹ค์Œ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋”์— app.js ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด express ์„œ๋ฒ„ ๊ตฌ์ถ• ์™„๋ฃŒ๋‹ค.

const express = require("express");
const path = require("path");

const app = express();

app.set("port", process.env.PORT || 5000);


app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "/index.html"));
});

app.listen(app.get("port"), () => {
  console.log(app.get("port"), "๋ฒˆ ํฌํŠธ์—์„œ ๋Œ€๊ธฐ์ค‘..");
});

๋งˆ์ง€๋ง‰์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋”์—์„œ ์„œ๋ฒ„์— ์ œ๊ณตํ•  index.html ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <h1>EC2๋กœ React ํ”„๋กœ์ ํŠธ ๋ฐฐํฌํ•˜๊ธฐ</h1>
  </body>
</html>

express ์„œ๋ฒ„๋Š” node app.js ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

2. react ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋’ค ๋นŒ๋“œ

ํ”„๋กœ์ ํŠธ์˜ ๋ฃจํŠธ ํด๋”์— react ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. CRA๋กœ react ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด๋„ ๋˜์ง€๋งŒ ๋‚œ ๋‚ด github์—์„œ react project๋ฅผ cloneํ•ด์™”๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ํด๋”๋กœ ์ด๋™ํ•ด npm install ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€๋“ค์„ ์„ค์น˜ํ•˜๊ณ , npm run build ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ build ํ•ด์ฃผ์—ˆ๋‹ค.

 

 

3. express ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด react ์ •์  ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณต

๋นŒ๋“œํ•œ ํŒŒ์ผ๋“ค์„ ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด express ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•œ๋‹ค.

const express = require("express");
const path = require("path");

const app = express();

app.set("port", process.env.PORT || 5000);

app.use(express.static(path.join(__dirname, "/seoyoung/build")));

app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "/seoyoung/build/index.html"));
});

app.listen(app.get("port"), () => {
  console.log(app.get("port"), "๋ฒˆ ํฌํŠธ์—์„œ ๋Œ€๊ธฐ์ค‘..");
});

 

๋‹ค์‹œ node app.js ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด express ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ๋‚˜์˜ react ํ”„๋กœ์ ํŠธ๊ฐ€ ์ž˜ ์‹คํ–‰๋œ๋‹ค๋ฉด AWS EC2๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•  ์ค€๋น„ ์™„๋ฃŒ์ด๋‹ค.

 

 

4. AWS EC2์— express ์„œ๋ฒ„ ๋ฐฐํฌ

4-1. ssh ์ ‘์†

AWS์— ๋กœ๊ทธ์ธ์„ ํ•œ ๋’ค EC2 ์„œ๋น„์Šค์— ์ ‘์†ํ•˜๊ณ  region์€ ์„œ์šธ๋กœ ํ•ด์ค€๋‹ค. ์ƒˆ ์ธ์Šคํ„ด์Šค๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด EC2ํƒญ์„ ๋ˆ„๋ฅด๊ณ  ์ด๋™ํ•œ๋‹ค.

์ด๋ฆ„ ๋ฐ ํƒœ๊ทธ: ์ž์‹ ์ด ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ์ธ์Šคํ„ด์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐ OS ์ด๋ฏธ์ง€: OS๋Š” Ubuntu๋กœ ์„ค์ •ํ•œ๋‹ค.

์ธ์Šคํ„ด์Šค ์œ ํ˜•: ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ๊ฐ€๋Šฅ์ด๋ผ๋ฉด ํ”„๋ฆฌํ‹ฐ์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์œ ํ˜•์„ ์„ ํƒํ•œ๋‹ค.

ํ‚คํŽ˜์–ด ์ƒ์„ฑ: ํ‚คํŽ˜์–ด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด๋•Œ, ํ‚คํŽ˜์–ด๋ž€ ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค. ํ‚คํŽ˜์–ด ์œ ํ˜•์€ RSA, ํ‚คํŒŒ์ผ ํ˜•์‹์€ .pem์œผ๋กœ ์„ ํƒํ•œ๋‹ค.

๋„คํŠธ์›Œํฌ ์„ค์ •: ๋„คํŠธ์›Œํฌ ์„ค์ • ๋ถ€๋ถ„์€ ๋”ฐ๋กœ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์ง„ํ–‰ํ•˜์˜€๋‹ค.

์„ฑ๊ณต์ ์œผ๋กœ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์—ˆ๋‹ค.

 

๋งŒ๋“ค์–ด์ง„ ์ธ์Šคํ„ด์Šค ์ ‘์†์„ ์œ„ํ•ด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค>์—ฐ๊ฒฐ>SSH ํด๋ผ์ด์–ธํŠธ๋กœ ๋“ค์–ด๊ฐ„๋‹ค. ์•„๋ž˜ ๋ฐฉ๋ฒ•๋“ค์„ ๋”ฐ๋ผํ•˜๋ฉด ssh๋ฅผ ํ†ตํ•ด ๋‚ด ์ปดํ“จํ„ฐ์—์„œ EC2 ์ธ์Šคํ„ด์Šค์— ์ ‘์†๋˜๊ฒŒ ๋œ๋‹ค.

SSH๋ž€ secure shell๋กœ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์›๊ฒฉ ์‹œ์Šคํ…œ์— ์ ‘์†ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ๊ณผ ์†Œํ”„ํŠธ์›จ์–ด ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์ฆ‰, ssh๋Š” EC2 ์ธ์Šคํ„ด์Šค(๊ฐ€์ƒ ์„œ๋ฒ„)์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค. ์ด๋•Œ, ssh(secure shell)์€ ์ฃผ๋กœ unix ๊ณ„์—ด ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœํ† ์ฝœ ๋ฐ ๋ช…๋ น์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ macOS๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‚ด ์ปดํ“จํ„ฐ๋Š” Windows ์šด์˜์ฒด์ œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋”ฐ๋ผ์•ผํ•œ๋‹ค.

๋‚˜๋Š” Windows์—์„œ OpenSSH๋ฅผ ์ด์šฉํ•ด ์ ‘์†ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์˜€๊ณ , ์•„๋ž˜ ๋ฐฉ๋ฒ•์„ ์ฐธ๊ณ ํ•˜์˜€๋‹ค.

https://wookim789.tistory.com/34

 

์œˆ๋„์šฐ ํ„ฐ๋ฏธ๋„์„ ์ด์šฉํ•ด EC2 ์ ‘์†ํ•˜๊ธฐ (5)

์ž ์ง€๋‚œ ๊ธ€์—์„œ EC2 ์ธ์Šคํ„ด์Šค๋ฅผ ๋„์›Œ ๋ณด์•˜๋‹ค. ์ด์ œ ๋‚ด ๋กœ์ปฌํ™˜๊ฒฝ(๋‚ด pc)์—์„œ aws์˜ ec2์— ์ ‘์†ํ•ด๋ณด๊ฒ ๋‹ค. ๋ฐฉ๋ฒ•์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์ด๋‹ค. ์ด์ „์— ์„ค๋ช…ํ•œ SSH ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•  ๊ฒƒ์ธ๋ฐ, mac์ด๋ผ๋ฉด ํ„ฐ๋ฏธ๋„์—์„œ ssh ๋ช…

wookim789.tistory.com

 

์šฐ์„ , PowerShell์„ ์ด์šฉํ•ด Windows์— OpenSSH๋ฅผ ์„ค์น˜ํ•ด์ฃผ์—ˆ๋‹ค.

Connect to your Linux instance from Windows with OpenSSH - Amazon Elastic Compute Cloud

 

Connect to your Linux instance from Windows with OpenSSH - Amazon Elastic Compute Cloud

Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.

docs.aws.amazon.com

Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

์„ค์น˜ ์ดํ›„์—๋Š” ๋‚ด ์‚ฌ์šฉ์ž ํด๋”์˜ .ssh ํด๋”์— ๋‚ด .pem ํŒŒ์ผ์„ ์œ„์น˜์‹œํ‚จ๋‹ค. ์ดํ›„ ํ™•์žฅ์ž๊ฐ€ ์—†๋Š” config ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค.

Host aws_stonesy_ec2
    HostName (์ ‘์†ํ•  ์„œ๋ฒ„์˜ ์ฃผ์†Œ)
    User ubuntu
    IdentityFile ~/.ssh/(๋‚ด pem ํŒŒ์ผ ์ด๋ฆ„).pem

์ ‘์†ํ•  ์„œ๋ฒ„์˜ ์ฃผ์†Œ๋Š” 4. ํผ๋ธ”๋ฆญ DNS์„(๋ฅผ) ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•ด์„œ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

 

์ดํ›„ ํŒŒ์ผ ๊ถŒํ•œ์„ ๋ณ€๊ฒฝํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 3. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ํ‚ค๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.์— ํ•ด๋‹นํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค.

๋‚ด pemํŒŒ์ผ์˜ ์†์„ฑ>๋ณด์•ˆ>๊ณ ๊ธ‰์œผ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

 

1)์ƒ์† ์‚ฌ์šฉ ์•ˆํ•จ

ํ•˜๋‹จ์˜ ์ƒ์† ์‚ฌ์šฉ ์•ˆํ•จ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.

๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŒ์—…์ด ๋œจ๋Š”๋ฐ “์ด ๊ฐœ์ฒด์—์„œ ์ƒ์†๋œ ์‚ฌ์šฉ ๊ถŒํ•œ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.”๋ฅผ ์„ ํƒํ•œ๋‹ค.

ํ™•์ธ์„ ๋ˆ„๋ฅด๊ณ  ๋‚˜์˜จ๋‹ค. ๊ฒฝ๊ณ ์ฐฝ์ด ํ•œ๋ฒˆ ๋œจ๋Š”๋ฐ ๊ทธ๋ƒฅ ํ™•์ธ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋œ๋‹ค.

 

2) ์‚ฌ์šฉ์ž ์ถ”๊ฐ€

ํŽธ์ง‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ  ๊ทธ๋ฃน ๋˜๋Š” ์‚ฌ์šฉ์ž์ด๋ฆ„ ์ถ”๊ฐ€๋ฅผ ๋ˆ„๋ฅธ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์ฝ๊ธฐ, ์ฝ๊ธฐ ๋ฐ ์‹คํ–‰์€ ํ—ˆ์šฉ, ์“ฐ๊ธฐ ๊ถŒํ•œ์€ ๊ฑฐ๋ถ€ํ•œ ํ›„ ์ €์žฅํ•œ๋‹ค.

์ดํ›„ ํ„ฐ๋ฏธ๋„์—์„œ ssh aws_stonesy_ec2๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ธ์Šคํ„ด์Šค์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ‘์†์— ์„ฑ๊ณตํ–ˆ๋‹ค๋ฉด ubuntu@ip~~์˜ ํ˜•์‹์œผ๋กœ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค.

 

4-2. ์šฐ๋ถ„ํˆฌ ๊ฐ€์ƒ ์ปดํ“จํ„ฐ์— node.js, npm, git, ํ”„๋กœ์ ํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ

์„ค์น˜ํ•  ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • npm
  • node.js
  • git
  • git clone ํ”„๋กœ์ ํŠธ

๊ฐ€์žฅ ๋จผ์ € ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ update๋ฅผ ์ง„ํ–‰ํ•œ๋‹ค.

sudo apt update

 

๊ทธ๋ฆฌ๊ณ  ์ฐจ๋ก€๋กœ ์œ„์˜ ๋ชฉ๋ก๋“ค์„ ์„ค์น˜ํ•œ๋‹ค.

sudo apt install npm

sudo apt install nodejs

sudo apt install git

git clone <ํ”„๋กœ์ ํŠธ ์ฃผ์†Œ>

์ดํ›„ ํ”„๋กœ์ ํŠธ์— ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.

cd seoyoung(์ด๊ฑด ๋‚ด ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์ด seoyoung์ด๋‹ˆ๊นŒ)

npm install

npm run build

 

๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆํƒญ์—์„œ ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

๋ณด์•ˆํƒญ>๋ณด์•ˆ ๊ทธ๋ฃน>์ธ๋ฐ”์šด๋“œ ๊ทœ์น™>์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘>๊ทœ์น™์ถ”๊ฐ€๋ฅผ ๋ˆ„๋ฅธ ํ›„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

์ด๋•Œ ๋นŒ๋“œํ•˜๋˜ ๋„์ค‘ ๋ฌดํ•œ๋กœ๋”ฉ์ด ๊ฑธ๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค. ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. ๋ณดํ†ต์€ ์ด๋Ÿฌ๋ฉด ํ•ด๊ฒฐ๋˜๋Š” ๊ฒƒ ๊ฐ™์€๋ฐ ๋‚˜๋Š” ํ•ด๊ฒฐ์ด ์•ˆ๋๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋ƒฅ ๋กœ์ปฌ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•œ ํ›„, ๋นŒ๋“œ ํด๋”๋ฅผ github์— ์˜ฌ๋ฆฌ๊ณ  ๋‹ค์‹œ git pullํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค.

https://progdev.tistory.com/26

*์Šค์™‘ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์„ฑ

sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=2048

sudo mkswap /mnt/swapfile

sudo swapon /mnt/swapfile

*์Šค์™‘๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

sudo swapoff -v /mnt/swapfile

sudo rm /mnt/swapfile

⇒ ์ด ๋ฐฉ๋ฒ•์œผ๋กœ๋„ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์—ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  React ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก pm2๋ฅผ ์ด์šฉํ–ˆ๋‹ค. pm2(Process Manager)๋ž€ pm2๋Š” Node.js ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ๋งค๋‹ˆ์ €์ด๋‹ค. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ pm2๋ฅผ ์‚ฌ์šฉํ•˜์˜€๋‹ค. ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ์ปดํ“จํ„ฐ์—์„œ ์„œ๋ฒ„๋ฅผ ์ข…๋ฃŒํ–ˆ์„ ๋•Œ, ๋ฐฐํฌ ํ™˜๊ฒฝ๋„ ์ค‘๋‹จ๋  ๊ฒƒ์ด๋‹ค.

๋จผ์ € pm2๋ฅผ ์„ค์น˜ํ•˜๊ณ 

sudo npm -g install pm2

pm2 ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.

pm2 start app.js

์ด ๊ณผ์ •์„ ํ†ตํ•ด ํ„ฐ๋ฏธ๋„์„ ์ข…๋ฃŒํ•ด๋„ ํŽ˜์ด์ง€์— ์ž˜ ์ ‘์†๋˜๊ฒŒ ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

pm2 list

pm2๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.(stop ๋’ค์— ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ์•„์ด๋””๋ฅผ ๋’ค์— ๋ถ™์—ฌ์ฃผ๋ฉด ๋œ๋‹ค.)

pm2 stop 0

 

โ—์ถ”๊ฐ€1: ํฌํŠธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ

๊ทผ๋ฐ ์•„์ง ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ๋‚ด๊ฐ€ ๋ฐฐํฌํ•œ ์›น์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜๋ ค๋ฉด ํ•ญ์ƒ ๋’ค์— :ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์—ฌ์•ผํ•œ๋‹ค. ๊ทธ๋ƒฅ ์ ‘์†ํ•ด๋„ ๋‚˜์˜ ์›น์‚ฌ์ดํŠธ๋กœ ์—ฐ๊ฒฐ๋˜๋„๋ก ํ•˜๋ ค๋ฉด ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์„ค์ •์„ ํ•ด์•ผํ•œ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์›น ํŽ˜์ด์ง€์— ์ ‘์†ํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ ํฌํŠธ๊ฐ€ ๋’ค์— ๋ถ™์–ด์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ํฌํŠธ๋Š” ๋ณด์ด์ง€ ์•Š๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์–ด ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ๋ˆˆ์น˜์ฑ„์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

  • http์˜ ๊ฒฝ์šฐ: 80
  • https์˜ ๊ฒฝ์šฐ: 443

ํฌํŠธ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๋ฅผ ์œ„ํ•œ ๋ช…๋ น์–ด๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

// ๋งจ ๋’ค์— ์ˆซ์ž๋งŒ ์ž์‹ ์˜ ์‹คํ–‰ํ•˜๋ ค๋Š” ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๋œ๋‹ค.
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 5000
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 5000

๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์—ฌ๊ธฐ์— ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ์„ค์ •๊นŒ์ง€ ํ•ด์ค˜์•ผ ํฌํŠธ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค. ๋ณด์•ˆํƒญ>๋ณด์•ˆ๊ทธ๋ฃน>์ธ๋ฐ”์šด๋“œ ๊ทœ์น™>์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํŽธ์ง‘์„ ๋ˆŒ๋Ÿฌ์„œ ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

์ด์ œ ๋’ค์— ํฌํŠธ๋ฒˆํ˜ธ๋ฅผ ๋ถ™์ด์ง€ ์•Š์•„๋„ ์ •์ƒ์ ์œผ๋กœ ์ ‘์†์ด ๋œ๋‹ค!

 

 

โ—์ถ”๊ฐ€2: ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ

์—ฌ๊ธฐ์„œ ๋๋‚ด๊ธฐ ์•„์‰ฌ์›Œ์„œ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์‚ฌ์„œ ๋‚ด๊ฐ€ ๋ฐฐํฌํ•œ ์›น ์‚ฌ์ดํŠธ์— ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค. ๋„๋ฉ”์ธ์€ ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ์ด๋‚˜ ๊ฐ€๋น„์•„์—์„œ ๊ตฌ๋งคํ•˜๋ฉด ๋œ๋‹ค. ๋‚˜๋Š” ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ์ด ์กฐ~๊ธˆ ๋” ์ €๋ ดํ•ด์„œ ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ์„ ์ด์šฉํ•˜์˜€๋‹ค.

๋„๋ฉ”์ธ์„ ๊ตฌ๋งคํ–ˆ๋‹ค๋ฉด aws์—์„œ Route 53์—์„œ ๋„๋ฉ”์ธ ์„ค์ •์„ ํ•ด์•ผํ•œ๋‹ค. Route 53>ํ˜ธ์ŠคํŒ… ์˜์—ญ>ํ˜ธ์ŠคํŒ… ์˜์—ญ ์ƒ์„ฑ์„ ๋ˆ„๋ฅด๊ณ  ๋‚ด๊ฐ€ ๊ตฌ๋งคํ•œ ๋„๋ฉ”์ธ์„ ๋“ฑ๋กํ•œ๋‹ค.

ํ˜ธ์ŠคํŒ… ์˜์—ญ ์ด๋ฆ„์„ ๋ˆ„๋ฅด๊ณ  ๋“ค์–ด๊ฐ€๋ณด๋ฉด 2๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋œฐํ…๋ฐ NS ์œ ํ˜•์˜ ๋ ˆ์ฝ”๋“œ์˜ ๊ฐ’/ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ… ๋Œ€์ƒ์„ ๋‚ด๊ฐ€ ๊ตฌ๋งคํ•œ ๋„๋ฉ”์ธ์˜ ๋„ค์ž„์„œ๋ฒ„(ํ˜ธ์ŠคํŠธ)๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์ €์žฅํ•œ๋‹ค. 4๊ฐœ์˜ ๊ฐ’์ด ์žˆ์„ํ…๋ฐ 4๊ฐœ ๋‹ค ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค! ์ด ๊ณผ์ •์€ ํŠธ๋ž˜ํ”ฝ ๋ผ์šฐํŒ…์˜ ๊ถŒํ•œ์„ ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ณผ์ •์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ด์ œ ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ-๋‚˜์˜ ์„œ๋น„์Šค-๋‚˜์˜ ๋„๋ฉ”์ธ>๋„ค์ž„์„œ๋ฒ„/DNS ํƒญ>DNS ๋ ˆ์ฝ”๋“œ ๊ด€๋ฆฌ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ด์ค€๋‹ค. ์ € ๊ฐ’ ๋ถ€๋ถ„์—๋Š” ํผ๋ธ”๋ฆญ IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋œ๋‹ค. ์œ ํ˜• A๋Š” IPv4์˜ ์ฃผ์†Œ์™€ ๋„๋ฉ”์ธ ์—ฐ๊ฒฐ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฆ„์ด www์ธ ๊ฒƒ๊ณผ @์ธ ๊ฒƒ 2๊ฐœ๋ฅผ ์„ค์ •ํ•ด์คŒ์œผ๋กœ์จ www.๋„๋ฉ”์ธ.com์œผ๋กœ ์ ‘๊ทผํ•˜๋“ , ๋„๋ฉ”์ธ.com์œผ๋กœ ์ ‘๊ทผํ•˜๋“  ๋‚˜์˜ ์›น ์‚ฌ์ดํŠธ๋กœ ์ •์ƒ์ง„์ž… ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•œ๋‹ค. 

10๋ถ„์ •๋„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค๊ณ  ํ•œ๋‹ค!

 

๐Ÿ”Ž์ฐธ๊ณ /์ถœ์ฒ˜

ํ”„๋ก ํŠธ ๋ฐฐํฌ ๋ฐฉ๋ฒ• 1ํŽธ[AWS EC2๋ฅผ ํ™œ์šฉํ•œ ๋ฐฐํฌ] with React ,Express ํ™˜๊ฒฝ

AWS EC2๋กœ ๋ฐฐํฌํ•˜๊ธฐ(2) | AWS ๋ฐฐํฌ ํ›„ ๋„๋ฉ”์ธ ๊ตฌ๋งคํ•ด์„œ ์—ฐ๊ฒฐํ•˜๊ธฐ (HOSTING.KR) (velog.io)

 

 

728x90