왜 다양한 환경을 셋팅해야 하나?
로컬에서 구동할 때, 개발 서버에서 구동할 때, 운영 서버에서 구동할 때 통신해야 할 API Base Url 이나 콜백 받아야할 Url 등을 다르게 처리되어야 하는 경우가 종종 발생하곤 한다.

1. Local(로컬 개발 환경)
- 먼저 개발을 하려면, 각자 개발자 PC에 개발 및 테스트 환경이 셋업되어야 한다.
- 각 개발자마다 설치된 서버 환경을 local 환경이라고 한다.
2. dev (서버 개발 환경)
- 개발 환경은 각 개별 개발자들이 만든 코드를 합쳐서 서버 환경에서 테스트 해볼 수 있는 환경이다.
- 소스코드를 형상관리 시스템에 commit 하면, 코드는 이 dev 환경에 자동 배포되고, 이 환경에서 테스트가 된다.
3. Integration (통합 개발 환경)
- 통합 개발 환경은 여러개의 component를 동시 개발하는 프로젝트가 있고, 각 component가 다른 component에 대해서 dependency를 가지고 있을 때, 컴포넌트를 통합 및 테스트하는 환경으로 사용한다
4. QA (테스팅 환경)
- 테스트 환경은 QA 엔지니어 의해서 사용되는 환경으로, short release 주기에 따라서, 개발환경에서 QA 환경으로 배포 되고, 여기서 기능 및 비 기능(Load Test) 등을 QA 엔지니어가 수행한다.
5. staging (스테이징 환경)
- 운영 환경과 거의 동일한 환경을 만들어 놓고, 운영 환경으로 이전하기 전에, 여러 가지 비 기능적인 부분(Security, 성능, 장애 등)을 검증하는 환경이다.
6. production (운영 환경)
Next.Js에서의 env 우선순위
process.env
.env.$(NODE_ENV).local
.env.local (Not checked when NODE_ENV is test.)
.env.$(NODE_ENV)
NODE_ENV = production || development || test.
.env
참고: https://nextjs.org/docs/pages/building-your-application/configuring/environment-variables#environment-variable-load-order
Next.Js에서는 모든 환경에서의 env를 지원하지 않는다!?
- 개발 환경 예시만해도 6가지의 환경이 존재하는데, Next.JS에서는 local, production, development, test 환경을 지원한다.
- 그렇다면 다른 환경들은 어떻게 환경변수를 사용해야할까??
- 내가 이론적으로 배운 방법은
.env-vault를 사용하여 다른 환경에서 사용되는 환경변수를.env에 복사하는 방법을 사용할 수 있는 것으로 배웠다. 그러나 이에 대한 자세한 방법은 아직 모르기 때문에 추후 공부해나가면서 알아가야 한다...