Skip to content

PostgreSQL 호환성 전수검사 기록 ​

검사 범위 ​

PortalConsole, ProcessCenter, DocumentLibrary의 DB provider, Drizzle schema, migration, raw SQL, upsert, write-result 처리, 테스트·빌드 설정을 점검했다.

확인된 상태 ​

저장소PostgreSQL 상태핵심 위험
PortalConsoleMySQL/PostgreSQL provider·schema·migration 분기 존재일부 서버 write 경로에 MySQL 전용 onDuplicateKeyUpdate가 남아 있음
ProcessCenterMySQL/PostgreSQL provider·schema·migration 분기 존재일부 upsert가 MySQL 전용이고, 여러 repository가 affectedRows·insertId를 PostgreSQL 결과에 그대로 의존함
DocumentLibraryMySQL 전용 mysql2, mysqlTable, MySQL migration만 존재PostgreSQL URL을 넣으면 adapter·schema·migration 단계에서 지원되지 않음

이미 수정한 ProcessCenter 범위 ​

server/db-connection.ts에 MySQL affectedRows와 PostgreSQL rowCount를 정규화하는 getAffectedRowCount와 방언별 upsert를 선택하는 dialectUpsert를 추가했다. 삭제·optimistic-lock 판정 경로를 공통 결과 함수로 전환했고, 디렉터리 동기화의 상태·조직·사용자 upsert를 PostgreSQL onConflictDoUpdate와 MySQL onDuplicateKeyUpdate로 분기할 수 있게 변경 중이다.

추가 고위험 후보 ​

PortalConsole에는 server/directory.ts, server/portalApiKeys.ts, server/portalCredentialDelivery.ts, server/portalProvisioning.ts, server/portalRoutes.ts, server/themeSettings.ts, server/uiDelivery.ts, server/userIdentity.ts, server/userProfile.ts, server/encryptionRotationHistory.ts, server/backfillAssets.ts 등에 onDuplicateKeyUpdate가 남아 있다. 이 중 PostgreSQL 운영 DB에서 호출될 수 있는 경로는 방언별 upsert로 교체해야 한다.

ProcessCenter에는 server/repositories/approvalRepository.ts, organizationRepository.ts, terminologyRepository.ts에 PostgreSQL identity 반환을 위한 returning() 보정이 필요하다. PostgreSQL에서는 MySQL의 insertId가 제공되지 않는다.

DocumentLibrary는 단순 문법 보정 대상이 아니라 PostgreSQL driver, PostgreSQL schema, 별도 migration, transaction/result normalization을 추가해야 하는 별도 마이그레이션 작업이다. 현재 상태에서는 MySQL 전용 저장소로 분류하는 것이 안전하다.

검증 주의사항 ​

환경변수 없이 전체 테스트를 실행하면 PortalConsole의 envelope encryption 테스트가 PORTAL_CONSOLE_ENVELOPE_MASTER_KEY 누락으로 실패할 수 있다. ProcessCenter는 기존 UI 계약 테스트와 환경 의존 테스트가 DB 호환성 테스트와 별개로 실패할 수 있으므로 저장소별 결과를 분리해서 기록한다.