์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[๋…ธ๋“œ 2] 15์žฅ. AWS๋กœ ๋ฐฐํฌํ•˜๊ธฐ

23-24/Node.js 2

by _๋„๋‹ด 2024. 1. 12. 10:00

๋ณธ๋ฌธ

728x90

 

 

๐ŸŒŸ15์žฅ ํ‚ค์›Œ๋“œ๐ŸŒŸ

pm2

redis

AWS

Lightsail

 

 

11์žฅ์˜ NodeBird ์•ฑ์— ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋ฅผ ์ ์šฉํ•ด ๋ฐฐํฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

15.1 ์„œ๋น„์Šค ์šด์˜์„ ์œ„ํ•œ ํŒจํ‚ค์ง€

๐Ÿ“Œ morgan๊ณผ express-session

app.js์—์„œ ๊ฐœ๋ฐœ์šฉ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋ฐฐํฌ์šฉ์œผ๋กœ ๋ณ€๊ฒฝ

if (process.env.NODE_ENV === 'production') {
  app.enable('trust proxy');
  app.use(morgan('combined'));
  app.use(
    helmet({
      contentSecurityPolicy: false,
      crossOriginEmbedderPolicy: false,
      crossOriginResourcePolicy: false,
    }),
  );
  app.use(hpp());
} else {
  app.use(morgan('dev'));
}
  • ๋ฐฐํฌ ํ™˜๊ฒฝ์ธ ๊ฒฝ์šฐ morgan์„ combined ๋ชจ๋“œ๋กœ ์‚ฌ์šฉ
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ธ ๊ฒฝ์šฐ dev ๋ชจ๋“œ๋กœ ์‚ฌ์šฉ
const sessionOption = {
  resave: false,
  saveUninitialized: false,
  secret: process.env.COOKIE_SECRET,
  cookie: {
    httpOnly: true,
    secure: false,
  },
  store: new RedisStore({ client: redisClient }),
};
if (process.env.NODE_ENV === 'production') {
  sessionOption.proxy = true;
  // sessionOption.cookie.secure = true;
}
  • ๋ฐฐํฌ ํ™˜๊ฒฝ์ธ ๊ฒฝ์šฐ https ์ ์šฉ์„ ์œ„ํ•˜์—ฌ proxy์™€ cookie.secure๋ฅผ true๋กœ ๋ณ€๊ฒฝ

๐Ÿ“Œ ์‹œํ€„๋ผ์ด์ฆˆ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋ฐฐํฌ ํ™˜๊ฒฝ์œผ๋กœ ์„ค์ •

config.json์„ config.js๋กœ ์ˆ˜์ • ํ›„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ .env ํŒŒ์ผ์— ๊ธฐ์ž…

 

 

๐Ÿ“Œ cross-env

cross-env ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•ด ๋™์ ์œผ๋กœ process.env(ํ™˜๊ฒฝ ๋ณ€์ˆ˜) ๋ณ€๊ฒฝ

npm i cross-env

 

packjson.json

  • ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ process.env๋ฅผ ๋™์ ์œผ๋กœ ์„ค์ •
  • process.env.NODE_ENV๊ฐ€ production์ด ๋˜๊ณ , process.env.PORT๊ฐ€ 80์ด ๋œ๋‹ค.

 

๐Ÿ“Œ sanitize-html, csurf

sanitize-html : XSS(Cross Site Scripting)์˜ ๊ณต๊ฒฉ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€

csurf : CSRF(Cross Site Request Forgery)์˜ ๊ณต๊ฒฉ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€

npm i sanitize-html
npm i csuf

 

XSS๋ž€

  • ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์ดํŠธ์— ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ณต๊ฒฉ
  • ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฒŒ์‹œ๊ธ€์„ ์—…๋กœ๋“œํ•  ๋•Œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌ

 

CSRF๋ž€

  • ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„์น˜ ์•Š๊ฒŒ ๊ณต๊ฒฉ์ž๊ฐ€ ์˜๋„ํ•œ ํ–‰๋™์„ ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ณต๊ฒฉ
  • ์‚ฌ์šฉ์ž๊ฐ€ ํ•œ ํ–‰๋™์ด ์ง์ ‘ ํ•œ ๊ฒƒ์ด ๋งž๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ธ์ฆํ•˜๋„๋ก ๊ฒ€์‚ฌ

 

๐Ÿ“Œ pm2

์›ํ™œํ•œ ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•œ ํŒจํ‚ค์ง€

  • ์„œ๋ฒ„๊ฐ€ ์—๋Ÿฌ๋กœ ์ธํ•ด ๊บผ์กŒ์„ ๋•Œ ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์‹ฑ์„ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ์˜ฌ ๋•Œ ์•Œ์•„์„œ ์š”์ฒญ์„ ์—ฌ๋Ÿฌ ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค์— ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐ
npm i pm2

npm start

npm start๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

 

 

๐Ÿ“Œ winston

์‹ค์ œ ์„œ๋ฒ„๋ฅผ ์šด์˜ํ•  ๋•Œ console.log์™€ console.error๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“ˆ

 

๐Ÿ“Œ ๋Œ€์ฒด ์ด์œ ?

console.log์™€ console.error๋Š” console ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋“ค์ด ์–ธ์ œ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๊ธฐ ํž˜๋“ค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ์ˆœ๊ฐ„ ๋กœ๊ทธ๊ฐ€ ์‚ฌ๋ผ์ ธ ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ด์™€ ๊ฐ™์€ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋กœ๊ทธ๋ฅผ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ €์žฅํ•  ๋•Œ winston์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

๐Ÿ“Œ helmet, hpp

์„œ๋ฒ„์˜ ๊ฐ์ข… ์ทจ์•ฝ์ ์„ ๋ณด์™„ํ•ด ์ฃผ๋Š” ํŒจํ‚ค์ง€๋“ค์ด๋ฉฐ, ์ต์Šคํ”„๋ ˆ์Šค ๋ฏธ๋“ค์›จ์–ด๋กœ์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๐Ÿ“Œ connect-redis

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์„ธ์…˜ ๊ณต์œ ๋ฅผ ์œ„ํ•ด ๋ ˆ๋””์Šค์™€ ์ต์Šคํ”„๋ ˆ์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด ์ฃผ๋Š” ํŒจํ‚ค์ง€

์„ธ์…˜ ์•„์ด๋””์™€ ์‹ค์ œ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๋ ˆ๋””์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•œ๋‹ค.

npm i redis connect-redis

 

๐Ÿ“Œ ๋ ˆ๋””์Šค๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค ์‚ฌ์šฉ

Subscription ์ƒ์„ฑ
Public endpoint ํ™•์ธ
.env ํŒŒ์ผ์— ์„ค์ •

 

 

๐Ÿ“Œ nvm, n

๋…ธ๋“œ ๋ฒ„์ „์„ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ‚ค์ง€

์œˆ๋„์šฐ : nvm-installer ์‚ฌ์šฉ

๋ฆฌ๋ˆ…์Šค, ๋งฅ : n ํŒจํ‚ค์ง€ ์‚ฌ์šฉ

 

 

15.3 AWS ์‹œ์ž‘ํ•˜๊ธฐ

 

๐Ÿ“Œ Lightsail์„ ์‚ฌ์šฉํ•ด ๋…ธ๋“œ ์„œ๋น„์Šค ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฐฐํฌํ•˜๊ธฐ

์›” $3.5 ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

 

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
Connect using SSH ๋ฒ„ํŠผ ์„ ํƒ

* ๋ฐฐํฌ๋Š” Node.js ๊ต๊ณผ์„œ ์ฐธ๊ณ 

 


Node.js #2 

Editor : ํŒŒ์˜ค๋ฆฌ

728x90

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ