26.7.30(목) 세션 — code-qa P0 잔여 5파트 완료 + 운영배포
논의·대안
앞 세션에서 인계받은 P0 잔여 5파트(pfs 코드 품질 파이프라인)를 번호순으로 진행했다. 각 파트는
착수 전 재검수(발견이 지금도 그 자리에 있나 / 범위가 여전한가 / 앞 파트 수정이 전제를 바꿨나)를
읽기 전용 실측으로 먼저 하고, 수정 → 테스트(8001) 검증 → qa.py 기록 → 리팩토링 에이전트 호출 순으로 돌았다.
파트별로 갈린 판단:
- 배차사진 경로(
field-dispatch) — 운영·테스트uploads/dispatch파일 0개 +dispatch_photo행 0건을 SSM 으로 재확인해 데이터 마이그레이션 불필요를 확정. 같은 리포에 이미 있는field_memo_dao의 리포 루트 상대경로 패턴을 그대로 따랐다(새 헬퍼를 만들지 않음). - 강등 세션 무효화(
platform-auth/PFS-D010) — 무조건touch하면 이름·전화번호만 고쳐도 남의 작업이 끊긴다. 반대로args만 보면 DAO 가 키 누락 시is_super_admin='0'으로 기본세팅해 강등을 놓친다. → 저장 전후 DB 값 비교로 세션 스냅샷 필드(is_super_admin/company_no)가 실제로 바뀐 경우에만 무효화. - 레거시 사용자 API(
PFS-D012) — 쓰기 4종은 권한이 전혀 없어 일반 사용자가 총관리자 비밀번호를 그 사람 user_id 로 초기화할 수 있었다(계정 탈취 경로). 조회 3종은 현장등록 담당자 선택·멤버 팝업이 쓰는 일반 경로라 잠그지 않았다 — 잠그면 회귀. - 견적 위성 저장(
estimate-satellite/PFS-D006) — 트랜잭션 경계를 서비스가 아니라 DAO 에 두는 기존estimate_dao패턴을 따랐다. 두 DAO(기타부가비·별도항목)의 공통화는 Rule of Three 미충족이라 하지 않았다. - 저장형 XSS(
templates-xss-cache/PFS-D035) — 21개 템플릿 컬럼을 각각 고치는 대신 DataTables 컬럼 기본 렌더 한 곳을 바꿨다. 프레임워크가 예외를 이미 정의해 준다는 게 근거 (columns.render가 기본을 덮고,data가 함수인 컬럼은 제외). 새 화면이 다시 무방비가 되는 것도 막힌다. - 커넥션 풀(
platform-core/PFS-D003) — 전 도메인 dao 가 공유하는 계층 교체라 보류(설계 결정). 대신 소멸자가 예외를 던져 진짜 원인 로그를 묻던 것만 국소 수정.
결정
- 5파트 전부 수정·검증 후 운영배포(페페 채팅 승인: "테스트서버 검증 후 이상없으면 운영배포 승인한다").
- 보류 2건은 페페 결정 대기 —
PFS-D003(커넥션 풀 도입) ·PFS-D045(requirements.txt가 운영 인터프리터에서 설치 불가:pyodbc==5.2.0은 3.8+ 인데 운영은 py3.6.9/실제 4.0.26). - 배포는 파일 단위 선별 포워드(28파일). AL 발주서 미배포 커밋은 범위 밖이므로 포함하지 않았다.
산출물·커밋
pfs master: 2d327fb(D005) · 44aef29(D010·D012) · fb49138(D042·D043) · 2200589(D006·D007) ·
9e55f64(D044) · a09743e(D035·D036) · 27f50e9(D004) · 2d5b25c(D046) · ff8f127(검증 스크립트 5종) ·
리팩토링 80caae9(R002) · 4933775/2b61857/9dcf507/efcbb09(R005~R007).
pfs deploy-live: 6698a3c — 운영배포 완료(리팩토링 커밋은 master 까지만, 운영 미반영).
신규 발견 5건(검증 도중 실측으로 드러난 것): PFS-D042 사용자 생성 응답 user_no null ·
PFS-D043 레거시 생성 계정 로그인 불가(remove_yn NULL) · PFS-D044 410 이 실제로는 500 ·
PFS-D045 requirements 설치 불가(보류) · PFS-D046 캐시버스터 잔여(리팩토링 에이전트 발견 → 디버깅 환류).
검증 스크립트(tracked, 재사용): _p0b_dispatch_auth_e2e.py · _p0c_estimate_satellite_e2e.py ·
_p0d_xss_cache_ui_check.py · _p0e_platform_core_check.py · _qa_user_cleanup.py.
문서: tools/code-qa/manual/pfs.md 신규 규칙 7건(커밋 10460d3) · projects/code-qa/rules.md 신규 5건 ·
devplan code-qa.html 단계 카드 갱신 · qa.py finding/part/history 전량 기록.
다음
- 페페 육안(운영): 배차 사진 업로드·조회, 거래처/견적 목록, 견적 저장(기타부가비·별도항목).
- 보류 2건 결정 → 결정 나면 각각 별도 파트로.
- 남은 P0 =
platform-response-policy(fail()HTTP status 도메인별 점진 이관). - P1 파트(마감재 하드delete·마스터데이터 파라미터 밀림 등) 착수.
관계
- 주제 그룹: code-qa
- 관련 문서: session-2026-07-29-p0-security, code-qa handoff, code-qa rules