2025-08-25 17:07:29 +09:00
|
|
|
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: {
|
2025-09-04 16:29:57 +09:00
|
|
|
origin: string | string[] | boolean; // 타입을 확장하여 배열과 boolean도 허용
|
2025-08-25 17:07:29 +09:00
|
|
|
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;
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-04 16:29:57 +09:00
|
|
|
// 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", // 외부 네트워크 접근
|
2025-10-15 13:30:11 +09:00
|
|
|
"https://v1.vexplor.com", // 운영 프론트엔드
|
|
|
|
|
"https://api.vexplor.com", // 운영 백엔드
|
2025-09-04 16:29:57 +09:00
|
|
|
];
|
|
|
|
|
};
|
|
|
|
|
|
2025-08-25 17:07:29 +09:00
|
|
|
const config: Config = {
|
|
|
|
|
// 서버 설정
|
2025-09-26 01:28:51 +09:00
|
|
|
port: parseInt(process.env.PORT || "8080", 10),
|
2025-08-25 17:07:29 +09:00
|
|
|
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: {
|
2025-09-04 16:29:57 +09:00
|
|
|
origin: getCorsOrigin(),
|
|
|
|
|
credentials: true, // 쿠키 및 인증 정보 포함 허용
|
2025-08-25 17:07:29 +09:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 로깅 설정
|
|
|
|
|
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;
|