[nest.js] .env 를 이용하여 형상별 설정하기

혼자서 공부하니 어려운 점이 많습니다.

서버 형상에 따라 db주소나 server port 등을 자동으로 적용시키기 위해서 yaml, json 등을 이용하는 블로그들을 따라해 봤는데 뭔가가 잘 안됩니다. 이런 해리퍽터같은...

그냥 제일 심플한 방법이라고 생각되는 구현을 올려 봅니다.

.env 파일 만들기
DB_HOST=db주소
DB_PORT=포트번호
DB_USER=db계정명
DB_PASSWORD=비밀번호
DB_NAME=db명
DB_SYNCHRONIZE=db동기화유무

SERVER_PORT=3000

외부에 공개되면 안될 db 정보와 서버 정보들을 넣습니다.
변수명은 원하는 스타일로 해도 됩니다.
( ex : DATABASE_HOST ... )

.local.env
.dev.env
.live.env

이렇게 n개의 파일을 만들어서 소스코드에서 분기처리로 형상에 맞는 설정파일을 가져오는 방법도 있던데 코드도 늘어나고 파일 여러개 관리하기가 귀찮아서 .env 파일 한개만 사용하는 걸로 했습니다.
( 사실은 자꾸 뭐가 잘 안되서 )

개발서버에 올라간 .env에는 개발서버 내용이 존재하고 운영에 올라간 .env에는 운영서버 내용이 들어가 있습니다.

즉, 개발서버에 운영 정보를 올려 놓으면 참사가 발생합니다( ! )

app.module.ts
TypeOrmModule.forRoot( {
			type : "mysql",
			host : process.env.DB_HOST,
			port : Number( process.env.DB_PORT ),
			username : process.env.DB_USER,
			password : process.env.DB_PASSWORD,
			database : process.env.DB_NAME,
			entities : [__dirname + "/../*.dao.{js,ts}"],
			synchronize : Boolean( process.env.DB_SYNCHRONIZE ),
			autoLoadEntities : true
		} ),

typeorm.config.ts 같은 별개의 파일을 만들어서 forRoot 안에 사용하는 방법도 있는데 굳이 파일 하나를 늘리며 쓸 필요가 없을거 같아서 그냥 바로 app module 에서 process.env. 를 통해 접근합니다.

entities 내용에는 상대경로로 넣어야 합니다. 위 소스코드에서는 __dirname 이 src 폴더가 됩니다. src 폴더 하위의 *.dao.ts 나 *.dao.js 형태의 entity를 모두 orm으로 사용한단 입니다.

간단하지만 .env 파일이 한개만 존재하므로 다른 형상 내용을 넣으면 위험합니다.

반드시 .gitignore 에 .env 를 추가해서 퇴사각을 피하십시오.

Subscribe to X세대 신입사원

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe
774-86-01972 cinnabar.3d@gmail.com