Skip to content

[BE] 배포환경에서 DB 연결 및 테스트 완료

이승관 edited this page Nov 7, 2024 · 1 revision

.env 파일 넘기기

DB host, DB username 등의 정보를 담고있는 .env파일을 넘기기 위해 git secret에 등록한 정보들을.env파일로 생성했습니다.

echo "${{secrets.DEPLOY_ENV}}" > .env

그리고 생성된 .env 파일을 server 컨테이너에서 사용하기 위해 server의 env_file 설정에 넣어줬습니다.

# docker-compose.yml
services:
  server:
    ...(나머지 설정들)
    env_file:
      - .env
    ports:
      - "3000:3000"
    networks:
      - app-network
    ...(client)
networks:
  app-network:

Typeorm.config.ts 리팩토링

//typeorm.config.

// 변경 전
const env = process.env.NODE_ENV || 'development';
const envFileName = `.env.${env}`;
const envPath = resolve(process.cwd(), envFileName);
config({ path: envPath });

//변경 후
config();

const env = process.env.NODE_ENV || 'development';

이전 코드는 .env 파일을 .env.devlopment, .env.production으로 두개의 파일로 나누어 관리하고, NODE_ENV 환경 변수에 따라 파일을 선택하는 형식을 사용했습니다.

하지만 배포 환경과 로컬 환경에서 동일한 코드를 사용하는데 어려움을 겪고 루트 디렉토리에서 자동으로 불러와 배포환경과 로컬환경에서 동일하게 사용할 수 있었습니다.

export default async function getTypeOrmConfig(): Promise<TypeOrmModuleOptions> {
	if(env === 'development') await setupSshTunnel();
	return {
		type: process.env.DB_TYPE as 'mysql',
		host: process.env.DB_HOST,
		port: Number(process.env.DB_PORT),
		username: process.env.DB_USERNAME,
		password: process.env.DB_PASSWORD,
		database: process.env.DB_DATABASE,
		entities: [__dirname + '/../**/*.entity.{js,ts}'],
		synchronize: Boolean(process.env.DB_SYNCHRONIZE), 
	};
}

모든 매개변수를 매직넘버 없이 변수를 통해서 넣어줬습니다.

이를 통해 코드의 가독성을 향상 시켰고 유연한 환경 설정, 확장성을 향상 시켰습니다.

  • 개발 환경에서는 corinee_dev 데이터베이스를, 배포 환경에서는 corinee 데이터베이스를 사용합니다.
스크린샷 2024-11-07 오후 5 41 02
  • 각각의 환경에서 테스트 후 각각의 데이터베이스에서 user 테이블이 생성된 걸 확인한 모습

echo 스크립트

echo "${{secrets.DEPLOY_ENV}}" > .env

이 명령어를 github action 워크 플로에 추가해서 배포환경에서 사용할 각종 정보를 안전하게 관리하고 있습니다.

git secret에 저장 된 정보를 > .env 를 통해 .env 라는 파일에 덮어쓰면서 저장을 하는 방식입니다.

echo ${ } vs echo “${ }”

변수의 확장공백 처리에 관련된 차이가 있습니다.

  • ${ }
    • 공백을 포함한 값을 제대로 처리하지 않거나, 공백이 있으면 이를 무시합니다.
    • 예를 들어, VAR=" "일 경우, 단순히 공백만 있을 경우 출력되는 값이 없을 수 있습니다.
  • "${ }"
    • 공백을 포함한 변수 값을 정확하게 처리합니다. 변수에 공백이 포함되어 있으면 공백도 그대로 출력됩니다.
    • 예를 들어, VAR=" "일 경우, 한 칸의 공백이 출력됩니다.

💻 개발 일지

💻 공통

💻 FE

💻 BE

🙋‍♂️ 소개

📒 문서

☀️ 데일리 스크럼

🤝🏼 회의록

Clone this wiki locally