๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
CS/๋ณด์•ˆ

[๋ณด์•ˆ] : .ENV ์ ์šฉํ•˜๊ธฐ

by ๊ถŒ์Šพํ–„ 2023. 7. 20.

ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ

๋กœ๊ทธ์ธ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋˜๋Š” JSONWEBTOKEN์˜ SECRET_KEY๋ฅผ "๋ณด์•ˆ์œ ์ง€"๋ฅผ ์œ„ํ•ด ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ธํŒ…

const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
require('dotenv').config(); // 

const { Users } = require('../models');

API ์„ค์ •

router.post('/login', async (req, res) => {})

Request Data

  const { email, password } = req.body;

์˜ˆ์™ธ์ฒ˜๋ฆฌ

    // ์œ ์ €ํ™•์ธ
    const user = await Users.findOne({ where: { email } });
    
    if (!user) {
      return res.status(409).json({ errorMessage: '์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ณ„์ •์ž…๋‹ˆ๋‹ค.' });
    }
    
    // user์˜ ์ด๋ฉ”์ผ๊ณผ ํŒจ์Šค์›Œ๋“œ ํ™•์ธ
    if (email !== user.email || password !== user.password) {
      return res.status(409).json({ errorMessage: '์ด๋ฉ”์ผ ๋˜๋Š” ํŒจ์Šค์›Œ๋“œ๋ฅผ ํ™•์ธํ•ด ์ฃผ์„ธ์š”.' });
    }

JWT ์ƒ์„ฑ

    const token = jwt.sign({ user_id: user.user_id }, "customized-secret-key");
    
    // ์—ฌ๊ธฐ์˜ ์ฝ”๋“œ์—์„œ ์ƒ์„ฑ์— ์‚ฌ์šฉ๋œ customized-secret-key ์„ "ํ™˜๊ฒฝ๋ณ€์ˆ˜" ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.

"customized-secret-key" ์˜ ์—ญํ• 

JWT ๊ตฌ์„ฑ์š”์†Œ ์ค‘ SIGNATURE๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋ฉฐ, ํ•ด๋‹น ํ† ํฐ์„ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๋น„๋ฐ€ํ‚ค๊ฐ’์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ์‹œํฌ๋ฆฟํ‚ค์˜ ๋ณด์•ˆ์ด ์œ ์ง€๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด, ๋กœ๊ทธ์ธ ํ–ˆ์„ ๋‹น์‹œ์— ์ƒ์„ฑ๋˜๋Š” token์„ ํƒˆ์ทจ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ ์ด์Šˆ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•ด๋‹น ์‹œํฌ๋ฆฟํ‚ค๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ ์ž ํ•œ๋‹ค.


ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ

 

 

.ENV ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ฝ”๋“œ ์„ธํŒ…

Node.js ์—์„œ๋Š” ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์†Œ์Šค ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด .env ํŒŒ์ผ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

1. .env ํŒŒ์ผ ์ƒ์„ฑ

 

2. ์ฝ”๋“œ ์„ธํŒ…

ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ธํŒ…์€ key - value ์˜ ํ˜•ํƒœ๋กœ ์„ธํŒ…์„ ์‹ค์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค.

SECRET_KEY=customized-secret-key

// SECRET_KEY ๋ผ๋Š” ๊ฐ’์— ๊ธฐ์กด์˜ ์‹œํฌ๋ฆฟํ‚ค์˜€๋˜ customized-secret-key ๋ฅผ ๋‹ด์•˜๋‹ค.

.env ํŒŒ์ผ ์„ธํŒ… ๋.

 

dotenv ํŒจํ‚ค์ง€ ์„ค์น˜

npm i dotenv

// i ๋Š” install ์˜ ์•ฝ์ž๋กœ ๋‘˜ ๋‹ค ๋™์ผํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.
// package.json

  "dependencies": {
    "cookie-parser": "^1.4.6",
    "dotenv": "^16.3.1",     // ์„ค์น˜ ํ™•์ธ ์™„๋ฃŒ.
    "express": "^4.18.2",
    "jsonwebtoken": "^9.0.1",
    "mysql2": "^3.5.1",
    "nodemailer": "^6.9.3",
    "sequelize": "^6.32.1"
  },
  "devDependencies": {
    "nodemon": "^3.0.1",
    "sequelize-cli": "^6.6.1"
  }

 

require("dotenv").config()

ํ•ด๋‹น ์ฝ”๋“œ๋Š” Node.js ํ™˜๊ฒฝ์—์„œ .env ํŒŒ์ผ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ์ž‘์—…ํŒŒ์ผ์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ์ „์— ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค€๋‹ค.

dotenvํŒจํ‚ค์ง€๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๋ณ€์ˆ˜๋’ค์— config()๋ฅผ ์‹คํ–‰์‹œ์ผœ๋„ ๋œ๋‹ค.

const dotenv = require('dotenv');
dotenv.config();

 

 

process.env."ํ™˜๊ฒฝ๋ณ€์ˆ˜ KEY"

.env ํŒŒ์ผ์— ์„ธํŒ…ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š”  process.env ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    // jwt ์ƒ์„ฑ
    const token = jwt.sign({ user_id: user.user_id }, process.env.SECRET_KEY);
    
    // ๊ธฐ์กด์˜ "customized-secret-key"๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌํ•œ key๊ฐ’์ธ SECRET_KEY๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์œ ์ €์ •๋ณด์— ๋Œ€ํ•ด ๋ฏผ๊ฐํ•œ ์ •๋ณด๋ฅผ ์ง€๋‹Œ ์‹œํฌ๋ฆฟํ‚ค๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒƒ์— ์„ฑ๊ณตํ–ˆ๋‹ค.

 

์˜ค๋Š˜ ๊ณต๋ถ€ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํ˜„์žฌ ์ด์šฉ์ค‘์ธ DB์˜ ์„ธํŒ…๊ฐ’๋„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

์™œ๋ƒ๋ฉด, ๊ฐ€๋” .gitignore์— config/ ๋ฅผ ํ†ตํ•ด์„œ ์ œ์™ธ๋ฅผ ์‹œ์ผœ์คŒ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ™์ด github ์— commit ๋˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด ๋ถ€๋ถ„์—์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์„ธํŒ…ํ•œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ’์œผ๋กœ DB์„ธํŒ…์„ ์ง„ํ–‰ํ•œ๋‹ค๋ฉด ๊ฐœ์ธ์ •๋ณด ๋ณด์•ˆ์œ ์ง€์— ์ข‹์€ ์—ญํ• ์„ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค ^^

 

#ํ™˜๊ฒฝ๋ณ€์ˆ˜ #ENV #์‹œํฌ๋ฆฟํ‚ค #๋ณด์•ˆ์œ ์ง€

'CS > ๋ณด์•ˆ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CS] : ์ฟ ํ‚ค์™€ ์„ธ์…˜  (0) 2023.08.28
[๋ณด์•ˆ] : CORS ?  (0) 2023.08.23