# ์ตœ์‹  ๋ทฐ CLI์˜ ๋นŒ๋“œ ํ™˜๊ฒฝ ๊ทœ์น™

์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ๋Š” ๋ทฐ CLI ๋ฒ„์ „ 3 ์ด์ƒ์—์„œ๋งŒ ์ ์šฉ๋˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋นŒ๋“œ ํ™˜๊ฒฝ ๊ทœ์น™์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“œ

๋ทฐ CLI 3์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  • development : ํ”„๋กœํ† ํƒ€์ดํ•‘ ๋ฐ ๊ฐœ๋ฐœ ์šฉ๋„. npm run serve ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•  ๋•Œ์˜ ๋ชจ๋“œ
  • production : ์ƒ์šฉํ™” ๋ฐ ๋ฐฐํฌ ์šฉ๋„. npm run build ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•  ๋•Œ์˜ ๋ชจ๋“œ
  • test : ํ…Œ์ŠคํŠธ ์šฉ๋„. npm run test:unit ๋ช…๋ น์–ด๋กœ ์‹คํ–‰ํ•  ๋•Œ์˜ ๋ชจ๋“œ

์œ„์˜ ๋ชจ๋“œ๋Š” NODE_ENV ๋ณ€์ˆ˜ ๊ฐ’๊ณผ๋„ ์—ฐ๊ด€์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ž๋™์œผ๋กœ NODE_ENV ๊ฐ’์ด development๋กœ ์„ค์ •์ด ๋˜๊ณ , ๋ฐฐํฌ ๋ชจ๋“œ๋กœ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ์—๋Š” production์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

# ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“œ์— ๋”ฐ๋ผ ๋ทฐ CLI๊ฐ€ ํ•ด์ฃผ๋Š” ์ผ?

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

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ๊ทœ์น™

๋ทฐ CLI 3์—์„œ๋Š” ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ํด๋”์— ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.env                # ๋ชจ๋“  ๋ชจ๋“œ์— ์ ์šฉ๋˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ
.env.local          # ๋ชจ๋“  ๋ชจ๋“œ์— ์ ์šฉ๋˜๋‚˜ ๊ฐœ์ธ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ(git์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์Œ)
.env.[mode]         # ํŠน์ • ๋ชจ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ
.env.[mode].local   # ํŠน์ • ๋ชจ๋“œ์— ํ•ด๋‹นํ•˜์ง€๋งŒ ๊ฐœ์ธ์ด ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ(git์— ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š์Œ)

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ชจ๋“œ๋Š” ์•ž์—์„œ ์‚ดํŽด๋ดค๋˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ชจ๋“œ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ƒ์šฉ ๋ฒ„์ „์— ํ•ด๋‹นํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

.env.production

# ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ ์ ์šฉ ์ˆœ์„œ

์•„๋ž˜์™€ ๊ฐ™์ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ธ์ง€ ๋ฐฐํฌ ํ™˜๊ฒฝ์ธ์ง€์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • .env
  • .env.development
  • .env.production
# .env
VUE_APP_URL=https://domain.com
# .env.development
VUE_APP_URL=https://localhost:8080
# .env.production
VUE_APP_URL=https://123.123.123.123:9090

์ด๋•Œ ๋ฐฐํฌ ๋ชจ๋“œ์ธ npm run build ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด .env.production ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•œ VUE_APP_URL ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

// main.js
console.log(VUE_APP_URL) // https://123.123.123.123:9090

์œ„์ฒ˜๋Ÿผ ํŠน์ • ๋ชจ๋“œ์— ํ•ด๋‹นํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์˜ ํŒŒ์ผ์˜ ๊ฐ’์ด ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

TIP

๋งŒ์•ฝ .env.development, .env.production ๋“ฑ์˜ ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด .env ํŒŒ์ผ์— ์„ค์ •ํ•œ ๊ฐ’์ด ์ตœ์ข… ๊ฐ’์ด ๋ฉ๋‹ˆ๋‹ค.

# ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉ

์•ž์˜ ๊ทœ์น™๋“ค์„ ์ธ์ง€ํ•œ ์ƒํƒœ์—์„œ ํŒ€ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ด์™ธ์— ๊ฐœ์ธ์ ์œผ๋กœ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

.env.development # ํŒ€ ๊ณต์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜
.env.development.local # ๊ฐœ์ธ ๋””๋ฒ„๊น… ๋˜๋Š” ๊ฐœ๋ฐœ์šฉ ํ™˜๊ฒฝ ๋ณ€์ˆ˜

ํŒ€ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • ๊ฐ’๋“ค์€ .env.development ํŒŒ์ผ์— ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐœ์ธ์ ์œผ๋กœ ๋กœ์ปฌ ๋˜๋Š” ํŠน์ • ์„œ๋ฒ„ ๋””๋ฒ„๊น…์„ ์œ„ํ•ด .env.development.local ํŒŒ์ผ์— ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

# .env.development
VUE_APP_URL=http://internal.server.address:8080
# .env.development.local
VUE_APP_URL=http://localhost:8081

์œ„์™€ ๊ฐ™์ด ํ™œ์šฉํ•˜๋Š” ๊ฒฝ์šฐ .local ํŒŒ์ผ์€ git์—๋„ ์˜ฌ๋ผ๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํŽธํ•˜๊ฒŒ API ์—”๋“œํฌ์ธํŠธ(URL)๋ฅผ ๋ฐ”๊ฟ”์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.