Files
ttipo a45cb39a57 DB를 MySQL에서 PostgreSQL로 전면 전환
- Sequelize dialect를 postgres로 변경, mysql2 대신 pg/pg-hstore 사용
- docker-compose: postgres:16-alpine + pg_isready healthcheck, 호스트 포트 5442
- 환경변수 MYSQL_PORT -> DB_PORT로 통일, .env.example 갱신

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 14:59:37 +09:00

96 lines
3.1 KiB
JavaScript

const fs = require("fs-extra");
const path = require("path");
const esbuild = require("esbuild");
const { execSync } = require("child_process");
const distDir = path.join(__dirname, "dist");
const origPackagePath = path.join(__dirname, "package.json");
async function build() {
console.log("🚀 빌드 프로세스를 시작합니다...");
// 1. 기존 dist 폴더 초기화
console.log("🧹 dist 폴더를 청소합니다...");
fs.emptyDirSync(distDir);
// 2. esbuild를 사용한 소스 코드 번들링
console.log("📦 esbuild로 소스 코드를 빌드하는 중...");
// 외부로 뺄 의존성 (런타임에 에셋/바이너리가 직접 필요한 것들)
const externalModules = [
"sequelize",
"pg",
"pg-hstore",
"pdfkit",
"swagger-ui-express",
"swagger-jsdoc"
];
try {
await esbuild.build({
entryPoints: [path.join(__dirname, "server.js")],
bundle: true,
platform: "node",
target: "node20",
format: "cjs",
outfile: path.join(distDir, "server.js"),
external: externalModules,
minify: false, // 디버깅 편의를 위해 난독화/압축은 적용 안 함
sourcemap: false,
});
console.log("✅ 소스 코드 빌드 완료 (dist/server.js)");
} catch (err) {
console.error("❌ 빌드 중 오류 발생:", err);
process.exit(1);
}
// 3. 배포용 package.json 작성
console.log("📝 배포용 package.json을 생성합니다...");
const origPackage = fs.readJsonSync(origPackagePath);
const distPackage = {
name: origPackage.name + "-dist",
version: origPackage.version,
main: "server.js",
scripts: {
start: "node server.js"
},
dependencies: {}
};
// 외부 의존성들의 버전을 원본 package.json에서 가져와 등록
externalModules.forEach(mod => {
if (origPackage.dependencies[mod]) {
distPackage.dependencies[mod] = origPackage.dependencies[mod];
} else {
// 혹시 원본에 명시되지 않은 경우 와일드카드로 지정
distPackage.dependencies[mod] = "*";
}
});
fs.writeJsonSync(path.join(distDir, "package.json"), distPackage, { spaces: 2 });
console.log("✅ 배포용 package.json 생성 완료");
// 4. dist 내에서 배포용 node_modules 설치
console.log("🚚 dist 내부에서 배포용 의존성 패키지를 설치합니다 (npm install --omit=dev)...");
// OS별 npm 명령어 분기 (윈도우에서는 npm.cmd 사용)
const npmCmd = process.platform === "win32" ? "npm.cmd" : "npm";
try {
execSync(`${npmCmd} install --omit=dev`, {
cwd: distDir,
stdio: "inherit" // 설치 로그를 현재 프로세스 콘솔에 연동
});
console.log("✅ 배포용 의존성 패키지 설치 완료 (dist/node_modules)");
} catch (err) {
console.error("❌ 의존성 설치 중 오류 발생:", err);
process.exit(1);
}
console.log("\n🎉 모든 빌드 프로세스가 성공적으로 끝났습니다!");
console.log("👉 'dist' 폴더를 파일질라로 업로드하여 사용하시면 됩니다.");
}
build();