Skip to content

Commit 2fc61a5

Browse files
committed
modify: db config update, pool 좀 더 세밀하게 관리
1 parent dbd4335 commit 2fc61a5

File tree

1 file changed

+47
-12
lines changed

1 file changed

+47
-12
lines changed

src/configs/db.config.ts

Lines changed: 47 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ const poolConfig: pg.PoolConfig = {
1616
port: Number(process.env.POSTGRES_PORT),
1717
max: 10, // 최대 연결 수
1818
idleTimeoutMillis: 30000, // 연결 유휴 시간 (30초)
19-
connectionTimeoutMillis: 5000, // 연결 시간 초과 (5초)
19+
connectionTimeoutMillis: 10000, // 연결 시간 초과 (10초)
20+
2021
};
2122

2223
if (process.env.NODE_ENV === 'production') {
@@ -27,15 +28,49 @@ if (process.env.NODE_ENV === 'production') {
2728

2829
const pool = new Pool(poolConfig);
2930

30-
(async () => {
31-
const client = await pool.connect();
32-
try {
33-
await client.query('CREATE EXTENSION IF NOT EXISTS timescaledb;');
34-
logger.info('TimescaleDB 확장 성공');
35-
} catch (error) {
36-
logger.error('TimescaleDB 초기화 실패 : ', error);
37-
} finally {
38-
client.release();
31+
async function initializeDatabase(): Promise<void> {
32+
const maxRetries = 3;
33+
let delay = 800;
34+
35+
for (let attempt = 1; attempt <= maxRetries; attempt++) {
36+
try {
37+
logger.info(`데이터베이스 연결 시도 ${attempt}/${maxRetries}`);
38+
39+
const client = await pool.connect();
40+
41+
try {
42+
// 연결 테스트
43+
await client.query('SELECT 1');
44+
logger.info('데이터베이스 연결 성공');
45+
46+
// TimescaleDB 확장 (필수)
47+
await client.query('CREATE EXTENSION IF NOT EXISTS timescaledb;');
48+
logger.info('TimescaleDB 확장 성공');
49+
50+
return; // 성공
51+
52+
} finally {
53+
client.release();
54+
}
55+
56+
} catch (error) {
57+
logger.error(`데이터베이스 연결 실패 (시도 ${attempt}/${maxRetries}):`, error);
58+
59+
if (attempt === maxRetries) {
60+
logger.error('데이터베이스 연결에 완전히 실패했습니다. 서버를 종료합니다.');
61+
process.exit(1); // 연결 실패시 서버 종료
62+
}
63+
64+
logger.info(`${delay}ms 후 재시도...`);
65+
await new Promise(resolve => setTimeout(resolve, delay));
66+
delay = Math.floor(delay * 1.5);
67+
}
3968
}
40-
})();
41-
export default pool;
69+
}
70+
71+
initializeDatabase().catch(error => {
72+
logger.error('데이터베이스 초기화 중 예상치 못한 오류:', error);
73+
process.exit(1); // 치명적 오류시 서버 종료
74+
});
75+
76+
export default pool;

0 commit comments

Comments
 (0)