"회귀라 부를 대상 자체가 존재하지 않았다"
새 Epic의 첫 작업으로 business_roles 테이블을 설계하려는데, 참고할 기존 구현이 없었습니다. 지금까지는 Industry나 Organization처럼 Workspace 전체가 읽을 수 있는 데이터만 있었고, "특정 Project에 속한 데이터"를 위한 RLS 패턴 자체가 코드베이스에 존재하지 않았습니다.
처음 등장하는 패턴이라 코드부터 짜지 않고, SELECT는 Project 접근 가능자만, INSERT/UPDATE는 OWNER/EDITOR만, DELETE 정책은 아예 없음(Hard Delete 차단)이라는 설계 방향을 먼저 말로 정리해 확인받았습니다. 이후 is_workspace_member, has_project_access, has_project_role 세 헬퍼 함수와 테이블 구현을 요청했습니다.
구현 과정에서 Codex가 권한 판정 코드에 워크스페이스 멤버 상태(status='ACTIVE') 체크를 추가로 넣은 걸 발견했는데, 이게 기존 로직에 영향을 주는지가 쟁점이 됐습니다. 실제 프로덕션 계정 3개의 상태를 직접 확인했고, 기존 mock 테스트들이 이 함수를 아예 호출하지 않는 구조라는 것도 확인했습니다. 그래서 "회귀"라고 부를 대상 자체가 존재하지 않는다는 결론에 이르렀습니다.
이 세 헬퍼 함수는 이후 최소 5개 테이블이 재사용하는 공용 기반이 됐습니다. 다만 이 시점에서 확인한 건 기존 테스트에 영향이 없다는 것이었고, 새로 추가된 status 체크가 실제 운영 시나리오에서 의도대로 동작하는지는 이후 작업들에서 누적적으로 검증해야 할 부분이었습니다.
문서에 없는 Business Rule을 임의로 추가하지 않는다는 원칙에 따라, 처음 등장하는 패턴이라 판단 기준(SELECT 범위, DELETE 여부)을 코드부터 짜지 않고 먼저 언어로 정리해 확인받았습니다. RLS 헬퍼처럼 이후 여러 작업이 재사용할 기반 코드는 첫 도입 시점에 설계 오류가 있으면 파급 범위가 크기 때문에, 이번에는 특히 신중하게 접근했습니다.
관련 프로젝트
프로젝트 개요 비즈니스 프로세스 트랜스포메이션(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 스키마 구현 완료