# Menu List - React 기반 최종 메뉴 구조 > **생성일**: 2025-12-20 > **기준**: React 라우트 기반 (React-First) --- ## 1. 메뉴 계층 구조 ### 1.1 대시보드 | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 1 | 대시보드 | /dashboard | layout-dashboard | - | 1 | all | ### 1.2 결재관리 (신규) | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 100 | 결재관리 | /approval | file-check | - | 2 | approval.view | | 101 | 기안함 | /approval/draft | file-edit | 100 | 1 | approval.draft | | 102 | 결재함 | /approval/inbox | inbox | 100 | 2 | approval.approve | | 103 | 참조함 | /approval/reference | eye | 100 | 3 | approval.view | ### 1.3 게시판 (신규) | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 200 | 게시판 | /board | layout-list | - | 3 | board.view | | 201 | 게시판 관리 | /board/board-management | settings | 200 | 1 | board.manage | ### 1.4 품목관리 | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 300 | 품목관리 | /items | package | - | 4 | items.view | | 301 | 품목기준관리 | /master-data/item-master-data-management | database | 300 | 1 | items.master | ### 1.5 판매관리 | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 400 | 판매관리 | /sales | briefcase | - | 5 | sales.view | | 401 | 거래처관리 | /sales/client-management-sales-admin | building-2 | 400 | 1 | sales.clients | | 402 | 견적관리 | /sales/quote-management | calculator | 400 | 2 | sales.quotes | | 403 | 단가관리 | /sales/pricing-management | dollar-sign | 400 | 3 | sales.pricing | ### 1.6 생산관리 | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 500 | 생산관리 | /production | factory | - | 6 | production.view | | 501 | 스크린 생산 | /production/screen-production | package | 500 | 1 | production.screen | ### 1.7 회계관리 | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 600 | 회계관리 | /accounting | calculator | - | 7 | accounting.view | | 601 | 거래처관리 | /accounting/vendors | building-2 | 600 | 1 | accounting.vendors | | 602 | 거래처원장 | /accounting/vendor-ledger | file-text | 600 | 2 | accounting.ledger | | 603 | 매출관리 | /accounting/sales | trending-up | 600 | 3 | accounting.sales | | 604 | 매입관리 | /accounting/purchase | trending-down | 600 | 4 | accounting.purchase | | 605 | 세금계산서 | /accounting/bills | receipt | 600 | 5 | accounting.bills | | 606 | 입금관리 | /accounting/deposits | arrow-down-circle | 600 | 6 | accounting.deposits | | 607 | 출금관리 | /accounting/withdrawals | arrow-up-circle | 600 | 7 | accounting.withdrawals | | 608 | 은행거래 | /accounting/bank-transactions | landmark | 600 | 8 | accounting.bank | | 609 | 카드거래 | /accounting/card-transactions | credit-card | 600 | 9 | accounting.card | | 610 | 미수금현황 | /accounting/receivables-status | alert-circle | 600 | 10 | accounting.receivables | | 611 | 예상비용 | /accounting/expected-expenses | clock | 600 | 11 | accounting.expenses | | 612 | 대손채권회수 | /accounting/bad-debt-collection | shield | 600 | 12 | accounting.baddebt | | 613 | 일일리포트 | /accounting/daily-report | file-bar-chart | 600 | 13 | accounting.report | | 614 | 결제내역 | /payment-history | history | 600 | 14 | accounting.payment | ### 1.8 인사관리 (신규) | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 700 | 인사관리 | /hr | users | - | 8 | hr.view | | 701 | 직원관리 | /hr/employee-management | user | 700 | 1 | hr.employees | | 702 | 부서관리 | /hr/department-management | building | 700 | 2 | hr.departments | | 703 | 카드관리 | /hr/card-management | credit-card | 700 | 3 | hr.cards | | 704 | 근태현황 | /hr/attendance | clock | 700 | 4 | hr.attendance.view | | 705 | 근태관리 | /hr/attendance-management | calendar-check | 700 | 5 | hr.attendance.manage | | 706 | 급여관리 | /hr/salary-management | dollar-sign | 700 | 6 | hr.salary | | 707 | 휴가관리 | /hr/vacation-management | calendar | 700 | 7 | hr.vacation | ### 1.9 리포트 (신규) | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 800 | 리포트 | /reports | bar-chart-3 | - | 9 | reports.view | | 801 | 종합분석 | /reports/comprehensive-analysis | pie-chart | 800 | 1 | reports.analysis | ### 1.10 고객센터 (신규) | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 900 | 고객센터 | /customer-center | headphones | - | 10 | customer.view | | 901 | 공지사항 | /customer-center/notices | megaphone | 900 | 1 | customer.notices | | 902 | FAQ | /customer-center/faq | help-circle | 900 | 2 | customer.faq | | 903 | 문의하기 | /customer-center/inquiries | message-circle | 900 | 3 | customer.inquiries | | 904 | 이벤트 | /customer-center/events | calendar-star | 900 | 4 | customer.events | ### 1.11 설정 (신규) | ID | 메뉴명 | URL | 아이콘 | 부모 | 순서 | 권한 | |----|--------|-----|--------|------|------|------| | 1000 | 설정 | /settings | settings | - | 11 | settings.view | | 1001 | 계정정보 | /settings/account-info | user | 1000 | 1 | settings.account | | 1002 | 계정관리 | /settings/accounts | users | 1000 | 2 | settings.accounts | | 1003 | 권한관리 | /settings/permissions | shield | 1000 | 3 | settings.permissions | | 1004 | 직급관리 | /settings/ranks | award | 1000 | 4 | settings.ranks | | 1005 | 직책관리 | /settings/titles | badge | 1000 | 5 | settings.titles | | 1006 | 근태설정 | /settings/attendance-settings | clock | 1000 | 6 | settings.attendance | | 1007 | 휴가정책 | /settings/leave-policy | calendar | 1000 | 7 | settings.leave | | 1008 | 근무일정 | /settings/work-schedule | calendar-days | 1000 | 8 | settings.schedule | | 1009 | 알림설정 | /settings/notification-settings | bell | 1000 | 9 | settings.notifications | | 1010 | 팝업관리 | /settings/popup-management | layout | 1000 | 10 | settings.popups | | 1011 | 회사정보 | /company-info | building | 1000 | 11 | settings.company | | 1012 | 구독관리 | /subscription | credit-card | 1000 | 12 | settings.subscription | --- ## 2. 권한 매핑 정의 ### 2.1 권한 그룹 | 권한 그룹 | 설명 | 기본 권한 | |-----------|------|----------| | all | 모든 사용자 | 로그인 사용자 | | approval.* | 결재 관련 | 결재 담당자 | | board.* | 게시판 관련 | 일반 사용자 | | items.* | 품목 관련 | 생산/구매 담당 | | sales.* | 판매 관련 | 영업 담당 | | production.* | 생산 관련 | 생산 담당 | | accounting.* | 회계 관련 | 경리 담당 | | hr.* | 인사 관련 | 인사 담당 | | reports.* | 리포트 관련 | 관리자 | | customer.* | 고객센터 관련 | 일반 사용자 | | settings.* | 설정 관련 | 관리자 | ### 2.2 세부 권한 ``` approval.view - 결재 조회 approval.draft - 기안 작성 approval.approve - 결재 승인 board.view - 게시판 조회 board.write - 게시글 작성 board.manage - 게시판 관리 items.view - 품목 조회 items.create - 품목 등록 items.edit - 품목 수정 items.delete - 품목 삭제 items.master - 품목기준 관리 sales.view - 판매 조회 sales.clients - 거래처 관리 sales.quotes - 견적 관리 sales.pricing - 단가 관리 production.view - 생산 조회 production.screen - 스크린 생산 accounting.view - 회계 조회 accounting.vendors - 거래처 관리 accounting.ledger - 거래처원장 accounting.sales - 매출 관리 accounting.purchase - 매입 관리 accounting.bills - 세금계산서 accounting.deposits - 입금 관리 accounting.withdrawals - 출금 관리 accounting.bank - 은행거래 accounting.card - 카드거래 accounting.receivables - 미수금 accounting.expenses - 예상비용 accounting.baddebt - 대손채권 accounting.report - 일일리포트 accounting.payment - 결제내역 hr.view - 인사 조회 hr.employees - 직원 관리 hr.departments - 부서 관리 hr.cards - 카드 관리 hr.attendance.view - 근태 조회 hr.attendance.manage - 근태 관리 hr.salary - 급여 관리 hr.vacation - 휴가 관리 reports.view - 리포트 조회 reports.analysis - 종합분석 customer.view - 고객센터 조회 customer.notices - 공지사항 customer.faq - FAQ customer.inquiries - 문의 customer.events - 이벤트 settings.view - 설정 조회 settings.account - 계정정보 settings.accounts - 계정관리 settings.permissions - 권한관리 settings.ranks - 직급관리 settings.titles - 직책관리 settings.attendance - 근태설정 settings.leave - 휴가정책 settings.schedule - 근무일정 settings.notifications - 알림설정 settings.popups - 팝업관리 settings.company - 회사정보 settings.subscription - 구독관리 ``` --- ## 3. mng 등록용 JSON ```json [ { "name": "대시보드", "url": "/dashboard", "icon": "layout-dashboard", "sort_order": 1, "children": [] }, { "name": "결재관리", "url": "/approval", "icon": "file-check", "sort_order": 2, "children": [ {"name": "기안함", "url": "/approval/draft", "icon": "file-edit", "sort_order": 1}, {"name": "결재함", "url": "/approval/inbox", "icon": "inbox", "sort_order": 2}, {"name": "참조함", "url": "/approval/reference", "icon": "eye", "sort_order": 3} ] }, { "name": "게시판", "url": "/board", "icon": "layout-list", "sort_order": 3, "children": [ {"name": "게시판 관리", "url": "/board/board-management", "icon": "settings", "sort_order": 1} ] }, { "name": "품목관리", "url": "/items", "icon": "package", "sort_order": 4, "children": [ {"name": "품목기준관리", "url": "/master-data/item-master-data-management", "icon": "database", "sort_order": 1} ] }, { "name": "판매관리", "url": "/sales", "icon": "briefcase", "sort_order": 5, "children": [ {"name": "거래처관리", "url": "/sales/client-management-sales-admin", "icon": "building-2", "sort_order": 1}, {"name": "견적관리", "url": "/sales/quote-management", "icon": "calculator", "sort_order": 2}, {"name": "단가관리", "url": "/sales/pricing-management", "icon": "dollar-sign", "sort_order": 3} ] }, { "name": "생산관리", "url": "/production", "icon": "factory", "sort_order": 6, "children": [ {"name": "스크린 생산", "url": "/production/screen-production", "icon": "package", "sort_order": 1} ] }, { "name": "회계관리", "url": "/accounting", "icon": "calculator", "sort_order": 7, "children": [ {"name": "거래처관리", "url": "/accounting/vendors", "icon": "building-2", "sort_order": 1}, {"name": "거래처원장", "url": "/accounting/vendor-ledger", "icon": "file-text", "sort_order": 2}, {"name": "매출관리", "url": "/accounting/sales", "icon": "trending-up", "sort_order": 3}, {"name": "매입관리", "url": "/accounting/purchase", "icon": "trending-down", "sort_order": 4}, {"name": "세금계산서", "url": "/accounting/bills", "icon": "receipt", "sort_order": 5}, {"name": "입금관리", "url": "/accounting/deposits", "icon": "arrow-down-circle", "sort_order": 6}, {"name": "출금관리", "url": "/accounting/withdrawals", "icon": "arrow-up-circle", "sort_order": 7}, {"name": "은행거래", "url": "/accounting/bank-transactions", "icon": "landmark", "sort_order": 8}, {"name": "카드거래", "url": "/accounting/card-transactions", "icon": "credit-card", "sort_order": 9}, {"name": "미수금현황", "url": "/accounting/receivables-status", "icon": "alert-circle", "sort_order": 10}, {"name": "예상비용", "url": "/accounting/expected-expenses", "icon": "clock", "sort_order": 11}, {"name": "대손채권회수", "url": "/accounting/bad-debt-collection", "icon": "shield", "sort_order": 12}, {"name": "일일리포트", "url": "/accounting/daily-report", "icon": "file-bar-chart", "sort_order": 13}, {"name": "결제내역", "url": "/payment-history", "icon": "history", "sort_order": 14} ] }, { "name": "인사관리", "url": "/hr", "icon": "users", "sort_order": 8, "children": [ {"name": "직원관리", "url": "/hr/employee-management", "icon": "user", "sort_order": 1}, {"name": "부서관리", "url": "/hr/department-management", "icon": "building", "sort_order": 2}, {"name": "카드관리", "url": "/hr/card-management", "icon": "credit-card", "sort_order": 3}, {"name": "근태현황", "url": "/hr/attendance", "icon": "clock", "sort_order": 4}, {"name": "근태관리", "url": "/hr/attendance-management", "icon": "calendar-check", "sort_order": 5}, {"name": "급여관리", "url": "/hr/salary-management", "icon": "dollar-sign", "sort_order": 6}, {"name": "휴가관리", "url": "/hr/vacation-management", "icon": "calendar", "sort_order": 7} ] }, { "name": "리포트", "url": "/reports", "icon": "bar-chart-3", "sort_order": 9, "children": [ {"name": "종합분석", "url": "/reports/comprehensive-analysis", "icon": "pie-chart", "sort_order": 1} ] }, { "name": "고객센터", "url": "/customer-center", "icon": "headphones", "sort_order": 10, "children": [ {"name": "공지사항", "url": "/customer-center/notices", "icon": "megaphone", "sort_order": 1}, {"name": "FAQ", "url": "/customer-center/faq", "icon": "help-circle", "sort_order": 2}, {"name": "문의하기", "url": "/customer-center/inquiries", "icon": "message-circle", "sort_order": 3}, {"name": "이벤트", "url": "/customer-center/events", "icon": "calendar", "sort_order": 4} ] }, { "name": "설정", "url": "/settings", "icon": "settings", "sort_order": 11, "children": [ {"name": "계정정보", "url": "/settings/account-info", "icon": "user", "sort_order": 1}, {"name": "계정관리", "url": "/settings/accounts", "icon": "users", "sort_order": 2}, {"name": "권한관리", "url": "/settings/permissions", "icon": "shield", "sort_order": 3}, {"name": "직급관리", "url": "/settings/ranks", "icon": "award", "sort_order": 4}, {"name": "직책관리", "url": "/settings/titles", "icon": "badge", "sort_order": 5}, {"name": "근태설정", "url": "/settings/attendance-settings", "icon": "clock", "sort_order": 6}, {"name": "휴가정책", "url": "/settings/leave-policy", "icon": "calendar", "sort_order": 7}, {"name": "근무일정", "url": "/settings/work-schedule", "icon": "calendar-days", "sort_order": 8}, {"name": "알림설정", "url": "/settings/notification-settings", "icon": "bell", "sort_order": 9}, {"name": "팝업관리", "url": "/settings/popup-management", "icon": "layout", "sort_order": 10}, {"name": "회사정보", "url": "/company-info", "icon": "building", "sort_order": 11}, {"name": "구독관리", "url": "/subscription", "icon": "credit-card", "sort_order": 12} ] } ] ``` --- ## 4. 통계 요약 | 항목 | 값 | |------|-----| | 대메뉴 | 11개 | | 중메뉴 | 54개 | | 총 메뉴 | 65개 | | 권한 그룹 | 11개 | | 세부 권한 | 52개 | --- ## 5. 다음 단계 1. **GlobalMenuTemplateSeeder 업데이트**: JSON 데이터로 seeder 작성 2. **권한 테이블 업데이트**: permissions 테이블에 새 권한 추가 3. **React menuTransform.ts 업데이트**: 새 아이콘 매핑 추가 4. **테스트**: 메뉴 렌더링 및 권한 검증 --- *이 문서는 Phase 2 최종 산출물입니다.*