logo

Nuxt 프로젝트에서 환경변수 관리하기 (feat. dotenv)

nuxt · 2021년 4월 7일 · 10 min read

안녕하세요.
오늘은 dotenv를 활용하여 Nuxt 프로젝트에서 환경변수를 관리하는 법을 소개해드리고자 합니다.

들어가며

서비스를 배포하실 때 환경별로 포트번호 등이 달라서 소스코드를 직접 수정하셨던 경험이 있으신가요 ?

포트번호와 같이 환경별로 다른 값이나 DB 접속 정보 등 소스코드에 포함되면 안될 중요한 값을
dotenv 패키지를 통해서 환경변수로 관리한다면, 별도의 추가 작업을 할 일이 없으실 겁니다.

설치하기

npm i dotenv

terminal에서 프로젝트 root디렉토리로 이동한 후 위 명령어를 실행합니다.

설정하기

설치가 완료되었다면, nuxt config 파일(nuxt.config.js)에서 작업이 필요합니다.

1. dotenv 패키지와 환경변수 파일 불러오기

const dotenv = require('dotenv')
const envPath = process.env.NODE_ENV === 'production' ? '.env.production' : '.env.development'

dotenv.config({ path: envPath })

라인 2와 같이 NODE_ENV에 따라 env파일 path를 다르게 설정해주면,
production과 development 환경에서 자연스레 알맞는 환경변수가 적용됩니다.

2. env파일을 생성하고 값 지정하기

NAME=안도현의 개발 블로그

SERVER_HOST=localhost
SERVER_PORT=9001

HEADER_TITLE=안도현의 개발 블로그
HEADER_DESCRIPTION=안도현의 개발 블로그입니다.

API_URL=http://localhost:9002

KAKAO_SDK_KEY=AAAA123456789

설정하신 경로상에 위 예시와 같이 env파일을 만들고 저장합니다.
SDK API키와 같이 소스코드에 포함되면 안될 값이 있다면 적극적으로 세팅해주세요.

3. Nuxt Config에서 env 매핑하기

어느 변수를 만들지 정하셨다면, 다시 nuxt config 파일로 돌아와서,
export object 내에 아래와 같이 용도에 따라 활용하고,

프로젝트 서비스 내에서도 필요할 경우 env property에 추가해주세요.

export default {
  server: {
    host: process.env.SERVER_HOST || 'localhost',
    port: process.env.SERVER_PORT || 80,
  },
  env: {
    NAME: process.env.NAME,

    HEADER_TITLE: process.env.HEADER_TITLE,
    HEADER_DESCRIPTION: process.env.HEADER_DESCRIPTION,

    API_URL: process.env.API_URL,

    KAKAO_SDK_KEY: process.env.KAKAO_SDK_KEY,
  },
  head: {
    titleTemplate: '%s - ' + process.env.HEADER_TITLE,
    title: process.env.HEADER_TITLE || '',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: process.env.HEADER_DESCRIPTION || '' },

      { hid: 'og-title', property: 'og:title', content: process.env.HEADER_TITLE },
      { hid: 'og-description', property: 'og:description', content: process.env.HEADER_DESCRIPTION || '' },
    ],
  },
}

4. 서비스에서 env 활용하기

성공적으로 설정을 완료하셨다면, store나 page component 등 서비스 전역에서 환경변수를 활용하실 수 있습니다.

// Store에서 API 함수 관리 시 활용 예
export const actions = {
  getPress(context, payload = {}) {
    const url = `${process.env.API_URL}/press`

    return this.$axios.$get(url, { params: payload.query })
  },
}
관련 포스트
post image
Nuxt 무중단 배포 구현기
올해 1분기 쯔음 회사에서 처음으로 배포한 Nuxt 프로젝트가 있었다. 서비스가 운영 단계로 들어서면서 소스 수정이 매우 잦아졌고, 배포 과정마다 사용자는 정상적으로 서비스를 사용하기 어려운 상황을 마주했다. 원인을 분석한 결과, build 과정 초기에 .nuxt 폴더에 있는 번들파일을 제거하기 때문에 사용자들이 번들파일을 내려받지 못하여 벌어진 현상이었다.
nuxt·2022년 9월 28일·11 min read
post image
nested router의 기본 route 지정해주기
안녕하세요. 오늘은 제가 올해 초 진행했었던 유튜브 뮤직 클론코딩 프로젝트를 리팩토링하면서.  개선이 필요한 코드를 발견하여 수정한 경험을 공유해보고자 합니다. 해당 페이지에서는 nested router를 통해 재생목록, 앨범, 노래, 아티스트, 구독 탭을 보여주고 있습니다. url에 child route를 입력해주지 않은 경우 탭에서 아무것도 보여주지 않아 리다이렉트를 시켜주고자 했었던 것 같습니다. 여기서 문제는 ... mounted 훅에서 검사를 시켜주고 있었네요 ...
nuxt·2021년 6월 13일·5 min read
post image
Fetch API와 Created Hook에서 API 호출 시 차이
안녕하세요. 오늘은 Nuxt의 Fetch API와 라이프사이클의 Created 훅에서 API를 호출 했을 때 각각의 차이점에 대해 알아보겠습니다. SSR 기준으로, Nuxt 2.12 버전 이후 Fetch API는 Vue instance가 create 된 후에 실행 됩니다. 그러면 created 훅에서 실행하는 편이 더 빠른 API Response를 가져오지 않을까 궁금해졌는데요. 이를 따로 비교한 글을 찾지 못해 제가 직접 한번 테스트를 해보았습니다.
nuxt·2021년 6월 8일·4 min read