Front-End/JavaScript

.ENV ์„ค์ •ํ•˜๊ธฐ (feat. Vercel)

๐ŸŒณ์ง€ํ˜œ์˜ ์ˆฒ 2022. 12. 22. 18:08

โ–ถ api key๋ฅผ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•œ ์šฉ๋„ (์†Œ์Šค์ฝ”๋“œ์—์„œ ์ˆจ๊ธฐ๊ธฐ - ๋ณด์•ˆ์šฉ)

โ–ถ FE์—์„  ์ฝ”๋“œ๊ฐ€ ์ „๋ถ€ ๋…ธ์ถœ์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์— api  key๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ฒƒ์€ BE ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์š”์ฒญํ•ด์•ผ ํ•œ๋‹ค.

 

ํŒŒ์ผ๋ช… : startProject.sh

- ์‰˜

-ํ•œ๊บผ๋ฒˆ์— ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

- ํ˜„์—…์—์„œ ์ž์ฃผ ์“ฐ์ด์ง€๋Š” ์•Š์Œ.

npm init -y // npm ์ดˆ๊ธฐํ™”
npm i -D parcel vercel // parcel, vercel(์„œ๋ฒ„๋ฆฌ์Šค ํ•จ์ˆ˜๋ฅผ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•จ)์„ ๊ฐœ๋ฐœ์˜์กด์„ฑ(devDependencies)๋กœ ์„ค์น˜
mkdir src // ํด๋” ๋งŒ๋“ค๊ธฐ
touch src/main.js
touch index.html
// Window ์‚ฌ์šฉ์ž๋Š” touch ๋Œ€์‹  echo
  1. root ๊ฒฝ๋กœ์— vercel.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค.
// vercel.json
{
    "devCommand": "npm run dev",
    "buildCommand": "npm run build"
}

// package.json
// ์ถ”๊ฐ€
"scripts": {
    "vercel": "vercel dev"
}

ํ„ฐ๋ฏธ๋„์— 'sh startProject.sh'๋ฅผ ์ž…๋ ฅํ•ด ์‹คํ–‰ํ•œ๋‹ค.

 

 

root๊ฒฝ๋กœ์— apiํด๋” ์ƒ์„ฑ

- vercel์ด ํ•ด๋‹น ํ”„๋กœ์ ํŠธ ์•ˆ์— 'api'๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ํด๋”๋ฅผ ์•Œ์•„์„œ ์ฐพ๋Š”๋‹ค.

root ํŒŒ์ผ ํŠธ๋ฆฌ

 

 

apiํด๋” ์•ˆ์— ์‚ฌ์šฉํ•  api์˜ ์ด๋ฆ„์ด ๋  ํŒŒ์ผ์„ ์ƒ์„ฑ (ํ†ต์‹ ํ•  ํŒŒ์ผ)

npm i node-fetch@2

// node.js(์„œ๋ฒ„ํ™˜๊ฒฝ)์—์„œ fetchํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ํ•ด ์ค€๋‹ค.
// * ์ตœ์‹  ๋ฒ„์ „์ธ ๋ฒ„์ „ 3์€ ES Module์„ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„์ „ 2๋กœ ์„ค์น˜ํ•ด์ค€๋‹ค.

 

 

  • ./api/movie.js -> ํ†ต์‹ ํ•  ํŒŒ์ผ
// ์„ค์น˜ํ•œ node-fetch๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
// ์˜ˆ์‹œ
import fetch from 'node-fetch'

const { OMDB_API_KEY } = process.env

export default async function handler(request, response) {
  const { title } = JSON.parse(request.body)
  const res = await fetch(`https://omdbapi.com/?apikey=${OMDB_API_KEY}&s=${title}`)
  const json = await res.json()
  response.status(200).json(json)
}

 

  • ./src/main.js
// ์˜ˆ์‹œ
async function getMovies(title) {
    const res = await fetch('/api/movie', {
        method: 'POST'
        body: JSON.stringify({
            title
        })
    })
    const json =  await res.json()
    console.log(json)
}

async function getTodos() {
    const res = await fetch()
}
getMovies('frozen')

 

 

 

.ENV ์„ค์น˜

npm i -D dotenv

 

 

 

root๊ฒฝ๋กœ์— .env ํŒŒ์ผ ์ƒ์„ฑ

- (์„ ํƒ) vscode ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ ์ค‘, 'DotENV'๋ฅผ ์„ค์น˜ํ•˜๋ฉด .envํŒŒ์ผ์—์„œ๋„ ์ฝ”๋“œ ํ•˜์ด๋ผ์ดํŒ…์ด ๋œ๋‹ค.

API_KEY = <์‹ค์ œ API ํ‚ค> // ex) API_KEY = ab4d654e

// apiํ‚ค๊ฐ€ ๋…ธ์ถœ๋˜๋Š” ํŒŒ์ผ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๊ณ  fetch์— ์‹ค์ œ api key๋Œ€์‹  'API_KEY'๋กœ ์ง€์ •ํ•œ๋‹ค.
// const { API_KEY } = process.env  ์˜ˆ์‹œ -> "./api/movie.js" ํŒŒ์ผ

 

 

 

๊นƒ์— ์˜ฌ๋ฆฌ๊ธฐ ์ „, '.gitignore'์— .envํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊นƒ์—์„œ .envํŒŒ์ผ์„ ์ˆจ๊ธด๋‹ค.

.parcel-cache
node_modules
dist
.vercel
.env

 

 

 

Netlify ๋ฐฐํฌ

๊นƒ ๋ ˆํฌ์— ์˜ฌ๋ฆฐ ํ”„๋กœ์ ํŠธ๋ฅผ Netlify๋กœ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ,

- key์— .env์— ์„ค์ •ํ•ด ๋†“์€ ๋ณ€์ˆ˜๋ช…์„, Value์—๋Š” apikey๊ฐ’์„ ๋„ฃ๊ณ  'Deploy site' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค.