fix(테이블관리): 블로커 5건 일괄 (PR-A) #28

Merged
johngreen merged 1 commits from johngreen into main 2026-05-22 05:44:32 +00:00
Contributor

종합 감사로 발견된 5건의 블로커:

  1. AddColumnModal/CreateTableModal prop 미스매치 — 컬럼 추가 기능 실제 작동 안 함
  2. IS_NULLABLE 강제 'Y' 덮어쓰기 — NN 토글이 저장 버튼으로 풀려버림 (백엔드 mapper)
  3. 저장 안 한 편집 침묵 손실 — dirty check + confirm 다이얼로그
  4. PK/NN/IDX/UQ 위치별 비대칭 저장 — 그리드 칩과 상세 패널 토글 동작 일치
  5. SUPER_ADMIN role 검증 누락 — company_code + role 이중 체크 (백엔드 보안)

Test plan

  • 컬럼 추가 모달 → 정상 동작 (이전 404 였음)
  • 컬럼 NN 켜고 "컬럼 설정 저장" → NN 유지
  • 우측 패널 편집 후 다른 테이블 클릭 → 확인 다이얼로그
  • 우측 패널 "필수 입력" 토글 → 즉시 저장 (저장 버튼 필요 없음)
  • role 없는 토큰으로 DDL 호출 → 403
종합 감사로 발견된 5건의 블로커: 1. **AddColumnModal/CreateTableModal prop 미스매치** — 컬럼 추가 기능 실제 작동 안 함 2. **IS_NULLABLE 강제 'Y' 덮어쓰기** — NN 토글이 저장 버튼으로 풀려버림 (백엔드 mapper) 3. **저장 안 한 편집 침묵 손실** — dirty check + confirm 다이얼로그 4. **PK/NN/IDX/UQ 위치별 비대칭 저장** — 그리드 칩과 상세 패널 토글 동작 일치 5. **SUPER_ADMIN role 검증 누락** — company_code + role 이중 체크 (백엔드 보안) ## Test plan - [ ] 컬럼 추가 모달 → 정상 동작 (이전 404 였음) - [ ] 컬럼 NN 켜고 "컬럼 설정 저장" → NN 유지 - [ ] 우측 패널 편집 후 다른 테이블 클릭 → 확인 다이얼로그 - [ ] 우측 패널 "필수 입력" 토글 → 즉시 저장 (저장 버튼 필요 없음) - [ ] role 없는 토큰으로 DDL 호출 → 403
johngreen added 1 commit 2026-05-22 05:44:31 +00:00
종합 감사 결과 발견된 블로커 5건:

1. AddColumnModal / CreateTableModal prop 미스매치 — 호출부 tableName/sourceTableName(camelCase)
   vs 인터페이스 table_name/source_table_name(snake_case). 결과적으로 컬럼 추가 기능이 실제로
   동작하지 않았음 (/api/ddl/tables/undefined/columns). 호출부를 인터페이스에 맞춰 통일.

2. IS_NULLABLE 강제 'Y' 덮어쓰기 (backend mapper) — upsertColumnSettings 의 VALUES 절이
   모든 케이스에서 'Y' 리터럴을 박음. NN 토글 후 "컬럼 설정 저장" 누르면 필수 입력 제약이
   조용히 사라짐. COALESCE(#{is_nullable}, 'Y') 로 변경 + ON CONFLICT 절에 IS_NULLABLE
   COALESCE 추가. Service 도 settings 에서 is_nullable 을 읽어 'Y'/'N' 으로 정규화 후 전달.

3. 저장 안 한 편집 침묵 손실 — 우측 패널에서 편집 후 저장 안 누르고 다른 테이블로 이동 시
   변경 사항 소실. hasUnsavedChanges memo 추가 (columns vs originalColumns JSON 비교).
   handleTableSelect 에서 dirty 면 confirm 다이얼로그.

4. PK / NN / IDX / UQ 위치별 비대칭 저장 — 그리드 행 칩은 즉시 저장하는데 우측 상세 패널
   토글은 메모리만 변경하고 저장 버튼 필요. 두 위치 모두 즉시 저장으로 통일 (상세 패널의
   onColumnChange 가 is_nullable / is_unique 필드를 받으면 handleNullableToggle /
   handleUniqueToggle 호출하도록).

5. SUPER_ADMIN role 검증 누락 (backend 보안) — DdlController 의 isSuperAdmin 이 company_code
   == "*" 만 보고 role 클레임 무시. 토큰 변조 또는 "*" 회사 소속만으로 운영 DB DROP / ALTER
   가능. company_code "*" AND role "SUPER_ADMIN" 둘 다 충족 시에만 통과로 변경. 11개 엔드포인트
   에 @RequestAttribute("role") 추가.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
johngreen merged commit 24106929fa into main 2026-05-22 05:44:32 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gbpark/invyone#28