"Node position만 바꿔도 CASCADE로 하위 데이터가 통째로 삭제됐다"
다음 작업(Structured Step Editor)을 시작하려는데, Editor가 실제로 저장을 호출할 대상인 saveProcessGraphAction 자체가 프로젝트에 없다는 걸 발견했습니다. 지금까지는 스키마와 순수 검증 함수만 있었을 뿐, Node/Edge를 실제로 DB에 트랜잭션으로 저장하는 코드가 아예 없었습니다. Audit Log와 Impact Detection 관련 테이블도 다른 Epic 소속이라 아직 없어, 전체 스펙을 그대로 구현할 수도 없는 상태였습니다.
Audit Log와 Impact Detection은 명시적으로 제외하고, 핵심 트랜잭션(Optimistic Concurrency, Domain Validation, Node/Edge 원자적 저장)만 구현하기로 스코프를 좁혔습니다. 신규 Node의 임시 id 처리 방식도 결정해야 했는데, RPC 내부 매핑 대신 TypeScript에서 미리 UUID를 확정하는 방식으로 구현됐습니다.
리뷰 과정에서 가장 중대한 문제를 발견했습니다. 최초 구현이 매번 process_nodes를 delete하고 다시 insert하는 방식이었는데, 여기에 CASCADE로 연결된 하위 테이블들(이전 여러 작업에서 만든 Input/Output, Business Rule, Exception 등)이, Node의 position만 바꿔서 저장해도 통째로 삭제되는 심각한 데이터 유실 버그였습니다. 이걸 UPSERT 방식으로 재설계해 기존 Node는 UPDATE만 되고 CASCADE가 발생하지 않도록 고쳤습니다. Codex는 여기에 더해, 다른 process의 Node id를 payload에 몰래 넣어 권한을 가로채는 걸 막는 경계 검증까지 자발적으로 추가했습니다.
이 수정이 실제로 문제를 해결했는지는 mock으로는 확인할 수 없는 종류였습니다. 실제 DB에 Workspace와 User를 만들어, Node에 business_rules를 붙이고 position만 바꿔 저장한 뒤 그 데이터가 살아있는지 확인하는 살아있는 통합 테스트를 붙였습니다. 262개 테스트가 통과하는 걸 확인했고, 이 버그를 UI가 만들어지기 전, 백엔드 선행 작업 단계에서 발견한 게 이번 작업에서 가장 중요한 성과였습니다.
CASCADE로 인한 데이터 유실은 mock 테스트로는 절대 못 잡는 종류의 버그라서, 실제 DB에 실제 데이터를 만들어서 확인하는 방식이 아니면 검증할 수 없었습니다. 이 버그가 UI까지 만들어진 뒤에 발견됐다면 재작업 범위가 훨씬 컸을 것이므로, 백엔드 선행 작업 단계에서 미리 발견한 게 이 작업 전체에서 가장 중요한 부분이었습니다.
관련 프로젝트
프로젝트 개요 비즈니스 프로세스 트랜스포메이션(BPR)을 지원하는 한국어 기반 웹 애플리케이션. 컨설팅 프로젝트의 AS-IS 프로세스 분석부터 TO-BE 설계, Blueprint 승인까지의 전체 워크플로우를 디지털화하는 플랫폼으로, EPIC 단위로 구조화된 백로그를 기반으로 개발 중. 역할 및 워크플로우 PM / Architect / Reviewer 역할 수행 Codex(구현 담당)에게 Task 단위 구현 프롬프트 설계 Codex 구현 결과를 git log, git grep, git status로 직접 검증 후 승인 승인 전에는 Codex가 commit하지 않는 엄격한 게이팅 프로세스 운영 한 번에 하나의 Backlog Task만 진행, Task 완료 전 다음 Task 착수 금지 기술적 의사결정 및 성과 워크스페이스/프로젝트 접근 권한을 DB 레벨(복합 FK, SECURITY DEFINER 트리거)과 애플리케이션 레벨(Server Action 권한 검증)의 이중 방어 구조로 설계 Hard Delete 미구현 원칙 하에 배열 필드 전체교체(replace)를 단일 트랜잭션 RPC로 처리하는 패턴 확립 및 재사용 AS-IS 프로세스 그래프의 순환 참조 탐지에 Tarjan SCC 알고리즘 적용, 차단 오류(Error)와 경고(Warning)를 분리한 이중 Validator 아키텍처 설계 도메인 규칙 위반을 커스텀 Postgres 에러 코드 체계(SIA0104)로 문서화하여 거버넌스 문서와 코드베이스 간 정합성 유지 AI 생성 데이터와 사람이 검증한 데이터를 구분하는 generatedbyai / verified 메타데이터 패턴을 여러 도메인 테이블에 일관되게 적용 진행 상태 ✅ EPIC-01 (인증 / 워크스페이스 / 프로젝트 접근) ✅ EPIC-02 (조직 / 산업 / 프로젝트) 🚧 EPIC-03 (AS-IS 프로세스 그래프) — 그래프 검증, Input/Output 스키마, Business Rule 스키마 구현 완료