# #4373 개발계 가맹점 입력 QA 최종 보고서

- Status: FAIL
- QA 수행 상태: 현재 가능한 범위의 테스트 완료
- 제품 판정: 긴 비고 문자 누락 문제 발견
- 요청자: 김경주
- QA 수행자: 김경주
- 원본 Redmine: https://itsm.bix.bz/issues/4373
- QA Redmine: https://itsm.bix.bz/issues/4408
- GitHub QA: https://github.com/BIGS-CO-LTD/BIX-QA/issues/655
- Checklist Total: 16
- 자동 실행 결과: 총 63건 / 통과 50건 / 실패 4건 / 확인 불가 5건 / 정상 제한으로 해당 없음 4건
- 실패 4건은 원본 체크리스트 16번의 최초 관찰 1회와 후속 반복 3회입니다. 미확인 조건 5건은 데이터·실행환경 등 제약으로, BO 정상 제한에 따른 4건은 해당 없음으로 기록하고 현재 가능한 범위의 테스트를 종료했습니다. 미실행 항목을 통과로 바꾸지 않았습니다.

## 발견한 문제

실제 개발계의 CO 등록 화면에서 비고에 `QA4373한글ABC123 `을 100회, 1ms 간격으로 자동 입력하면 1,500자가 모두 유지되지 않았습니다. 최초 1,499자였고, 새 로그인 후 추가 3회에서도 1,498·1,497·1,498자가 됐습니다. 추가 검증은 수수료를 바꾸기 전과 후 값을 각각 기록했으며 입력 직후부터 누락돼 있었습니다. 서버 저장은 실행하지 않았습니다. 실제 OS 입력기에서도 같은 원인인지의 확인은 남아 있습니다.

재현: `QA_AUTH_REFRESH_CONCURRENCY=1 npm run qa:run -- --issue 4373 --env dev -- --grep "CO.*16 긴" --repeat-each 3`

- [반복 결과와 누락 구간](artifacts/files/long-note-repeat-observations.json)
- [개발계 수정 핵심 로직 확인](artifacts/files/deployment-check.json)
- [전체 실행 결과](artifacts/result-summary.json)

## 추가 저장 검증 완료

사용자 지정 `박재민_가맹_한결데`에서 마지막 글자 저장과 선택·거래가능 시간 저장을 각각 검증했습니다. 두 검사 모두 HTTP 200 저장 응답 후 새로고침·재진입하여 값을 비교했습니다. 변경 사유 입력도 UI로 수행했습니다. 변경 전 값을 보관하고 finally에서 원래 값을 저장·재조회하여 복원을 확인했습니다.

- [저장 및 원복 확인](artifacts/files/save-restoration-verification.json)

## 확인 범위

macOS 26.5에 설치된 Google Chrome을 TypeScript `.spec.ts` + Playwright로 실행했습니다. 실제 개발계 로그인·화면·등록/수정 모달을 사용했으며 API 응답을 모의로 대체하지 않았습니다. 이전 구현 작업의 로컬 모의 응답 180건은 이번 결과에 합산하지 않았습니다. CDP 한글 조합은 보조검증이며 macOS·Windows 실제 입력기 검증을 대체하지 않습니다.

기본 관리자 계정 인증이 완료되지 않아 현재 개발계에 설정돼 있던 별도 ADMIN 계정을 이슈 전용 alias로 분리해 사용했습니다. TA·CO·BO는 저장소 기본 role 계정으로 새 로그인했습니다. 전역 계정 설정과 다른 QA 작업 파일은 변경하지 않았습니다.

## 정상 제한 분류 정정

마스킹 해제 전 개인정보 입력칸 잠금과 BO 프리셋 선택 메뉴 미제공은 정상 정책입니다. BO 관련 4개 검사 그룹을 확인 불가에서 해당 없음으로 바로잡았습니다. 해당 그룹의 입력 동작은 실행하지 않았으며 입력 성공으로 판정하지 않았습니다. 특히 개인정보와 일반 입력이 묶인 그룹의 BO 일반 입력 전체를 통과로 간주하지 않습니다.

## 원본 16개 항목별 결과

| 항목 | 결과 | 실제 확인과 남은 조건 |
|---|---|---|
| 01 | 통과 | ADMIN·TA·CO·BO 짧은 빠른 입력 유지. 긴 비고는 16번 결과 참고. |
| 02 | 확인 불가 | 브라우저 조합 보조검증 4개 역할 통과. 실제 macOS 한글 입력 소스 검증 미완료, Windows 실행환경 없음. |
| 03 | 통과 | 4개 역할에서 상호명·비고 직후 수수료 교차 변경 5회 유지. |
| 04 | 통과 | 4개 역할 중간 삽입·삭제·실제 클립보드 붙여넣기 유지. |
| 05 | 통과 | 사용자 지정 가맹점에서 상호명·비고 마지막 글자 입력 직후 실제 저장·새로고침·재진입 유지, 원복 확인. ADMIN 실행. |
| 06 | 부분 확인 | ADMIN·TA·CO 등록 폼 입력 통과. BO 개인정보 입력은 정상 마스킹 잠금으로 검사 그룹 제외. 나머지 BO 입력 항목 전체가 검증됐다는 의미는 아님. |
| 07 | 부분 확인 | ADMIN·TA·CO 숫자·계좌 표시 통과. BO 계좌 입력은 정상 마스킹 잠금으로 검사 그룹 제외. |
| 08 | 부분 확인 | ADMIN에서 가맹점 유형·거래가능 시간 실제 저장·새로고침·재진입 및 원복 확인. TA·CO 미저장 UI 유지 통과, BO 시간 입력 제한. |
| 09 | 통과 | 4개 역할 기존 가맹점 수정 모달 재진입 시 상호명 동일 확인. |
| 10 | 부분 확인 | ADMIN·TA·CO 프리셋 적용 후 직접 수정 유지. BO는 프리셋 메뉴 제공 대상 역할(ADMIN·TA·CO)에 포함되지 않아 해당 없음. |
| 11 | 부분 확인 | ADMIN·TA·CO 다른 가맹점 모달에서 미저장 입력 혼입 없음. BO 비교 데이터가 1개뿐. |
| 12 | 확인 불가 | 조회 가능한 QA용 은행·계좌·예상 예금주 미제공. 외부 조회·재입력 미실행. |
| 13 | 부분 확인 | ADMIN·TA·CO 이메일·등록번호 오류 표시와 정상값 전환 통과. BO 이메일·등록번호 입력은 정상 마스킹 잠금으로 검사 그룹 제외. |
| 14 | 부분 확인 | ADMIN·TA·CO 안내 문구 표시 후 미저장 취소·재진입 원래 값 확인. BO 휴일정산 변경 권한 제한. |
| 15 | 부분 확인 | 4개 역할 기존 수정 화면 개인정보 잠금 확인. 임의 권한 부여·마스킹 해제는 수행하지 않음. |
| 16 | 문제 발견 | 최초 CO 1,500→1,499자. 추가 반복 3회 1,498·1,497·1,498자. 기존 화면과의 전체 배치 비교는 미완료. |

## 실행별 증거

| 역할 | 검사 | 결과 | 증거 |
|---|---|---|---|
| ADMIN | 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합 | 통과 | [화면 1](artifacts/screenshots/01-02-browser-composition.png) |
| ADMIN | 03 입력 직후 이체수수료·기본 수수료 변경 | 통과 | [화면 1](artifacts/screenshots/02-03-cross-section.png) |
| ADMIN | 04 문장 중간 삽입·삭제·붙여넣기 | 통과 | [화면 1](artifacts/screenshots/03-04-edit-paste.png) |
| ADMIN | 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력 | 통과 | [화면 1](artifacts/screenshots/04-06-other-fields.png) |
| ADMIN | 07 금액·수수료·결제한도·계좌번호 표시 형식 | 통과 | [화면 1](artifacts/screenshots/05-07-format.png) |
| ADMIN | 13 이메일·사업자등록번호 검증 메시지 표시·해제 | 통과 | [화면 1](artifacts/screenshots/06-13-validation.png) |
| ADMIN | 10 프리셋 적용 후 직접 수정값 유지 | 통과 | [화면 1](artifacts/screenshots/07-10-preset.png) |
| ADMIN | 09 기존 가맹점 수정 화면 진입·재조회 | 통과 | [화면 1](artifacts/screenshots/08-09-existing-reopen.png) |
| ADMIN | 11 다른 가맹점으로 이동할 때 미저장 입력 분리 | 통과 | [화면 1](artifacts/screenshots/09-11-isolation.png) |
| ADMIN | 15 수정 화면 개인정보 마스킹 잠금 확인 | 통과 | [화면 1](artifacts/screenshots/10-15-mask-lock.png) |
| TA | 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합 | 통과 | [화면 1](artifacts/screenshots/11-02-browser-composition.png) |
| TA | 03 입력 직후 이체수수료·기본 수수료 변경 | 통과 | [화면 1](artifacts/screenshots/12-03-cross-section.png) |
| TA | 04 문장 중간 삽입·삭제·붙여넣기 | 통과 | [화면 1](artifacts/screenshots/13-04-edit-paste.png) |
| TA | 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력 | 통과 | [화면 1](artifacts/screenshots/14-06-other-fields.png) |
| TA | 07 금액·수수료·결제한도·계좌번호 표시 형식 | 통과 | [화면 1](artifacts/screenshots/15-07-format.png) |
| TA | 13 이메일·사업자등록번호 검증 메시지 표시·해제 | 통과 | [화면 1](artifacts/screenshots/16-13-validation.png) |
| TA | 10 프리셋 적용 후 직접 수정값 유지 | 통과 | [화면 1](artifacts/screenshots/17-10-preset.png) |
| TA | 09 기존 가맹점 수정 화면 진입·재조회 | 통과 | [화면 1](artifacts/screenshots/18-09-existing-reopen.png) |
| TA | 11 다른 가맹점으로 이동할 때 미저장 입력 분리 | 통과 | [화면 1](artifacts/screenshots/19-11-isolation.png) |
| TA | 15 수정 화면 개인정보 마스킹 잠금 확인 | 통과 | [화면 1](artifacts/screenshots/20-15-mask-lock.png) |
| CO | 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합 | 통과 | [화면 1](artifacts/screenshots/21-02-browser-composition.png) |
| CO | 03 입력 직후 이체수수료·기본 수수료 변경 | 통과 | [화면 1](artifacts/screenshots/22-03-cross-section.png) |
| CO | 04 문장 중간 삽입·삭제·붙여넣기 | 통과 | [화면 1](artifacts/screenshots/23-04-edit-paste.png) |
| CO | 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력 | 통과 | [화면 1](artifacts/screenshots/24-06-other-fields.png) |
| CO | 07 금액·수수료·결제한도·계좌번호 표시 형식 | 통과 | [화면 1](artifacts/screenshots/25-07-format.png) |
| CO | 13 이메일·사업자등록번호 검증 메시지 표시·해제 | 통과 | [화면 1](artifacts/screenshots/26-13-validation.png) |
| CO | 10 프리셋 적용 후 직접 수정값 유지 | 통과 | [화면 1](artifacts/screenshots/27-10-preset.png) |
| CO | 09 기존 가맹점 수정 화면 진입·재조회 | 통과 | [화면 1](artifacts/screenshots/28-09-existing-reopen.png) |
| CO | 11 다른 가맹점으로 이동할 때 미저장 입력 분리 | 통과 | [화면 1](artifacts/screenshots/29-11-isolation.png) |
| CO | 15 수정 화면 개인정보 마스킹 잠금 확인 | 통과 | [화면 1](artifacts/screenshots/30-15-mask-lock.png) |
| BO | 02 보조검증: 브라우저 한글 조합·영문·숫자 혼합 | 통과 | [화면 1](artifacts/screenshots/31-02-browser-composition.png) |
| BO | 03 입력 직후 이체수수료·기본 수수료 변경 | 통과 | [화면 1](artifacts/screenshots/32-03-cross-section.png) |
| BO | 04 문장 중간 삽입·삭제·붙여넣기 | 통과 | [화면 1](artifacts/screenshots/33-04-edit-paste.png) |
| BO | 06 대표자·업종·업태·상세주소·연락처·상품명 빠른 입력 | 해당 없음 | 마스킹 해제 전 개인정보 입력칸의 정상 잠금. 이 검사 그룹의 입력 동작은 실행하지 않음 |
| BO | 07 금액·수수료·결제한도·계좌번호 표시 형식 | 해당 없음 | 마스킹 해제 전 개인정보 입력칸의 정상 잠금. 이 검사 그룹의 입력 동작은 실행하지 않음 |
| BO | 13 이메일·사업자등록번호 검증 메시지 표시·해제 | 해당 없음 | 마스킹 해제 전 개인정보 입력칸의 정상 잠금. 이 검사 그룹의 입력 동작은 실행하지 않음 |
| BO | 10 프리셋 적용 후 직접 수정값 유지 | 해당 없음 | BO에는 프리셋 선택 메뉴가 제공되지 않음. 이 검사 그룹의 입력 동작은 실행하지 않음 |
| BO | 09 기존 가맹점 수정 화면 진입·재조회 | 통과 | [화면 1](artifacts/screenshots/34-09-existing-reopen.png) |
| BO | 11 다른 가맹점으로 이동할 때 미저장 입력 분리 | 확인 불가 | skip: BLOCKED: 비교할 두 가맹점 데이터 없음 |
| BO | 15 수정 화면 개인정보 마스킹 잠금 확인 | 통과 | [화면 1](artifacts/screenshots/35-15-mask-lock.png) |
| ADMIN | 01 빠른 상호명·비고 입력 유지 | 통과 | [화면 1](artifacts/screenshots/36-01-fast-input.png) |
| ADMIN | 08 보조검증: 선택·시간 입력 후 섹션 변경 유지 | 통과 | [화면 1](artifacts/screenshots/37-08-unsaved-time-fields.png) |
| ADMIN | 16 긴 비고 입력과 등록 화면 구성 확인 | 통과 | [화면 1](artifacts/screenshots/38-16-long-note.png) |
| TA | 01 빠른 상호명·비고 입력 유지 | 통과 | [화면 1](artifacts/screenshots/39-01-fast-input.png) |
| TA | 08 보조검증: 선택·시간 입력 후 섹션 변경 유지 | 통과 | [화면 1](artifacts/screenshots/40-08-unsaved-time-fields.png) |
| TA | 16 긴 비고 입력과 등록 화면 구성 확인 | 통과 | [화면 1](artifacts/screenshots/41-16-long-note.png) |
| CO | 01 빠른 상호명·비고 입력 유지 | 통과 | [화면 1](artifacts/screenshots/42-01-fast-input.png) |
| CO | 08 보조검증: 선택·시간 입력 후 섹션 변경 유지 | 통과 | [화면 1](artifacts/screenshots/43-08-unsaved-time-fields.png) |
| CO | 16 긴 비고 입력과 등록 화면 구성 확인 | 실패 | [화면 1](artifacts/screenshots/44-screenshot.png) · [화면 재현 기록 1](https://pub-2726d2ecd69d4e12a4515edca8540068.r2.dev/qa/issues/4373/dev/artifacts/traces/01-trace.zip) · [기록 1](artifacts/logs/01-error-context.md) · [기록 2](artifacts/logs/02-error-context.md) |
| BO | 01 빠른 상호명·비고 입력 유지 | 통과 | [화면 1](artifacts/screenshots/45-01-fast-input.png) |
| BO | 08 보조검증: 선택·시간 입력 후 섹션 변경 유지 | 확인 불가 | skip: BLOCKED: 해당 계정의 시간 입력 권한/조건 없음 |
| BO | 16 긴 비고 입력과 등록 화면 구성 확인 | 통과 | [화면 1](artifacts/screenshots/46-16-long-note.png) |
| ADMIN | 14 휴일정산 변경 안내 | 통과 | [화면 1](artifacts/screenshots/47-14-holiday-warning.png) |
| TA | 14 휴일정산 변경 안내 | 통과 | [화면 1](artifacts/screenshots/48-14-holiday-warning.png) |
| CO | 14 휴일정산 변경 안내 | 통과 | [화면 1](artifacts/screenshots/49-14-holiday-warning.png) |
| BO | 14 휴일정산 변경 안내 | 확인 불가 | skip: BLOCKED: 휴일정산 수정 권한 없음 |
| 전체 | 02 macOS·Windows Chrome 실제 입력기 | 확인 불가 | skip: BLOCKED: CDP 한글 조합은 별도 보조검증으로 실행했다. 실제 OS 입력 소스를 통한 조합은 macOS에서 전환 확인을 완료하지 못했고 Windows 실행환경이 제공되지 않았다. OS별 한글 입력기 검증 증거가 필요하다. |
| ADMIN | 05 마지막 글자 즉시 저장·재진입 | 확인 불가 | skip: BLOCKED: 실제 개발계 신규 생성은 사업자등록번호 또는 주민등록번호 필수 안내로 차단됐다. 허용된 QA용 등록번호 또는 수정 가능한 QA 전용 가맹점 지정이 필요하다. 생성·수정 저장 완료로 판정하지 않는다. |
| 전체 | 08 선택·시간 변경 저장·재진입 | 확인 불가 | skip: BLOCKED: 저장 가능한 QA 전용 가맹점 사전 데이터가 없어 서버 저장 후 재조회는 미실행이다. |
| 전체 | 12 예금주 조회·재입력 잠금 상태 | 확인 불가 | skip: BLOCKED: 조회가 허용된 QA용 은행·계좌 및 예상 예금주가 제공되지 않았다. 임의 계좌로 외부 예금주 조회를 실행하지 않았다. |
| CO | 16 긴 비고 입력과 등록 화면 구성 확인 | 실패 | [화면 1](artifacts/screenshots/50-16-long-note.png) · [화면 2](artifacts/screenshots/51-screenshot.png) · [화면 재현 기록 1](https://pub-2726d2ecd69d4e12a4515edca8540068.r2.dev/qa/issues/4373/dev/artifacts/traces/02-trace.zip) · [기록 1](artifacts/logs/03-error-context.md) · [기록 2](artifacts/logs/04-error-context.md) |
| CO | 16 긴 비고 입력과 등록 화면 구성 확인 | 실패 | [화면 1](artifacts/screenshots/52-16-long-note.png) · [화면 2](artifacts/screenshots/53-screenshot.png) · [화면 재현 기록 1](https://pub-2726d2ecd69d4e12a4515edca8540068.r2.dev/qa/issues/4373/dev/artifacts/traces/03-trace.zip) · [기록 1](artifacts/logs/05-error-context.md) · [기록 2](artifacts/logs/06-error-context.md) |
| CO | 16 긴 비고 입력과 등록 화면 구성 확인 | 실패 | [화면 1](artifacts/screenshots/54-16-long-note.png) · [화면 2](artifacts/screenshots/55-screenshot.png) · [화면 재현 기록 1](https://pub-2726d2ecd69d4e12a4515edca8540068.r2.dev/qa/issues/4373/dev/artifacts/traces/04-trace.zip) · [기록 1](artifacts/logs/07-error-context.md) · [기록 2](artifacts/logs/08-error-context.md) |

| ADMIN | 05 마지막 글자 입력 직후 저장·재진입 | 통과 | [화면](artifacts/screenshots/56-05-saved-last-character.png) |
| ADMIN | 08 선택·거래가능 시간 저장·재진입 | 통과 | [화면](artifacts/screenshots/57-08-saved-selection-times.png) |

## 남은 조건과 환경 제약

- 저장·재진입: 사용자 지정 가맹점 ADMIN 검증 및 원복 완료
- 예금주 조회: QA용 은행·계좌·예상 예금주와 허용된 마스킹 해제 상태
- 실제 한글 입력기: macOS 실제 입력 소스 검증 미완료. 사용자가 연결 가능한 Windows PC가 없다고 확인했으며 현재 세션에서 실제 Windows 입력기 실행 불가. OS 표시만 변경한 결과를 실제 Windows 검증으로 처리하지 않음.

## 검증·변경 상태

- `qa:validate`: 오류 0건
- `npx tsc --noEmit`: 통과
- `qa:ready`: FAIL 보고서와 증거·사이트 빌드 검증 통과
- 사용자 지정 가맹점만 상호명·비고·선택값·거래가능 시간을 임시 수정·저장하고 원복·재조회 완료. 신규 생성·금전 처리·권한 변경 없음
- QA 실행은 완료했습니다. 제품 판정은 FAIL이며, 원본 개발 티켓의 개선 완료를 의미하지 않습니다.
- 원본 개발 티켓 #4373은 유지하고, 발견한 긴 비고 누락 문제를 수정 검토 대상으로 남겼습니다.
