"치명적 결함은 우회하지 않고 범위를 재정의한다"
"이 사람이 이 프로젝트에서 이 행동을 할 수 있는가"를 판단하는 코드가 전혀 없었습니다. 읽기, 수정, 댓글, 검토요청, 검토승인, AI실행이라는 6가지 행동과 4가지 역할의 조합을 판단할 방법을 처음부터 설계해야 했습니다.
DB 조회 없이 순수하게 판단만 하는 함수와, 실제 DB에서 값을 가져와 판단에 넘기는 Wrapper 함수를 분리하는 2계층 구조로 설계했습니다. 권한 매트릭스처럼 실수가 치명적인 로직은 DB 연결 없이도 촘촘히 테스트할 수 있어야 한다고 판단했기 때문입니다.
그런데 구현 도중 Codex가 심각한 문제를 발견해 보고했습니다. project_members 테이블 조회 자체에 RLS Policy가 없어서, 판단 로직이 항상 빈 결과를 받아 실패하는 구조였습니다. 이걸 그 자리에서 조용히 우회하지 않고, RLS Policy 추가를 이번 작업 범위에 포함시키는 쪽으로 방향을 바꿨습니다. Service Role로 RLS를 우회하는 방법도 있었지만, 프로젝트 문서가 명시적으로 금지한 방식이라 배제했습니다.
이 과정에서 또 다른 허점을 발견했습니다. 멤버가 한 명도 없는 프로젝트에는 Workspace ADMIN조차 들어갈 수 없다는 구조적 문제였습니다. 이건 이번 작업 범위 밖이라 판단해 즉시 고치지 않고 문서(§119)에 남겨두었습니다. 최종적으로 6개 권한 함수가 70개 테스트를 통과하는 것까지 확인했지만, §119 허점은 여전히 미해결 상태로 남아 있습니다. 구현 중 발견한 치명적 결함을 조용히 넘기지 않고 범위를 재정의하는 게, 나중에 더 큰 문제로 돌아오는 걸 막는다는 걸 확인한 작업이었습니다.
"Service Role로 RLS 우회"라는 선택지는 프로젝트 문서가 명시적으로 금지한 안티패턴이라 처음부터 배제했습니다. 순수 함수와 DB 조회를 분리한 이유는, 권한 매트릭스처럼 실수가 치명적인 로직을 DB 없이도 촘촘히 테스트할 수 있어야 한다고 판단했기 때문입니다. Codex가 구현 도중 발견한 RLS 조회 실패 문제를 그 자리에서 조용히 우회하지 않고, 이번 작업 범위를 재정의해 RLS Policy 추가까지 포함시킨 것도 같은 판단입니다.
관련 프로젝트
프로젝트 개요 비즈니스 프로세스 트랜스포메이션(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 스키마 구현 완료