# QA Report - Redmine #4071 (dev)

- Generated: 2026-09-11T09:37:58+09:00
- Redmine: https://itsm.bix.bz/issues/4071
- QA Redmine: not created
- Subject: [BL] IP 차단 관리 BAN로그 사용자 ID 마스킹 해제 조회 기능 요청의 건
- Workflow Status: 진행 중
- Status: PASS
- Result JSON: artifacts/result-summary.json
- Roles: ADMIN -> TA
- Route Candidates: not recorded

## Scope

개발계 비스킷링크 전산 IP 차단 관리 > BAN 로그에서 당월 데이터 및 2026-04-01~2026-09-11 확장 조회 기준 ADMIN(NONE)과 TA(EMAIL)의 사용자 ID 마스킹/원문 조회 정책, 인증 전후 상태 유지·폐기·재요청·만료 동작 검증

## Checklist

1. 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인
2. 2. 인증 전 검색, 새로고침, 페이지 이동 후에도 마스킹이 유지되는지 확인
3. 3. ADMIN(NONE)에서 사용자 ID 원문 조회 클릭 시 이메일 인증창 없이 즉시 원문 표시 및 버튼 전환 확인
4. 4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 상태 유지 확인
5. 5. ADMIN 수동 마스킹 후 새로고침/검색 시 재노출되지 않고 재요청 때만 즉시 원문 전환 확인
6. 6. TA(EMAIL) 원문 조회 요청 시 이메일 인증창, 마스킹된 수신 이메일, 인증번호 유효시간 표시 확인
7. 7. TA 인증창 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출 확인
8. 8. TA 정상 이메일 인증번호 입력 후 성공 안내, 원문 표시, 버튼 전환 확인
9. 9. TA 원문 상태에서 검색/페이지 이동 시 유효시간 동안 원문 유지 확인
10. 10. TA 수동 마스킹 시 즉시 재마스킹, 서버 인증 세션 폐기, 재요청 시 새 이메일 인증 필요 확인
11. 11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작 확인
12. 12. 인증 세션 만료 후 자동 마스킹 전환 및 안내 확인
13. 13. ADMIN과 TA 정책이 뒤바뀌지 않는지 확인

## Setup Steps

1. [required] 현재 사용자 원문 조회 정책과 동일 테넌트 확인 (admin/ADMIN / targets: TA / kind: state-verify) - 정책은 변경하지 않고 ADMIN NONE, TA EMAIL 설정과 두 계정의 동일 테넌트 범위를 실제 화면 흐름으로 검증한다.
2. [required] 당월 사용자 ID 포함 BAN 로그 데이터 확인 (admin/ADMIN / targets: TA / kind: state-verify) - 당월 조회 결과에서 마스킹/원문을 비교할 수 있는 로그인ID 데이터가 존재하는지 확인한다.

## Source Text

#4071 개발계 QA 요청. 대상은 비스킷링크 전산 IP 차단 관리 > BAN 로그이며 ADMIN과 TA만 검증한다. ADMIN 정책은 NONE, TA 테넌트 정책은 EMAIL이다. 현재 정책을 변경하지 않는다. 계정/비밀번호/로그인 2차 인증번호/이메일 인증번호는 로컬 secret으로만 사용하며 산출물에 기록하지 않는다. BAN 로그 SMS 인증 및 ADMIN SMS 전화번호 검증은 제외한다.

## Execution Summary

- Passed: 11
- Failed: 0
- Skipped: 0
- Blocked: 0
- Flaky: 0
- Duration: 707578ms


## 한눈에 보는 결과

| 확인한 항목 | 계정 | 화면 | 수행한 동작 | 결과 | 증거 자료 |
|---|---|---|---|---|---|
| 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/01-initial-masked-screenshot.png)<br>[스크린샷 2](artifacts/screenshots/02-initial-masked-screenshot.png)<br>[실행 기록 1](artifacts/logs/01-initial-masked.md)<br>[실행 기록 2](artifacts/logs/02-initial-masked.md) |
| 2. 인증 전 검색, 새로고침, 페이지 이동 후에도 마스킹이 유지되는지 확인 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | ADMIN·TA에서 2026-04-01~2026-09-11로 조회한 뒤 검색, 무한 스크롤 page=1 적재, 새로고침을 확인 | ADMIN과 TA 모두 page=1 추가 적재가 발생했고 전 과정에서 사용자 ID 마스킹이 유지되었습니다. | [실행 기록 1](artifacts/logs/03-masked-search-refresh-page.md) |
| 3. ADMIN(NONE) 원문 조회는 인증창 없이 즉시 원문 표시 및 버튼 전환 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/05-none-immediate-original-screenshot.png)<br>[실행 기록 1](artifacts/logs/04-none-immediate-original.md) |
| 4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 유지 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | ADMIN 원문 전환 후 2026-04-01~2026-09-11로 검색하고 무한 스크롤 page=1 적재를 확인 | 검색 후와 page=1 추가 적재 후 모두 사용자 ID 원문 상태가 유지되었습니다. | [스크린샷 1](artifacts/screenshots/06-original-after-search-screenshot.png)<br>[실행 기록 1](artifacts/logs/05-original-search-page.md) |
| 5. ADMIN 수동 마스킹 후 재노출 방지 및 재요청 시에만 원문 전환 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/07-manual-remask-reopen-screenshot.png)<br>[실행 기록 1](artifacts/logs/06-manual-remask.md) |
| 6. TA(EMAIL) 원문 조회 시 인증창, 마스킹 이메일, 유효시간 표시 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/08-email-auth-dialog-screenshot.png)<br>[실행 기록 1](artifacts/logs/07-email-auth-dialog.md) |
| 7. TA 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/09-email-auth-invalid-screenshot.png)<br>[실행 기록 1](artifacts/logs/08-email-auth-validation.md) |
| 8-10. TA 정상 이메일 인증 후 원문 유지 및 수동 마스킹 세션 폐기 | TA | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 이메일 인증 성공 후 원문 표시·검색 유지·수동 마스킹 서버 세션 폐기를 확인 | 수정 후 정상 인증, 검색 후 원문 유지, DELETE HTTP 200, 즉시 재마스킹을 확인했습니다. | [실행 기록](artifacts/logs/11-ta-auth-success-remask.md) |
| 11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/10-email-auth-restart-screenshot.png)<br>[실행 기록 1](artifacts/logs/09-email-auth-restart.md) |
| 12. 인증 세션 만료 후 자동 마스킹 전환 및 안내 확인 | TA | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 2026-04-01~2026-09-11 범위의 BAN 로그 1,305건을 조회하고 이메일 인증 후 실제 10분 동안 자동 재마스킹을 감시 | 인증 직후 원문이 표시되었고 약 603초 후 자동 재마스킹, 원문 조회 버튼 복구, 만료 안내를 확인했습니다. | [실행 기록](artifacts/logs/12-ta-expiry-retest.md) |
| 13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인 | 전체 | [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 | 전체 계정으로 [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 항목을 확인 | 기대한 동작과 일치했습니다. | [스크린샷 1](artifacts/screenshots/11-policy-not-swapped-screenshot.png)<br>[스크린샷 2](artifacts/screenshots/12-policy-not-swapped-screenshot.png)<br>[실행 기록 1](artifacts/logs/10-policy-not-swapped.md) |

## 실패 또는 확인 불가 상세

없음.

## 수동 재현 필요

없음.

## 스크린샷

- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인: [스크린샷 1](artifacts/screenshots/01-initial-masked-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인: [스크린샷 2](artifacts/screenshots/02-initial-masked-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 3. ADMIN(NONE) 원문 조회는 인증창 없이 즉시 원문 표시 및 버튼 전환: [스크린샷 1](artifacts/screenshots/05-none-immediate-original-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 유지: [스크린샷 1](artifacts/screenshots/06-original-after-search-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 5. ADMIN 수동 마스킹 후 재노출 방지 및 재요청 시에만 원문 전환: [스크린샷 1](artifacts/screenshots/07-manual-remask-reopen-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 6. TA(EMAIL) 원문 조회 시 인증창, 마스킹 이메일, 유효시간 표시: [스크린샷 1](artifacts/screenshots/08-email-auth-dialog-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 7. TA 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출: [스크린샷 1](artifacts/screenshots/09-email-auth-invalid-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작: [스크린샷 1](artifacts/screenshots/10-email-auth-restart-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인: [스크린샷 1](artifacts/screenshots/11-policy-not-swapped-screenshot.png)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인: [스크린샷 2](artifacts/screenshots/12-policy-not-swapped-screenshot.png)

## 화면 재현 기록

- 화면 재현 기록은 기본적으로 실패/확인불가 항목에 한해 포함합니다. PASS 항목 trace까지 필요하면 `QA_PUBLISH_TRACE=1 npm run qa:report -- --issue <id> --env <env>`로 내부 제출용 산출물을 생성합니다.

## 실행 기록

- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인: [실행 기록 1](artifacts/logs/01-initial-masked.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인: [실행 기록 2](artifacts/logs/02-initial-masked.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 2. 인증 전 검색, 새로고침, 페이지 이동 후에도 마스킹이 유지되는지 확인: [실행 기록 1](artifacts/logs/03-masked-search-refresh-page.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 3. ADMIN(NONE) 원문 조회는 인증창 없이 즉시 원문 표시 및 버튼 전환: [실행 기록 1](artifacts/logs/04-none-immediate-original.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 유지: [실행 기록 1](artifacts/logs/05-original-search-page.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 5. ADMIN 수동 마스킹 후 재노출 방지 및 재요청 시에만 원문 전환: [실행 기록 1](artifacts/logs/06-manual-remask.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 6. TA(EMAIL) 원문 조회 시 인증창, 마스킹 이메일, 유효시간 표시: [실행 기록 1](artifacts/logs/07-email-auth-dialog.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 7. TA 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출: [실행 기록 1](artifacts/logs/08-email-auth-validation.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작: [실행 기록 1](artifacts/logs/09-email-auth-restart.md)
- 전체 / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인: [실행 기록 1](artifacts/logs/10-policy-not-swapped.md)
- TA / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 8-10. 정상 인증 후 수동 마스킹 서버 세션 폐기: [실행 기록](artifacts/logs/11-ta-auth-success-remask.md)
- TA / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 12. 인증 세션 만료 후 자동 마스킹 전환: [실행 기록](artifacts/logs/12-ta-expiry-retest.md)

## 자동화 원본 결과

| Scenario | Status | Duration | Screenshot | 화면 재현 기록 | Log | Error |
|---|---:|---:|---|---|---|---|
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 1. ADMIN과 TA 모두 BAN 로그 최초 조회 시 사용자 ID가 마스킹되는지 확인 | PASS | 8084ms | [스크린샷 1](artifacts/screenshots/01-initial-masked-screenshot.png)<br>[스크린샷 2](artifacts/screenshots/02-initial-masked-screenshot.png) |  | [로그 1](artifacts/logs/01-initial-masked.md)<br>[로그 2](artifacts/logs/02-initial-masked.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 2. 인증 전 검색, 새로고침, 페이지 이동 후에도 마스킹이 유지되는지 확인 | PASS | 37231ms |  |  | [로그 1](artifacts/logs/03-masked-search-refresh-page.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 3. ADMIN(NONE) 원문 조회는 인증창 없이 즉시 원문 표시 및 버튼 전환 | PASS | 4196ms | [스크린샷 1](artifacts/screenshots/05-none-immediate-original-screenshot.png) |  | [로그 1](artifacts/logs/04-none-immediate-original.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 4. ADMIN 원문 상태에서 검색/페이지 이동 후 유효 세션 동안 원문 유지 | PASS | 10324ms | [스크린샷 1](artifacts/screenshots/06-original-after-search-screenshot.png) |  | [로그 1](artifacts/logs/05-original-search-page.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 5. ADMIN 수동 마스킹 후 재노출 방지 및 재요청 시에만 원문 전환 | PASS | 12317ms | [스크린샷 1](artifacts/screenshots/07-manual-remask-reopen-screenshot.png) |  | [로그 1](artifacts/logs/06-manual-remask.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 6. TA(EMAIL) 원문 조회 시 인증창, 마스킹 이메일, 유효시간 표시 | PASS | 6247ms | [스크린샷 1](artifacts/screenshots/08-email-auth-dialog-screenshot.png) |  | [로그 1](artifacts/logs/07-email-auth-dialog.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 7. TA 빈 값/6자리 미만/잘못된 인증번호 거부 및 원문 미노출 | PASS | 7190ms | [스크린샷 1](artifacts/screenshots/09-email-auth-invalid-screenshot.png) |  | [로그 1](artifacts/logs/08-email-auth-validation.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 8-10. TA 정상 이메일 인증 후 원문 유지 및 수동 마스킹 세션 폐기 | PASS | 실시간 재검증 |  |  | [로그](artifacts/logs/11-ta-auth-success-remask.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 11. TA 미인증 인증창 종료 후 재요청 시 새 인증 절차 시작 | PASS | 16259ms | [스크린샷 1](artifacts/screenshots/10-email-auth-restart-screenshot.png) |  | [로그 1](artifacts/logs/09-email-auth-restart.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 12. 인증 세션 만료 후 자동 마스킹 전환 및 안내 확인 | PASS | 603039ms |  |  | [로그](artifacts/logs/12-ta-expiry-retest.md) |  |
| 4071/dev/ban-log-user-id-masking.spec.ts / [4071][dev] BAN 로그 사용자 ID 마스킹/원문 조회 / 13. ADMIN과 TA의 NONE/EMAIL 정책이 뒤바뀌지 않는지 확인 | PASS | 12948ms | [스크린샷 1](artifacts/screenshots/11-policy-not-swapped-screenshot.png)<br>[스크린샷 2](artifacts/screenshots/12-policy-not-swapped-screenshot.png) |  | [로그 1](artifacts/logs/10-policy-not-swapped.md) |  |

## Notes

- 실제 재검증 결과 확인 불가 및 실패 항목은 없습니다.
- TA DELETE endpoint 수정 후 권한 검증과 실제 VERIFIED 세션 폐기 E2E가 HTTP 200으로 통과했습니다.
- 기본 조회 기간은 당월인 2026-09-01~2026-09-11이며, 인증 전 무한 스크롤 마스킹 항목은 데이터 확보를 위해 2026-04-01~2026-09-11로 재검증했습니다.
- 확장 기간 재검증에서 ADMIN·TA 모두 `page=1` 추가 적재 및 마스킹 유지를 확인해 기존 BLOCKED를 PASS로 변경했습니다.
- ADMIN 원문 상태도 같은 확장 기간에서 `page=1` 추가 적재 후 원문 유지를 확인해 PASS로 변경했습니다.
- TA 10분 만료 검증은 2026-04-01~2026-09-11 범위의 실제 데이터 1,305건으로 재수행했으며, 인증 직후 원문 표시와 603,039ms 후 자동 재마스킹·버튼 복구·만료 안내를 확인해 PASS로 정정했습니다.
- 자동화 원본의 12번 케이스도 실제 10분 감시 흐름으로 정리했으며, 재실행 시 만료 검증 전용 `QA_4071_EXPIRY_EMAIL_CODE`를 사용합니다.
- 실행은 Playwright Chromium으로 수행했으며, 테스트 원본은 `ban-log-user-id-masking.spec.ts`입니다.
- 공개 스크린샷은 계정, BAN 로그 행 데이터, 수신 이메일을 마스킹했습니다. 원본 캡처는 추적 산출물에 포함하지 않았습니다.
- 화면과 API 응답으로 기능 배포는 확인했으나, Redmine에 배포 버전 기록이 없어 정확한 빌드/커밋 식별은 확인할 수 없었습니다.
- 검토 후 `qa:redmine:update`로 report/evidence를 업로드하고 QA subissue 상태를 갱신합니다.
