fix: DB 연결 재시도 + git 인증 + 볼륨 경로 수정

- db.js: waitForDB() 추가 (최대 10회, 3초 간격 재시도)
- app.js: DB 연결 시 waitForDB 사용
- start-server.sh: git 유저명 @를 %40으로 인코딩
- docker-compose.yml: 볼륨 상대경로로 변경 (./data/)
- 디렉토리 권한 문제 해결

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
chpark
2026-03-27 01:23:32 +09:00
parent 71329d72a9
commit 0a322bafa3
6 changed files with 32 additions and 11 deletions
+2 -2
View File
@@ -75,8 +75,8 @@ app.use('/', publicRouter);
// ===== 시작 =====
async function start() {
try {
// DB 연결 확인
await db.query('SELECT 1');
// DB 연결 대기 (재시도)
await db.waitForDB();
console.log('[DB] PostgreSQL 연결 성공');
// 스케줄러 초기화
+18
View File
@@ -8,13 +8,31 @@ const pool = new Pool({
password: process.env.DB_PASSWORD || '',
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 10000,
});
pool.on('error', (err) => {
console.error('[DB] Unexpected error on idle client', err);
});
/**
* DB 연결 재시도 (최대 10회, 3초 간격)
*/
async function waitForDB(retries = 10, delay = 3000) {
for (let i = 1; i <= retries; i++) {
try {
await pool.query('SELECT 1');
return true;
} catch (err) {
console.log(`[DB] 연결 대기 중... (${i}/${retries}) - ${err.message}`);
if (i === retries) throw new Error('DB 연결 실패: 최대 재시도 횟수 초과');
await new Promise(r => setTimeout(r, delay));
}
}
}
module.exports = {
query: (text, params) => pool.query(text, params),
pool,
waitForDB,
};