-
Notifications
You must be signed in to change notification settings - Fork 1
[BE] 배포환경에서 DB 연결 및 테스트 완료
이승관 edited this page Nov 7, 2024
·
1 revision
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.
// 변경 전
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 데이터베이스를 사용합니다.
- 각각의 환경에서 테스트 후 각각의 데이터베이스에서 user 테이블이 생성된 걸 확인한 모습
echo "${{secrets.DEPLOY_ENV}}" > .env
이 명령어를 github action 워크 플로에 추가해서 배포환경에서 사용할 각종 정보를 안전하게 관리하고 있습니다.
git secret에 저장 된 정보를 > .env
를 통해 .env
라는 파일에 덮어쓰면서 저장을 하는 방식입니다.
변수의 확장과 공백 처리에 관련된 차이가 있습니다.
-
${ }
- 공백을 포함한 값을 제대로 처리하지 않거나, 공백이 있으면 이를 무시합니다.
- 예를 들어,
VAR=" "
일 경우, 단순히 공백만 있을 경우 출력되는 값이 없을 수 있습니다.
-
"${ }"
- 공백을 포함한 변수 값을 정확하게 처리합니다. 변수에 공백이 포함되어 있으면 공백도 그대로 출력됩니다.
- 예를 들어,
VAR=" "
일 경우, 한 칸의 공백이 출력됩니다.
- [FE] TailwindCSS @apply
- [FE] 캐러셀 구현
- [FE] 사이드 바 상태관리 도전기
- [FE] axios interceptor로 로그인 필요한 api 개선하기
- [FE] Tanstack Query API 최적화 도전기
- [FE] Tanstack Query로 구현하는 무한 스크롤 차트 도전기
- [FE] 차트 무한 스크롤링 최적화 도전기
- [FE] 차트 실시간 등락 구현 도전기
- [FE] 검색 구현 및 검색 API 호출 최적화 도전기
- [FE] 고차 컴포넌트를 활용한 인증 접근 제어
- [FE] 코드 스플릿팅으로 최적화 도전기
- [BE] Server 생성
- [BE] CI/CD
- [BE] GitAction 학습 정리
- [BE] ssh터널링으로 db연결
- [BE] 배포환경에서 DB 연결 및 테스트 완료
- [BE] https 적용
- [BE] upbit api 연결 및 SSE api
- [BE] SSE 구현
- [BE] SSE 에러
- [BE] redis 설치 및 연동
- [BE] 트랜잭션 락 구현과 최적화
- [BE] Oauth CORS
- [BE] QueryRunner 사용 시 발생한 문제점과 해결방안
- [BE] Git Action 학습 정리
- [BE] NestJS 학습 정리
- [BE] 로그인 기능 및 리프레시토큰
- [BE] 비회원 체험 기능
- [BE] Nginx 학습 정리
- [BE] Mixed Content와 HTTPS 보안 구현하기
- [BE] 매수/매도 로직 구현 및 개선 과정
- [BE] Queue, Load Balancing, Redis