@@ -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
2223if ( process . env . NODE_ENV === 'production' ) {
@@ -27,15 +28,49 @@ if (process.env.NODE_ENV === 'production') {
2728
2829const 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