{ "id": "bad-debt-collection", "name": "대손채권회수 테스트", "screenshotPolicy": { "onErrorOnly": true, "captureOn": ["error", "fail", "timeout", "404", "500", "blocked"] }, "description": "회계관리 > 대손채권회수 메뉴의 체크박스 선택, 수정 모드, 입력 필드, 메모 추가, 서류 업로드, 이동 버튼 기능 전체 테스트", "baseUrl": "https://dev.codebridge-x.com", "url": "/ko/accounting/bad-debt-collection", "menuNavigation": { "level1": "회계관리", "level2": "악성채권추심관리", "expectedUrl": "/ko/accounting/bad-debt-collection" }, "navigation": { "targetUrl": "/accounting/bad-debt-collection", "urlPattern": "/accounting/bad-debt-collection|/ko/accounting/bad-debt-collection", "menuHints": ["악성채권추심관리", "대손", "채권", "회계관리"] }, "menuNavigationEnhanced": { "strategy": "scroll-and-search", "sidebarSelector": ".sidebar-scroll, [class*='sidebar'], nav[class*='menu']", "scrollConfig": { "scrollStep": 200, "maxScrollAttempts": 10, "scrollDelay": 300 }, "level1": { "text": "회계관리", "fallbackSelectors": [ "span:has-text('회계관리')", "[class*='menu-item']:has-text('회계관리')", "a:has-text('회계관리')" ] }, "level2": { "text": "악성채권추심관리", "fallbackSelectors": [ "span:has-text('악성채권추심관리')", "[class*='submenu']:has-text('악성채권추심관리')", "a:has-text('악성채권추심관리')" ] }, "expectedUrl": "/ko/accounting/bad-debt-collection" }, "testFocus": { "primary": "수정 페이지 전체 입력 필드 및 메모/서류 추가 기능 검증", "description": "체크박스 선택 시 수정 버튼 활성화, 수정 페이지 모든 입력 필드 테스트, 메모 추가/삭제, 추가 서류 업로드, 이동 버튼 동작 확인" }, "prerequisites": { "authentication": true, "testData": { "vendorName": "테스트거래처", "businessNumber": "123-45-67890", "representativeName": "홍길동", "address": { "zipCode": "06234", "address1": "서울특별시 강남구 테헤란로", "address2": "123호" }, "contact": { "phone": "02-1234-5678", "mobile": "010-1234-5678", "fax": "02-1234-5679", "email": "test@example.com" }, "debtInfo": { "amount": 5000000, "overdueDays": 90, "status": "collecting" }, "memo": "테스트 메모 내용입니다.", "file": { "businessRegistration": "사업자등록증.pdf", "taxInvoice": "세금계산서.pdf", "additional": "추가서류1.pdf" } } }, "expectedAPIs": [ { "method": "GET", "endpoint": "/api/v1/bad-debts", "description": "대손채권 목록 조회" }, { "method": "GET", "endpoint": "/api/v1/bad-debts/{id}", "description": "대손채권 상세 조회" }, { "method": "PUT", "endpoint": "/api/v1/bad-debts/{id}", "description": "대손채권 수정" }, { "method": "POST", "endpoint": "/api/v1/bad-debts/{id}/memos", "description": "메모 추가" }, { "method": "DELETE", "endpoint": "/api/v1/bad-debts/{id}/memos/{memoId}", "description": "메모 삭제" }, { "method": "POST", "endpoint": "/api/v1/bad-debts/{id}/documents", "description": "서류 업로드" } ], "steps": [ { "id": "step-0", "name": "사이드바 메뉴 전체 펼치기", "description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비", "actions": [ { "type": "evaluate", "script": "document.querySelector('.sidebar-scroll, [class*=\"sidebar\"] > div')?.scrollTo({top: 0, behavior: 'instant'})" }, { "type": "wait", "duration": 300 }, { "type": "evaluate", "script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()" }, { "type": "wait", "duration": 2000 } ], "expected": { "sidebarReady": true } }, { "id": "step-1", "name": "2단계 메뉴 진입: 회계관리 > 악성채권추심관리", "description": "회계관리 > 악성채권추심관리 메뉴로 이동하여 페이지 로드 확인 (scrollAndFind 패턴 사용)", "navigationPattern": "scrollAndFind", "actions": [ { "type": "scrollAndFind", "target": "회계관리", "config": { "scrollContainer": ".sidebar-scroll, [class*='sidebar']", "scrollStep": 200, "maxAttempts": 10, "waitAfterScroll": 300 } }, { "type": "click", "target": "회계관리" }, { "type": "wait", "duration": 500 }, { "type": "scrollAndFind", "target": "악성채권추심관리", "config": { "scrollContainer": ".sidebar-scroll, [class*='sidebar']", "scrollStep": 200, "maxAttempts": 10, "waitAfterScroll": 300 } }, { "type": "click", "target": "악성채권추심관리" }, { "type": "wait", "target": "페이지 로드 완료" } ], "expected": { "url": "/ko/accounting/bad-debt-collection", "pageTitle": "악성채권추심관리", "elements": ["통계 카드", "검색창", "필터", "테이블"], "authenticated": true } }, { "id": "step-2", "name": "페이지 구조 확인", "description": "통계 카드, 필터, 테이블 컬럼 구조 확인", "actions": [ { "type": "verify", "target": "페이지 구조" } ], "expected": { "stats": ["총 악성채권", "추심중", "법적조치", "회수완료"], "filters": ["거래처 필터", "상태 필터", "정렬"], "tableColumns": ["체크박스", "No.", "거래처", "채권금액", "발생일", "연체일수", "담당자", "상태", "설정", "작업"] } }, { "id": "step-3", "name": "필터 및 검색 기능 테스트", "description": "거래처 필터, 상태 필터, 정렬, 검색 기능 동작 확인", "actions": [ { "type": "select", "target": "상태 필터", "value": "추심중" }, { "type": "wait", "target": "데이터 필터링" }, { "type": "verify", "target": "필터링된 데이터" } ], "expected": { "filterApplied": true, "dataFiltered": "추심중 상태만 표시" } }, { "id": "step-4", "name": "체크박스 선택 전 작업 버튼 확인", "description": "체크박스 미선택 시 수정/삭제 버튼이 표시되지 않는지 확인", "actions": [ { "type": "verify", "target": "작업 컬럼" } ], "expected": { "editButtonVisible": false, "deleteButtonVisible": false } }, { "id": "step-5", "name": "첫 번째 행 체크박스 선택", "description": "첫 번째 행의 체크박스 클릭하여 선택", "actions": [ { "type": "click", "target": "첫 번째 행 체크박스" }, { "type": "wait", "target": "체크박스 선택 반영" } ], "expected": { "checkboxChecked": true, "rowHighlighted": true } }, { "id": "step-6", "name": "수정 버튼 표시 확인", "description": "체크박스 선택 후 작업 컬럼에 수정/삭제 버튼이 표시되는지 확인", "actions": [ { "type": "verify", "target": "작업 컬럼 버튼" } ], "expected": { "editButtonVisible": true, "deleteButtonVisible": true } }, { "id": "step-7", "name": "수정 버튼 클릭", "description": "수정 버튼 클릭하여 수정 페이지로 이동", "actions": [ { "type": "click", "target": "수정 버튼" }, { "type": "wait", "target": "페이지 이동" } ], "expected": { "urlPattern": "/accounting/bad-debt-collection/{id}?mode=edit", "pageTitle": "악성채권추심관리 상세", "formMode": "edit" } }, { "id": "step-8", "name": "수정 페이지 구조 확인", "description": "수정 페이지의 모든 섹션 및 버튼 확인", "actions": [ { "type": "verify", "target": "페이지 섹션 및 버튼" } ], "expected": { "sections": ["기본 정보", "연락처 정보", "담당자 정보", "필요 서류", "악성 채권 정보", "메모"], "headerButtons": ["취소", "저장"], "linkButtons": ["수취 어음 현황", "거래처 미수금 현황"] } }, { "id": "step-9", "name": "기본 정보 섹션 - 사업자등록번호 (읽기전용)", "description": "사업자등록번호 필드가 읽기 전용인지 확인", "actions": [ { "type": "verify", "target": "사업자등록번호 필드" } ], "expected": { "fieldDisabled": true, "fieldValue": "존재" } }, { "id": "step-10", "name": "기본 정보 섹션 - 거래처 코드 (읽기전용)", "description": "거래처 코드 필드가 읽기 전용인지 확인", "actions": [ { "type": "verify", "target": "거래처 코드 필드" } ], "expected": { "fieldDisabled": true, "fieldValue": "존재" } }, { "id": "step-11", "name": "기본 정보 섹션 - 거래처명 입력", "description": "거래처명 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "거래처명 입력 필드" }, { "type": "type", "target": "거래처명 입력 필드", "value": "수정된 테스트거래처" } ], "expected": { "fieldEditable": true, "valueUpdated": "수정된 테스트거래처" } }, { "id": "step-12", "name": "기본 정보 섹션 - 대표자명 입력", "description": "대표자명 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "대표자명 입력 필드" }, { "type": "type", "target": "대표자명 입력 필드", "value": "홍길동" } ], "expected": { "fieldEditable": true, "valueUpdated": "홍길동" } }, { "id": "step-13", "name": "기본 정보 섹션 - 악성채권 등록 토글", "description": "악성채권 등록 스위치 토글 동작 확인", "actions": [ { "type": "click", "target": "악성채권 등록 Switch" }, { "type": "wait", "target": "스위치 상태 변경" } ], "expected": { "switchToggled": true } }, { "id": "step-14", "name": "기본 정보 섹션 - 업태/업종 입력", "description": "업태, 업종 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "업태 입력 필드" }, { "type": "type", "target": "업태 입력 필드", "value": "도소매업" }, { "type": "clear", "target": "업종 입력 필드" }, { "type": "type", "target": "업종 입력 필드", "value": "전자상거래" } ], "expected": { "businessTypeUpdated": "도소매업", "businessCategoryUpdated": "전자상거래" } }, { "id": "step-15", "name": "연락처 정보 섹션 - 우편번호 찾기 버튼", "description": "우편번호 찾기 버튼 클릭 시 Daum 우편번호 서비스 팝업 표시", "actions": [ { "type": "click", "target": "우편번호 찾기 버튼" }, { "type": "wait", "target": "팝업 표시" } ], "expected": { "popupOpened": true, "popupType": "Daum 우편번호 서비스" } }, { "id": "step-16", "name": "연락처 정보 섹션 - 주소 입력", "description": "기본주소 및 상세주소 입력 테스트 (우편번호 팝업 닫은 후)", "actions": [ { "type": "escape", "target": "팝업 닫기" }, { "type": "clear", "target": "상세주소 입력 필드" }, { "type": "type", "target": "상세주소 입력 필드", "value": "456호" } ], "expected": { "address2Updated": "456호" } }, { "id": "step-17", "name": "연락처 정보 섹션 - 전화번호 입력", "description": "전화번호 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "전화번호 입력 필드" }, { "type": "type", "target": "전화번호 입력 필드", "value": "02-9999-8888" } ], "expected": { "phoneUpdated": "02-9999-8888" } }, { "id": "step-18", "name": "연락처 정보 섹션 - 모바일 입력", "description": "모바일 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "모바일 입력 필드" }, { "type": "type", "target": "모바일 입력 필드", "value": "010-9999-8888" } ], "expected": { "mobileUpdated": "010-9999-8888" } }, { "id": "step-19", "name": "연락처 정보 섹션 - 팩스 입력", "description": "팩스 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "팩스 입력 필드" }, { "type": "type", "target": "팩스 입력 필드", "value": "02-9999-8889" } ], "expected": { "faxUpdated": "02-9999-8889" } }, { "id": "step-20", "name": "연락처 정보 섹션 - 이메일 입력", "description": "이메일 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "이메일 입력 필드" }, { "type": "type", "target": "이메일 입력 필드", "value": "updated@example.com" } ], "expected": { "emailUpdated": "updated@example.com" } }, { "id": "step-21", "name": "담당자 정보 섹션 - 담당자명 입력", "description": "담당자명 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "담당자명 입력 필드" }, { "type": "type", "target": "담당자명 입력 필드", "value": "김담당" } ], "expected": { "contactNameUpdated": "김담당" } }, { "id": "step-22", "name": "담당자 정보 섹션 - 담당자 전화 입력", "description": "담당자 전화 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "담당자 전화 입력 필드" }, { "type": "type", "target": "담당자 전화 입력 필드", "value": "010-1111-2222" } ], "expected": { "contactPhoneUpdated": "010-1111-2222" } }, { "id": "step-23", "name": "필요 서류 섹션 - 사업자등록증 업로드 확인", "description": "사업자등록증 파일 업로드 필드 존재 확인", "actions": [ { "type": "verify", "target": "사업자등록증 파일 입력" } ], "expected": { "fileInputExists": true, "acceptTypes": ".pdf,.jpg,.jpeg,.png" } }, { "id": "step-24", "name": "필요 서류 섹션 - 세금계산서 업로드 확인", "description": "세금계산서 파일 업로드 필드 존재 확인", "actions": [ { "type": "verify", "target": "세금계산서 파일 입력" } ], "expected": { "fileInputExists": true, "acceptTypes": ".pdf,.jpg,.jpeg,.png" } }, { "id": "step-25", "name": "필요 서류 섹션 - 추가 서류 추가 버튼 확인", "description": "추가 서류 섹션에 추가 버튼이 존재하는지 확인", "actions": [ { "type": "verify", "target": "추가 서류 추가 버튼" } ], "expected": { "addButtonExists": true, "buttonText": "추가" } }, { "id": "step-26", "name": "악성 채권 정보 섹션 - 미수금 입력", "description": "미수금 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "미수금 입력 필드" }, { "type": "type", "target": "미수금 입력 필드", "value": "7500000" } ], "expected": { "debtAmountUpdated": 7500000 } }, { "id": "step-27", "name": "악성 채권 정보 섹션 - 상태 선택", "description": "상태 드롭다운에서 값 선택 테스트", "actions": [ { "type": "click", "target": "상태 드롭다운" }, { "type": "select", "target": "상태 옵션", "value": "법적조치" } ], "expected": { "statusUpdated": "legalAction", "optionSelected": "법적조치" } }, { "id": "step-28", "name": "악성 채권 정보 섹션 - 연체일수 입력", "description": "연체일수 필드에 값 입력 테스트", "actions": [ { "type": "clear", "target": "연체일수 입력 필드" }, { "type": "type", "target": "연체일수 입력 필드", "value": "120" } ], "expected": { "overdueDaysUpdated": 120 } }, { "id": "step-29", "name": "악성 채권 정보 섹션 - 본사 담당자 선택", "description": "본사 담당자 드롭다운에서 값 선택 테스트", "actions": [ { "type": "click", "target": "본사 담당자 드롭다운" }, { "type": "select", "target": "담당자 옵션", "value": "첫 번째 담당자" } ], "expected": { "managerSelected": true, "managerName": "존재" } }, { "id": "step-30", "name": "악성 채권 정보 섹션 - 악성채권 발생일 입력", "description": "악성채권 발생일 필드에 날짜 입력 테스트", "actions": [ { "type": "clear", "target": "악성채권 발생일 입력 필드" }, { "type": "type", "target": "악성채권 발생일 입력 필드", "value": "2025-12-01" } ], "expected": { "occurrenceDateUpdated": "2025-12-01" } }, { "id": "step-31", "name": "악성 채권 정보 섹션 - 악성채권 종료일 입력", "description": "악성채권 종료일 필드에 날짜 입력 테스트", "actions": [ { "type": "clear", "target": "악성채권 종료일 입력 필드" }, { "type": "type", "target": "악성채권 종료일 입력 필드", "value": "2026-03-01" } ], "expected": { "endDateUpdated": "2026-03-01" } }, { "id": "step-32", "name": "이동 버튼 - 수취 어음 현황 버튼 확인", "description": "수취 어음 현황 버튼 존재 확인", "actions": [ { "type": "verify", "target": "수취 어음 현황 버튼" } ], "expected": { "buttonExists": true, "buttonText": "수취 어음 현황" } }, { "id": "step-33", "name": "이동 버튼 - 수취 어음 현황 클릭", "description": "수취 어음 현황 버튼 클릭 시 해당 페이지로 이동하는지 확인", "actions": [ { "type": "click", "target": "수취 어음 현황 버튼" }, { "type": "wait", "target": "페이지 이동" } ], "expected": { "urlPattern": "/accounting/bills?vendorId={id}&type=received", "pageChanged": true } }, { "id": "step-34", "name": "이동 후 뒤로가기 (수취 어음 현황 → 대손채권회수 수정)", "description": "브라우저 뒤로가기로 대손채권회수 수정 페이지로 복귀", "actions": [ { "type": "back", "target": "브라우저 뒤로가기" }, { "type": "wait", "target": "페이지 로드" } ], "expected": { "urlPattern": "/accounting/bad-debt-collection/{id}?mode=edit", "pageRestored": true } }, { "id": "step-35", "name": "이동 버튼 - 거래처 미수금 현황 버튼 확인", "description": "거래처 미수금 현황 버튼 존재 확인", "actions": [ { "type": "verify", "target": "거래처 미수금 현황 버튼" } ], "expected": { "buttonExists": true, "buttonText": "거래처 미수금 현황" } }, { "id": "step-36", "name": "이동 버튼 - 거래처 미수금 현황 클릭", "description": "거래처 미수금 현황 버튼 클릭 시 해당 페이지로 이동하는지 확인", "actions": [ { "type": "click", "target": "거래처 미수금 현황 버튼" }, { "type": "wait", "target": "페이지 이동" } ], "expected": { "urlPattern": "/accounting/receivables-status?highlight={vendorId}", "pageChanged": true } }, { "id": "step-37", "name": "이동 후 뒤로가기 (거래처 미수금 현황 → 대손채권회수 수정)", "description": "브라우저 뒤로가기로 대손채권회수 수정 페이지로 복귀", "actions": [ { "type": "back", "target": "브라우저 뒤로가기" }, { "type": "wait", "target": "페이지 로드" } ], "expected": { "urlPattern": "/accounting/bad-debt-collection/{id}?mode=edit", "pageRestored": true } }, { "id": "step-38", "name": "메모 섹션 - 메모 입력 필드 확인", "description": "메모 입력 Textarea 존재 확인", "actions": [ { "type": "verify", "target": "메모 입력 Textarea" } ], "expected": { "textareaExists": true, "placeholder": "메모를 입력하세요..." } }, { "id": "step-39", "name": "메모 섹션 - 메모 추가 버튼 확인", "description": "메모 추가 버튼 존재 확인", "actions": [ { "type": "verify", "target": "메모 추가 버튼" } ], "expected": { "buttonExists": true, "buttonText": "추가" } }, { "id": "step-40", "name": "메모 섹션 - 메모 입력", "description": "메모 입력 필드에 텍스트 입력", "actions": [ { "type": "clear", "target": "메모 입력 Textarea" }, { "type": "type", "target": "메모 입력 Textarea", "value": "이것은 테스트 메모입니다." } ], "expected": { "memoEntered": "이것은 테스트 메모입니다." } }, { "id": "step-41", "name": "메모 섹션 - 메모 추가 버튼 클릭", "description": "메모 추가 버튼 클릭하여 메모 추가", "actions": [ { "type": "click", "target": "메모 추가 버튼" }, { "type": "wait", "target": "메모 추가 완료" } ], "expected": { "memoAdded": true, "memoListUpdated": "메모 카드 표시됨" } }, { "id": "step-42", "name": "메모 섹션 - 추가된 메모 확인", "description": "추가된 메모가 메모 리스트에 표시되는지 확인", "actions": [ { "type": "verify", "target": "메모 리스트" } ], "expected": { "memoDisplayed": true, "memoContent": "이것은 테스트 메모입니다." } }, { "id": "step-43", "name": "메모 섹션 - 추가 메모 입력", "description": "두 번째 메모 입력 및 추가", "actions": [ { "type": "clear", "target": "메모 입력 Textarea" }, { "type": "type", "target": "메모 입력 Textarea", "value": "두 번째 테스트 메모" }, { "type": "click", "target": "메모 추가 버튼" }, { "type": "wait", "target": "메모 추가 완료" } ], "expected": { "memoAdded": true, "memoCount": 2 } }, { "id": "step-44", "name": "메모 섹션 - 메모 삭제 버튼 확인", "description": "메모 카드에 삭제 버튼(X)이 표시되는지 확인", "actions": [ { "type": "verify", "target": "메모 삭제 버튼" } ], "expected": { "deleteButtonExists": true } }, { "id": "step-45", "name": "메모 섹션 - 메모 삭제", "description": "첫 번째 메모의 삭제 버튼 클릭하여 삭제", "actions": [ { "type": "click", "target": "첫 번째 메모 삭제 버튼" }, { "type": "wait", "target": "메모 삭제 완료" } ], "expected": { "memoDeleted": true, "memoCount": 1 } }, { "id": "step-46", "name": "저장 버튼 클릭", "description": "헤더의 저장 버튼 클릭하여 저장 확인 다이얼로그 표시", "actions": [ { "type": "click", "target": "저장 버튼" }, { "type": "wait", "target": "다이얼로그 표시" } ], "expected": { "dialogOpened": true, "dialogTitle": "저장 확인", "dialogMessage": "입력한 내용을 저장하시겠습니까?" } }, { "id": "step-47", "name": "저장 확인 다이얼로그 - 취소 버튼", "description": "저장 확인 다이얼로그에서 취소 버튼 클릭", "actions": [ { "type": "click", "target": "다이얼로그 취소 버튼" }, { "type": "wait", "target": "다이얼로그 닫힘" } ], "expected": { "dialogClosed": true, "pageUnchanged": "여전히 수정 페이지" } }, { "id": "step-48", "name": "저장 버튼 재클릭 및 확인", "description": "저장 버튼 다시 클릭 후 저장 버튼 클릭하여 저장 수행", "actions": [ { "type": "click", "target": "저장 버튼" }, { "type": "wait", "target": "다이얼로그 표시" }, { "type": "click", "target": "다이얼로그 저장 버튼" }, { "type": "wait", "target": "저장 처리 및 페이지 이동" } ], "expected": { "apiCall": "PUT /api/v1/bad-debts/{id}", "apiResponse": "200 OK", "urlChanged": "/accounting/bad-debt-collection/{id}", "successToast": "악성채권이 수정되었습니다." } }, { "id": "step-49", "name": "상세 페이지 확인", "description": "저장 후 상세 보기 페이지로 이동되었는지 확인", "actions": [ { "type": "verify", "target": "페이지 모드 및 버튼" } ], "expected": { "pageMode": "view", "headerButtons": ["삭제", "수정"], "fieldsDisabled": true } }, { "id": "step-50", "name": "목록으로 돌아가기", "description": "뒤로가기 버튼 클릭하여 목록 페이지로 복귀", "actions": [ { "type": "click", "target": "뒤로가기 버튼" }, { "type": "wait", "target": "페이지 이동" } ], "expected": { "url": "/accounting/bad-debt-collection", "pageTitle": "악성채권추심관리" } } ], "cleanup": { "description": "테스트 후 입력된 데이터는 DB에 저장됨 (필요시 수동 정리)", "actions": [] }, "notes": [ "체크박스 선택 시 수정/삭제 버튼이 표시되는지 확인", "수정 페이지의 모든 입력 필드 (기본 정보, 연락처, 담당자, 악성 채권 정보) 입력 테스트", "메모 추가 버튼 클릭 시 메모 리스트에 추가되는지 확인", "메모 삭제 버튼(X) 클릭 시 메모가 삭제되는지 확인", "추가 서류 추가 버튼이 존재하는지 확인 (실제 파일 업로드는 브라우저 제약으로 스킵)", "수취 어음 현황 버튼 클릭 시 /accounting/bills 페이지로 이동하는지 확인", "거래처 미수금 현황 버튼 클릭 시 /accounting/receivables-status 페이지로 이동하는지 확인", "저장 버튼 클릭 시 저장 확인 다이얼로그 표시 및 API 호출 확인", "저장 완료 후 상세 보기 페이지로 이동하는지 확인" ] }