...

๋ ธ๋ env ํ๊ฒฝ๋ณ์ ์ค์
๋ณดํต ๋ ธ๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐ(development)ํ๊ณ ๋ฐฐํฌ(production)ํ ๋ env ๊ฐ์ ์ด์ฉํด์ ๊ตฌ์ฑํ๋ค. ์๋ฅผ๋ค์ด ๋ฐฐํฌ ๋ชจ๋ ์ผ ๋์๋ ํ์ผ ์บ์ฑ, ์๋ฌ ๋ฉ์ธ์ง ๊ฐ์ถ๊ธฐ ๋ฑ ๋ฐฐํฌ์ ์ ํฉํ ํ๊ฒฝ ์ค์ ์ ํ๊ณ , ๊ฐ๋ฐ ๋ชจ๋ ์ผ ๋์๋ ํ์ผ ์บ์ฑ ๋ฐฉ์ง, ๋๋ฒ๊ทธ๋ฅผ ์ํ ์์ธํ ์๋ฌ ๋ฉ์ธ์ง ๋ณด์ด๊ธฐ ๋ฑ ๊ฐ๋ฐ์ ํ์ํ ํ๊ฒฝ ์ค์ ์ ํ๋ค.
์ค๋ฌด ์ฝ๋๋ฅผ ๋ค์๋ฉด ๋ํ์ ์ผ๋ก ๋ ธ๋ ์๋ฒ์ ๋ก๊ทธ๋ฅผ ์ฐ์ด์ฃผ๋ morgan ๋ฏธ๋ค์จ์ด์ผ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ก๊ทธ ๋ ๋ฒจ์ ๊ฐ๋ฐ์ผ๋๋ 'dev', ๋ฐฐํฌ์ผ๋๋ 'combined' ๋ก ์ค์ ํ์ฌ ์ ์ฉ์ํจ๋ค.
// ๋
ธ๋ ํ๊ฒฝ ๋ณ์ ์ค์ ์ ๋ฐ๋ผ morgan ์ค์ ์ ๋ฌ๋ฆฌํจ
if (process.env.NODE_ENV === 'production') {
app.use(morgan('combined')); // ๋ฐฐํฌ
} else {
app.use(morgan('dev')); // ๊ฐ๋ฐ
}
์์ฒ๋ผ process.env.NODE_ENV ๋ฅผ ์ง์ .env ํ์ผ์ ๋ช
์ํด์ ์ฌ์ฉํด๋ ๋์ง๋ง, ๊ฐ๋ฐ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ์ ๋์๊ฐ๋ฉด์ ํ
์คํธํ๊ณ ๊ฐ๋ฐํ ๋ ์ผ์ผํ ํ
์คํธ๋ฅผ ๋ฐ๊ฟ์ฃผ๋๊ฑด ์กฐ๊ธ ๋ฒ๊ฑฐ๋กญ๋ค. ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ด package.json ์ script ๋ถ๋ถ์ ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ๋ฐฐํฌ ํ๊ฒฝ npm ์คํฌ๋ฆฝํธ ๋ช
๋ น์ด๋ฅผ ๋ค๋ฅด๊ฒํด์ ๊ฐ๋ฐํ๊ฒฝ์ ํธ๋ฆฌํ๊ฒ ๊ตฌ์ฑ์ด ๊ฐ๋ฅํ๋ค.
{
"name": "nordbird",
"version": "1.0.0",
"description": "ํฌํธํด๋ฆฌ์ค",
"main": "app.js",
"scripts": {
"start": "NODE_ENV=production PORT=80 node app", // NODE_ENV ํ๊ฒฝ๋ณ์๋ฅผ production์ผ๋ก PORT ํ๊ฒฝ๋ณ์๋ฅผ 80์ผ๋ก ํ๊ณ ์๋ฒ ์คํ
"dev": "nodemon app",
},
"keywords": [],
"author": "inpa",
"license": "MIT",
"devDependencies": {
"nodemon": "^2.0.15"
},
"dependencies": {
// ...
}
}
์ด๋ฐ์์ผ๋ก package๋ฅผ ๊ตฌ์ฑํ๊ฒ ๋๋ฉด, $ npm start ํ ๋๋ ์๋น์ค ๋ฐฐํฌํ๊ฒฝ์ด ๋๊ณ , $ npm run dev ํ๋ฉด ๊ฐ๋ฐํ๊ฒฝ์ผ๋ก ์น์๋น์ค๋ฅผ ์คํํ๊ฒ ๋๋ค. ๊ทธ๋ฆฌ๊ณ "start" ๋ถ๋ถ์ ์์ธํ ๋ณด๋ฉด ํ๊ฒฝ๋ณ์์ ๊ฐ์ ๋์
ํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.(process.env.NODE_ENV๊ฐ production์ด ๋๊ณ , process.env.PORT๊ฐ 80์ด ๋๋ค)
์ด๋ ๊ฒ ์ค์ ํ๋ฉด, ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ๋ process.env๊ฐ์ ๋์ ์ผ๋ก ์ค์ ํ์ฌ, ์์์ if๋ฌธ์ ์ฌ์ฉํ์ฌ 1๊ฐ์ ์ง์ ์ ์ผ๋ก๋ ์ํฉ์ ๋ง๊ฒ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ํฌ๋ํฐ ๋ฌธ์ ์ ์ด ์กด์ฌํ๋ค. ์ ๋ฌํ ๋ฐฉ์์ ๋งฅOS๋ ๋ฆฌ๋ ์ค์์๋ ๋์๊ฐ์ง๋ง, ์ ์ธ๊ณ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์๋์ฐOS ์์๋ ๋น๋ ์ธ์์ด ์๋๋ค๋ ์ ์ด๋ค.
> npm start
'NODE_ENV'์(๋) ๋ด๋ถ ๋๋ ์ธ๋ถ ๋ช
๋ น, ์คํํ ์ ์๋ ํ๋ก๊ทธ๋จ, ๋๋ ๋ฐฐ์น ํ์ผ์ด ์๋๋๋ค.
๋คํํ ๋ ธ๋ ํจํค์ง ์ง์์ cross-env ๋ชจ๋์ด ์กด์ฌํ๋ค. cross-env ๋ชจ๋์ ์ฌ์ฉํ๋ฉด OS๊ฐ์ ํธํ์ฑ์ ํด๊ฒฐํ ์ ์๋ค.
cross-env ๋ชจ๋
cross-env ๋ชจ๋์ ํ๋ก์ ํธ ์ฐธ์ฌ์ ๊ฐ๊ฐ์ด MacOS, Windows, Linux ๋ฑ ๋ค์ํ OS ๋ง๋ค ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ํ ๋์ฑ ์ ๋ง๋ จํ ๋ชจ๋์ด๋ค. ๊ทธ๋์ corss-env ํจํค์ง๋ฅผ ์ฌ์ฉํ๋ฉด ๋์ ์ผ๋ก process.env(ํ๊ฒฝ ๋ณ์)๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๋ชจ๋ ์ด์์ฒด์ ์์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ํ๊ฒฝ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋๋ค.
cross-env ๋ชจ๋ ์ฌ์ฉ๋ฒ
cross-env
Run scripts that set and use environment variables across platforms. Latest version: 7.0.3, last published: a year ago. Start using cross-env in your project by running `npm i cross-env`. There are 5087 other projects in the npm registry using cross-env.
www.npmjs.com
> npm install cross-env
{
...
"scripts": {
"start": "cross-env NODE_ENV=production PORT=80 node server", // cross-env ๋ฅผ ๋ช
์ํด์ค๋ค
"dev": "nodemon server",
"test": "jest"
},
...
}
์ ์ฉ ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ฐ๋จํ๋ค. package.json ์ ํ๊ฒฝ๋ณ์ ๋ถ๋ถ ์์ cross-env๋ฅผ ๋ถ์ด๊ธฐ๋ง ํ๋ฉด ์ด์ ์๋์ฐ์์๋ ์คํ์ด ๋๊ฒ ๋๋ค.
๐ก crossenv ์ฌ๊ฑด
๋ ธ๋์ npm ์ํ๊ณ๋ฅผ ๋ ๋ค์ฉํ๊ฒ ๋ง๋ ์ฌ๊ฑด์ด ์์๋ค. ์ด๋ฆํ์ฌ โcrossenv ์ฌ๊ฑดโ ์ด๋ค.
์ฌ๋๋ค์ด cross-env๋ฅผ ์ค์นํ ๋ ์ค์๋ก cross-env ๋์ crossenv๋ฅผ ์ค์นํด์ ๋ฐ์ํ๋๋ฐ, crossenv๋ ์ฌ์ฉ์์ .env ํ์ผ์ ๋ค์ด ์๋ ํค๋ค์ ํด์ปค์๊ฒ ์ ์กํ๋ ์ ์ฑ ํจํค์ง์๋ ๊ฒ์ด์๋ค. ๋คํํ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ ์ฆ์ ํจํค์ง๊ฐ ์ฐจ๋จ๋์ด ํผํด๊ฐ ํฌ๊ฒ ํ์ฐ๋์ง๋ ์์์ง๋ง, ์ ๋ช ํ ํจํค์ง๋ฅผ ์ค์นํ๋ ๊ณผ์ ์ ํผ๋์ ์ผ๊ธฐํด ํดํนํ๋ ค๋ ์๋๊ฐ ์์๋ค๋ ์ ์์ ์ถฉ๊ฒฉ์ ์ธ ์ฌ๊ฑด์ด์๋ค. ๋ฐ๋ผ์ ํจํค์ง๋ฅผ ์ค์นํ ๋๋ ํญ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํ๋ค.
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.