ERP-node/backend-node/src/config/environment.ts

140 lines
3.4 KiB
TypeScript

import dotenv from "dotenv";
import path from "path";
// .env 파일 로드
dotenv.config({ path: path.resolve(process.cwd(), ".env") });
interface Config {
// 서버 설정
port: number;
host: string;
nodeEnv: string;
// 데이터베이스 설정
databaseUrl: string;
// JWT 설정
jwt: {
secret: string;
expiresIn: string;
refreshExpiresIn: string;
};
// 보안 설정
bcryptRounds: number;
sessionSecret: string;
// CORS 설정
cors: {
origin: string | string[] | boolean; // 타입을 확장하여 배열과 boolean도 허용
credentials: boolean;
};
// 로깅 설정
logging: {
level: string;
file: string;
};
// API 설정
apiPrefix: string;
apiVersion: string;
// 파일 업로드 설정
maxFileSize: number;
uploadDir: string;
// 이메일 설정
smtpHost: string;
smtpPort: number;
smtpUser: string;
smtpPass: string;
// Redis 설정
redisUrl: string;
// 개발 환경 설정
debug: boolean;
showErrorDetails: boolean;
}
// CORS origin 처리 함수
const getCorsOrigin = (): string[] | boolean => {
// 개발 환경에서는 모든 origin 허용
if (process.env.NODE_ENV === "development") {
return true;
}
// 환경변수가 있으면 쉼표로 구분하여 배열로 변환
if (process.env.CORS_ORIGIN) {
return process.env.CORS_ORIGIN.split(",").map((origin) => origin.trim());
}
// 기본값: 허용할 도메인들
return [
"http://localhost:9771", // 로컬 개발 환경
"http://192.168.0.70:5555", // 내부 네트워크 접근
"http://39.117.244.52:5555", // 외부 네트워크 접근
"https://v1.vexplor.com", // 운영 프론트엔드
"https://api.vexplor.com", // 운영 백엔드
];
};
const config: Config = {
// 서버 설정
port: parseInt(process.env.PORT || "8080", 10),
host: process.env.HOST || "0.0.0.0",
nodeEnv: process.env.NODE_ENV || "development",
// 데이터베이스 설정
databaseUrl:
process.env.DATABASE_URL ||
"postgresql://postgres:postgres@localhost:5432/ilshin",
// JWT 설정
jwt: {
secret: process.env.JWT_SECRET || "ilshin-plm-super-secret-jwt-key-2024",
expiresIn: process.env.JWT_EXPIRES_IN || "24h",
refreshExpiresIn: process.env.JWT_REFRESH_EXPIRES_IN || "7d",
},
// 보안 설정
bcryptRounds: parseInt(process.env.BCRYPT_ROUNDS || "12", 10),
sessionSecret: process.env.SESSION_SECRET || "ilshin-plm-session-secret-2024",
// CORS 설정
cors: {
origin: getCorsOrigin(),
credentials: true, // 쿠키 및 인증 정보 포함 허용
},
// 로깅 설정
logging: {
level: process.env.LOG_LEVEL || "info",
file: process.env.LOG_FILE || "logs/app.log",
},
// API 설정
apiPrefix: process.env.API_PREFIX || "/api",
apiVersion: process.env.API_VERSION || "v1",
// 파일 업로드 설정
maxFileSize: parseInt(process.env.MAX_FILE_SIZE || "10485760", 10),
uploadDir: process.env.UPLOAD_DIR || "uploads",
// 이메일 설정
smtpHost: process.env.SMTP_HOST || "smtp.gmail.com",
smtpPort: parseInt(process.env.SMTP_PORT || "587", 10),
smtpUser: process.env.SMTP_USER || "",
smtpPass: process.env.SMTP_PASS || "",
// Redis 설정
redisUrl: process.env.REDIS_URL || "redis://localhost:6379",
// 개발 환경 설정
debug: process.env.DEBUG === "true",
showErrorDetails: process.env.SHOW_ERROR_DETAILS === "true",
};
export default config;