- Next.js 15 (App Router, TypeScript, Tailwind), pg 커넥션 풀 - /api/health DB 헬스체크, standalone Dockerfile - Gitea Actions: 빌드 → 컨테이너 교체 → Traefik(jskim.vexplor.com) 라우팅 - 로컬 개발용 SSH DB 터널 스크립트 (scripts/db-tunnel.sh) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
24 라인
578 B
TypeScript
24 라인
578 B
TypeScript
import { Pool } from "pg";
|
|
|
|
// Next.js 개발 모드의 핫 리로드에서 Pool이 중복 생성되지 않도록 전역에 보관
|
|
const globalForDb = globalThis as unknown as { pgPool?: Pool };
|
|
|
|
export const db =
|
|
globalForDb.pgPool ??
|
|
new Pool({
|
|
connectionString: process.env.DATABASE_URL,
|
|
max: 10,
|
|
});
|
|
|
|
if (process.env.NODE_ENV !== "production") {
|
|
globalForDb.pgPool = db;
|
|
}
|
|
|
|
export async function query<T extends Record<string, unknown>>(
|
|
text: string,
|
|
params?: unknown[],
|
|
) {
|
|
const result = await db.query(text, params);
|
|
return result.rows as T[];
|
|
}
|