diff --git a/projects/api-integration/MASTER_PLAN.md b/projects/api-integration/MASTER_PLAN.md index 47d08e6..209ad89 100644 --- a/projects/api-integration/MASTER_PLAN.md +++ b/projects/api-integration/MASTER_PLAN.md @@ -76,17 +76,34 @@ **산출물**: `phase-3-api-mapping/mapping-matrix.md` -### Phase 4: 연동 작업 + 오류 수정 -**목표**: 실제 연동 및 오류 해결 +### Phase 4: 연동 작업 + 기능 검증 +**목표**: 실제 연동 및 기능 단위 TC 기반 검증 + +**검증 방식**: +- 모든 작업 그룹에 대해 기능 단위별 순차 테스트 +- 선행 조건 파악 → 본 기능 → 파생 기능 순서로 TC 설계 +- 각 API별 실제 발생 가능한 모든 케이스 포함 +- Flow Tester(https://mng.sam.kr/dev-tools/flow-tester)로 검증 +- TC 전체 통과 시 해당 기능 완료 처리 + +**검증 프로세스**: +``` +기능 선택 → 선행조건 파악 → TC 설계 → JSON 저장 → Flow Tester 검증 → 완료 처리 +``` 작업 그룹: 1. **인증/메뉴**: 로그인, 메뉴 로드, 권한 체크 2. **품목 관리**: Items CRUD, BOM, 파일 3. **거래처/판매**: 거래처, 견적, 주문 -4. **인사/재무**: 사원, 근태, 급여 -5. **기타 기능**: 게시판, 설정, 대시보드 +4. **단가 관리**: 단가 등록, 수정, 조회 +5. **인사/재무**: 사원, 근태, 급여 +6. **기타 기능**: 게시판, 설정, 대시보드 -**산출물**: `phase-4-integration/integration-log.md` +**산출물**: +- `phase-4-integration/integration-log.md` - 연동 로그 +- `phase-4-integration/tc/` - 기능별 TC JSON 파일 + +**JSON 파일 저장 경로**: `docs/projects/api-integration/phase-4-integration/` ### Phase 5: 최종 검증 및 리포트 **목표**: 전체 기능 검증 및 문서화 @@ -229,4 +246,5 @@ api-integration-context.md # 결정사항, 임시 메모 | 날짜 | 변경 내용 | 작성자 | |------|----------|--------| -| 2025-12-20 | 초기 마스터 플랜 작성 | Claude | \ No newline at end of file +| 2025-12-20 | 초기 마스터 플랜 작성 | Claude | +| 2025-12-21 | Phase 4 검증 방식 변경: TC 기반 Flow Tester 검증, 단가 관리 그룹 추가 | Claude | \ No newline at end of file diff --git a/projects/api-integration/PROGRESS.md b/projects/api-integration/PROGRESS.md index 54ac2cb..565a0d7 100644 --- a/projects/api-integration/PROGRESS.md +++ b/projects/api-integration/PROGRESS.md @@ -11,8 +11,8 @@ |------|-----| | **현재 Phase** | Phase 4 진행 중 | | **현재 작업** | 각 API 실제 호출 검증 | -| **진행률** | 55% | -| **다음 액션** | POST /v1/pricing 오류 확인 및 수정 | +| **진행률** | 65% | +| **다음 액션** | Flow Tester로 인사/재무 TC 검증 실행 | | **완료 기준** | ⚠️ 소스 존재가 아닌 **실제 API 호출 검증** | --- @@ -51,8 +51,13 @@ - [ ] 인증/메뉴 - 실제 API 호출 검증 - [ ] 품목 관리 - 실제 API 호출 검증 -- [ ] 거래처/판매 - 실제 API 호출 검증 (POST /v1/pricing 오류 확인 필요) -- [ ] 인사/재무 - 실제 API 호출 검증 +- [x] 거래처/판매 - 실제 API 호출 검증 ✅ (POST /v1/pricing 완료) +- [ ] 인사/재무 - TC 생성 완료, Flow Tester 검증 대기 + - ✅ hr-employees-crud.json + - ✅ hr-attendances-crud.json + - ✅ hr-payrolls-crud.json + - ✅ finance-deposits-crud.json + - ✅ finance-withdrawals-crud.json - [ ] 기타 기능 - 실제 API 호출 검증 ### Phase 5: 최종 검증 [⏳ 대기] @@ -115,6 +120,7 @@ serena.read_memory("api-integration-state") | #1 | 2025-12-20 | Phase 0 완료, 문서 구조 생성, 분석 완료 | 초기 세션 | | #2 | 2025-12-20 | Phase 3 완료, API 매핑 분석, Gap 분석 | 109 페이지 분석 | | #3 | 2025-12-20 | Phase 2 완료, 메뉴 추출, 권한 매핑 | 11개 대메뉴, 54개 중메뉴, 52개 권한 | +| #4 | 2025-12-21 | 인사/재무 TC 생성 | 5개 TC JSON 파일 생성 | --- diff --git a/projects/api-integration/phase-4-integration/tc/finance-deposits-crud.json b/projects/api-integration/phase-4-integration/tc/finance-deposits-crud.json new file mode 100644 index 0000000..d7676e8 --- /dev/null +++ b/projects/api-integration/phase-4-integration/tc/finance-deposits-crud.json @@ -0,0 +1,141 @@ +{ + "name": "Finance Deposits CRUD Test", + "description": "입금 관리 테스트 (생성, 조회, 수정, 삭제, 요약)", + "version": "1.0", + "config": { + "baseUrl": "", + "timeout": 30000, + "stopOnFailure": false + }, + "variables": { + "user_id": "{{$env.FLOW_TESTER_USER_ID}}", + "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}" + }, + "steps": [ + { + "id": "login", + "name": "1. 로그인", + "method": "POST", + "endpoint": "/api/v1/login", + "body": { + "user_id": "{{user_id}}", + "user_pwd": "{{user_pwd}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.access_token": "@isString" + } + }, + "extract": { + "token": "$.access_token" + } + }, + { + "id": "get_summary", + "name": "2. 입금 요약 조회", + "method": "GET", + "endpoint": "/api/v1/deposits/summary", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "list_deposits", + "name": "3. 입금 목록 조회", + "method": "GET", + "endpoint": "/api/v1/deposits?page=1&per_page=10", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "create_deposit", + "name": "4. 입금 등록", + "method": "POST", + "endpoint": "/api/v1/deposits", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "deposit_date": "2024-12-15", + "client_name": "TC 테스트 거래처", + "amount": 1500000, + "payment_method": "transfer", + "description": "TC 테스트 입금" + }, + "expect": { + "status": [200, 201], + "jsonPath": { + "$.success": true, + "$.data.id": "@isNumber" + } + }, + "extract": { + "depositId": "$.data.id" + }, + "continueOnFailure": true + }, + { + "id": "get_deposit", + "name": "5. 입금 상세 조회", + "method": "GET", + "endpoint": "/api/v1/deposits/{{create_deposit.depositId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "update_deposit", + "name": "6. 입금 수정", + "method": "PUT", + "endpoint": "/api/v1/deposits/{{create_deposit.depositId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "amount": 2000000, + "description": "TC 테스트 입금 - 수정됨" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "delete_deposit", + "name": "7. 입금 삭제", + "method": "DELETE", + "endpoint": "/api/v1/deposits/{{create_deposit.depositId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200, 204] + }, + "continueOnFailure": true + } + ] +} diff --git a/projects/api-integration/phase-4-integration/tc/finance-withdrawals-crud.json b/projects/api-integration/phase-4-integration/tc/finance-withdrawals-crud.json new file mode 100644 index 0000000..8c3c7f2 --- /dev/null +++ b/projects/api-integration/phase-4-integration/tc/finance-withdrawals-crud.json @@ -0,0 +1,141 @@ +{ + "name": "Finance Withdrawals CRUD Test", + "description": "출금 관리 테스트 (생성, 조회, 수정, 삭제, 요약)", + "version": "1.0", + "config": { + "baseUrl": "", + "timeout": 30000, + "stopOnFailure": false + }, + "variables": { + "user_id": "{{$env.FLOW_TESTER_USER_ID}}", + "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}" + }, + "steps": [ + { + "id": "login", + "name": "1. 로그인", + "method": "POST", + "endpoint": "/api/v1/login", + "body": { + "user_id": "{{user_id}}", + "user_pwd": "{{user_pwd}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.access_token": "@isString" + } + }, + "extract": { + "token": "$.access_token" + } + }, + { + "id": "get_summary", + "name": "2. 출금 요약 조회", + "method": "GET", + "endpoint": "/api/v1/withdrawals/summary", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "list_withdrawals", + "name": "3. 출금 목록 조회", + "method": "GET", + "endpoint": "/api/v1/withdrawals?page=1&per_page=10", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "create_withdrawal", + "name": "4. 출금 등록", + "method": "POST", + "endpoint": "/api/v1/withdrawals", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "withdrawal_date": "2024-12-15", + "client_name": "TC 테스트 거래처", + "amount": 500000, + "payment_method": "transfer", + "description": "TC 테스트 출금" + }, + "expect": { + "status": [200, 201], + "jsonPath": { + "$.success": true, + "$.data.id": "@isNumber" + } + }, + "extract": { + "withdrawalId": "$.data.id" + }, + "continueOnFailure": true + }, + { + "id": "get_withdrawal", + "name": "5. 출금 상세 조회", + "method": "GET", + "endpoint": "/api/v1/withdrawals/{{create_withdrawal.withdrawalId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "update_withdrawal", + "name": "6. 출금 수정", + "method": "PUT", + "endpoint": "/api/v1/withdrawals/{{create_withdrawal.withdrawalId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "amount": 750000, + "description": "TC 테스트 출금 - 수정됨" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "delete_withdrawal", + "name": "7. 출금 삭제", + "method": "DELETE", + "endpoint": "/api/v1/withdrawals/{{create_withdrawal.withdrawalId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200, 204] + }, + "continueOnFailure": true + } + ] +} diff --git a/projects/api-integration/phase-4-integration/tc/hr-attendances-crud.json b/projects/api-integration/phase-4-integration/tc/hr-attendances-crud.json new file mode 100644 index 0000000..778b3cd --- /dev/null +++ b/projects/api-integration/phase-4-integration/tc/hr-attendances-crud.json @@ -0,0 +1,190 @@ +{ + "name": "HR Attendances CRUD Test", + "description": "근태 관리 테스트 (출퇴근, 조회, 수정, 통계)", + "version": "1.0", + "config": { + "baseUrl": "", + "timeout": 30000, + "stopOnFailure": false + }, + "variables": { + "user_id": "{{$env.FLOW_TESTER_USER_ID}}", + "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}", + "testUserId": 1 + }, + "steps": [ + { + "id": "login", + "name": "1. 로그인", + "method": "POST", + "endpoint": "/api/v1/login", + "body": { + "user_id": "{{user_id}}", + "user_pwd": "{{user_pwd}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.access_token": "@isString" + } + }, + "extract": { + "token": "$.access_token" + } + }, + { + "id": "monthly_stats", + "name": "2. 월별 근태 통계 조회", + "method": "GET", + "endpoint": "/api/v1/attendances/monthly-stats?year=2024&month=12", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "list_attendances", + "name": "3. 근태 목록 조회", + "method": "GET", + "endpoint": "/api/v1/attendances?page=1&per_page=10", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "check_in", + "name": "4. 출근 체크인", + "method": "POST", + "endpoint": "/api/v1/attendances/check-in", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "check_in": "09:00:00", + "gps_data": { + "latitude": 37.5665, + "longitude": 126.9780, + "accuracy": 10 + } + }, + "expect": { + "status": [200, 201] + }, + "extract": { + "attendanceId": "$.data.id" + }, + "continueOnFailure": true + }, + { + "id": "check_out", + "name": "5. 퇴근 체크아웃", + "method": "POST", + "endpoint": "/api/v1/attendances/check-out", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "check_out": "18:00:00", + "gps_data": { + "latitude": 37.5665, + "longitude": 126.9780, + "accuracy": 10 + } + }, + "expect": { + "status": [200] + }, + "continueOnFailure": true + }, + { + "id": "create_attendance", + "name": "6. 근태 수동 등록", + "method": "POST", + "endpoint": "/api/v1/attendances", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "user_id": "{{testUserId}}", + "base_date": "2024-11-15", + "status": "onTime", + "check_in": "09:00:00", + "check_out": "18:00:00", + "work_minutes": 540, + "remarks": "TC 테스트 데이터" + }, + "expect": { + "status": [200, 201], + "jsonPath": { + "$.success": true, + "$.data.id": "@isNumber" + } + }, + "extract": { + "createdAttendanceId": "$.data.id" + }, + "continueOnFailure": true + }, + { + "id": "get_attendance", + "name": "7. 근태 상세 조회", + "method": "GET", + "endpoint": "/api/v1/attendances/{{create_attendance.createdAttendanceId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "update_attendance", + "name": "8. 근태 수정", + "method": "PATCH", + "endpoint": "/api/v1/attendances/{{create_attendance.createdAttendanceId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "status": "late", + "late_minutes": 30, + "remarks": "지각 - 교통 체증" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "delete_attendance", + "name": "9. 근태 삭제", + "method": "DELETE", + "endpoint": "/api/v1/attendances/{{create_attendance.createdAttendanceId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200, 204] + }, + "continueOnFailure": true + } + ] +} diff --git a/projects/api-integration/phase-4-integration/tc/hr-employees-crud.json b/projects/api-integration/phase-4-integration/tc/hr-employees-crud.json new file mode 100644 index 0000000..7c9b0f1 --- /dev/null +++ b/projects/api-integration/phase-4-integration/tc/hr-employees-crud.json @@ -0,0 +1,148 @@ +{ + "name": "HR Employees CRUD Test", + "description": "사원 관리 CRUD 테스트 (생성, 조회, 수정, 삭제)", + "version": "1.0", + "config": { + "baseUrl": "", + "timeout": 30000, + "stopOnFailure": false + }, + "variables": { + "user_id": "{{$env.FLOW_TESTER_USER_ID}}", + "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}" + }, + "steps": [ + { + "id": "login", + "name": "1. 로그인", + "method": "POST", + "endpoint": "/api/v1/login", + "body": { + "user_id": "{{user_id}}", + "user_pwd": "{{user_pwd}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.access_token": "@isString" + } + }, + "extract": { + "token": "$.access_token" + } + }, + { + "id": "get_stats", + "name": "2. 사원 통계 조회", + "method": "GET", + "endpoint": "/api/v1/employees/stats", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "list_employees", + "name": "3. 사원 목록 조회", + "method": "GET", + "endpoint": "/api/v1/employees?page=1&per_page=10", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "create_employee", + "name": "4. 사원 등록", + "method": "POST", + "endpoint": "/api/v1/employees", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "name": "{{$faker.koreanName}}", + "email": "{{$faker.email:test}}", + "phone": "{{$faker.phone}}", + "employee_code": "{{$faker.employeeCode:EMP}}", + "position_key": "staff", + "employment_type_key": "regular", + "employee_status": "active", + "hire_date": "{{$faker.date:2024-01-01:2024-12-31}}", + "work_type": "regular", + "salary": 4500000, + "is_active": true + }, + "expect": { + "status": [200, 201], + "jsonPath": { + "$.success": true, + "$.data.id": "@isNumber" + } + }, + "extract": { + "employeeId": "$.data.id", + "employeeName": "$.data.name" + }, + "continueOnFailure": true + }, + { + "id": "get_employee", + "name": "5. 사원 상세 조회", + "method": "GET", + "endpoint": "/api/v1/employees/{{create_employee.employeeId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "update_employee", + "name": "6. 사원 정보 수정", + "method": "PATCH", + "endpoint": "/api/v1/employees/{{create_employee.employeeId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "position_key": "manager", + "salary": 5500000 + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "delete_employee", + "name": "7. 사원 삭제 (퇴직 처리)", + "method": "DELETE", + "endpoint": "/api/v1/employees/{{create_employee.employeeId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200, 204] + }, + "continueOnFailure": true + } + ] +} diff --git a/projects/api-integration/phase-4-integration/tc/hr-payrolls-crud.json b/projects/api-integration/phase-4-integration/tc/hr-payrolls-crud.json new file mode 100644 index 0000000..8ceef37 --- /dev/null +++ b/projects/api-integration/phase-4-integration/tc/hr-payrolls-crud.json @@ -0,0 +1,187 @@ +{ + "name": "HR Payrolls CRUD Test", + "description": "급여 관리 테스트 (생성, 조회, 수정, 확정, 지급)", + "version": "1.0", + "config": { + "baseUrl": "", + "timeout": 30000, + "stopOnFailure": false + }, + "variables": { + "user_id": "{{$env.FLOW_TESTER_USER_ID}}", + "user_pwd": "{{$env.FLOW_TESTER_USER_PWD}}", + "testUserId": 1, + "testYear": 2024, + "testMonth": 11 + }, + "steps": [ + { + "id": "login", + "name": "1. 로그인", + "method": "POST", + "endpoint": "/api/v1/login", + "body": { + "user_id": "{{user_id}}", + "user_pwd": "{{user_pwd}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.access_token": "@isString" + } + }, + "extract": { + "token": "$.access_token" + } + }, + { + "id": "get_summary", + "name": "2. 급여 요약 조회", + "method": "GET", + "endpoint": "/api/v1/payrolls/summary?year={{testYear}}&month={{testMonth}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "list_payrolls", + "name": "3. 급여 목록 조회", + "method": "GET", + "endpoint": "/api/v1/payrolls?year={{testYear}}&month={{testMonth}}&page=1&per_page=10", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + } + }, + { + "id": "create_payroll", + "name": "4. 급여 수동 등록", + "method": "POST", + "endpoint": "/api/v1/payrolls", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "user_id": "{{testUserId}}", + "pay_year": "{{testYear}}", + "pay_month": "{{testMonth}}", + "base_salary": 3500000, + "overtime_pay": 250000, + "bonus": 0, + "allowances": [ + {"name": "식대", "amount": 100000}, + {"name": "교통비", "amount": 100000} + ], + "income_tax": 120000, + "resident_tax": 12000, + "health_insurance": 115000, + "pension": 157500, + "employment_insurance": 31500, + "note": "TC 테스트 급여" + }, + "expect": { + "status": [200, 201], + "jsonPath": { + "$.success": true, + "$.data.id": "@isNumber" + } + }, + "extract": { + "payrollId": "$.data.id" + }, + "continueOnFailure": true + }, + { + "id": "get_payroll", + "name": "5. 급여 상세 조회", + "method": "GET", + "endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "update_payroll", + "name": "6. 급여 수정", + "method": "PUT", + "endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "body": { + "bonus": 500000, + "note": "성과급 추가" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "get_payslip", + "name": "7. 급여명세서 조회", + "method": "GET", + "endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}/payslip", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "confirm_payroll", + "name": "8. 급여 확정", + "method": "POST", + "endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}/confirm", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200], + "jsonPath": { + "$.success": true + } + }, + "continueOnFailure": true + }, + { + "id": "delete_payroll", + "name": "9. 급여 삭제", + "method": "DELETE", + "endpoint": "/api/v1/payrolls/{{create_payroll.payrollId}}", + "headers": { + "Authorization": "Bearer {{login.token}}" + }, + "expect": { + "status": [200, 204] + }, + "continueOnFailure": true + } + ] +}