# Java-Service-Tree-Framework-Frontend-Web ## πŸ“‹ ν”„λ‘œμ νŠΈ κ°œμš” **A-RMS (Advanced Requirements Management System)** 의 ν”„λ‘ νŠΈμ—”λ“œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ, μš”κ΅¬μ‚¬ν•­ 관리, ALM 톡합, 데이터 뢄석 κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ μ‹œμŠ€ν…œμž…λ‹ˆλ‹€. ## πŸ› οΈ 기술 μŠ€νƒ ### μ½”μ–΄ 기술 - **ν”„λ ˆμž„μ›Œν¬**: jQuery 기반 + Vue.js 3 + React (λ°±μ˜€ν”ΌμŠ€) - **λΉŒλ“œ 도ꡬ**: - Grunt (λ ˆκ±°μ‹œ λͺ¨λ“ˆμš©) - Vite (λ°±μ˜€ν”ΌμŠ€ λͺ¨λ“ˆμš©) - Vue CLI - **CSS μ „μ²˜λ¦¬κΈ°**: LESS, SASS - **ν…œν”Œλ¦Ώ**: AdminLTE 2.x (Bootstrap 3 기반) - **νŒ¨ν‚€μ§€ λ§€λ‹ˆμ €**: NPM - **Node.js**: .node-version νŒŒμΌμ— λͺ…μ‹œ ### μ£Όμš” 라이브러리 **데이터 μ‹œκ°ν™”:** - D3.js v5.16.0 & v6.7.0 - ECharts v5.4.3 & v5.5.0 - C3.js v0.7.20 - Three.js r165 - Jit 2.0.1 **UI μ»΄ν¬λ„ŒνŠΈ:** - DataTables 1.10.16 (Responsive, Select, Buttons ν™•μž₯ 포함) - FullCalendar 6.1.15 - Gantt 0.6.1 - jKanban 1.3.1 - jsTree v.pre1.0 - jsPreadsheet CE 4.13.1 - Select2 4.0.2 - CKEditor 4.22.1 - Swiper 11.1.4 **기타:** - Vue 3.2.13 + Vue Router 4.0.3 - Bootstrap 5.3.8 - React 17.0.2 + Redux Toolkit - SockJS + Stomp.js (WebSocket) ## πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰 ``` Java-Service-Tree-Framework-Frontend-Web/ β”‚ β”œβ”€β”€ arms/ # 메인 A-RMS μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λͺ¨λ“ˆ β”‚ β”œβ”€β”€ css/ # μŠ€νƒ€μΌμ‹œνŠΈ β”‚ β”œβ”€β”€ html/ # HTML λͺ¨λ“ˆ ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ img/ # 이미지 및 μ•„μ΄μ½˜ β”‚ β”œβ”€β”€ js/ # JavaScript λͺ¨λ“ˆ (~33개 κΈ°λŠ₯ λͺ¨λ“ˆ) β”‚ β”œβ”€β”€ locales/ # λ‹€κ΅­μ–΄ 파일 (ko, en, jp) β”‚ β”œβ”€β”€ test/ # ν…ŒμŠ€νŠΈ λ¦¬μ†ŒμŠ€ β”‚ β”œβ”€β”€ template.html # 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ detail.html # 상세 λ·° ν…œν”Œλ¦Ώ β”‚ └── index.html # μ§„μž…μ  β”‚ β”œβ”€β”€ backoffice/ # React 기반 κ΄€λ¦¬μž λ°±μ˜€ν”ΌμŠ€ β”‚ β”œβ”€β”€ src/ # React μ†ŒμŠ€ β”‚ β”œβ”€β”€ dist/ # Vite λΉŒλ“œ 좜λ ₯ β”‚ β”œβ”€β”€ html/ # λ ˆκ±°μ‹œ HTML ν…œν”Œλ¦Ώ (~15개) β”‚ β”œβ”€β”€ js/ # λ ˆκ±°μ‹œ JavaScript (~15개) β”‚ β”œβ”€β”€ css/ # μŠ€νƒ€μΌμ‹œνŠΈ β”‚ β”œβ”€β”€ mock/ # 개발용 Mock 데이터 β”‚ β”œβ”€β”€ package.json # React + Vite μ˜μ‘΄μ„± β”‚ β”œβ”€β”€ vite.config.js # Vite μ„€μ • β”‚ └── template.html # κ΄€λ¦¬μž ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ cover/ # 곡개 μ›Ήμ‚¬μ΄νŠΈ/λžœλ”© νŽ˜μ΄μ§€ β”‚ β”œβ”€β”€ css/ # 컀버 νŽ˜μ΄μ§€ μŠ€νƒ€μΌ β”‚ β”œβ”€β”€ fonts/ # μ›Ή 폰트 β”‚ β”œβ”€β”€ html/ # 곡개 νŽ˜μ΄μ§€ ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ img/ # λ§ˆμΌ€νŒ… 이미지 β”‚ β”œβ”€β”€ js/ # κΈ°λŠ₯ 슀크립트 (~30개 λͺ¨λ“ˆ) β”‚ β”œβ”€β”€ template.html # 컀버 ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ index.html # λžœλ”© νŽ˜μ΄μ§€ μ§„μž…μ  β”‚ └── mail.html # 이메일 ν…œν”Œλ¦Ώ β”‚ β”œβ”€β”€ reference/ # μ„œλ“œνŒŒν‹° 라이브러리 및 ν”ŒλŸ¬κ·ΈμΈ β”‚ β”œβ”€β”€ bootstrap-3.4.1/ # Bootstrap ν”„λ ˆμž„μ›Œν¬ β”‚ β”œβ”€β”€ light-blue/ # Light Blue κ΄€λ¦¬μž ν…Œλ§ˆ β”‚ β”œβ”€β”€ lightblue4/ # Light Blue 4 ν…Œλ§ˆ β”‚ β”œβ”€β”€ jquery-plugins/ # 50개 μ΄μƒμ˜ jQuery ν”ŒλŸ¬κ·ΈμΈ β”‚ β”œβ”€β”€ drawio/ # λ‹€μ΄μ–΄κ·Έλž¨ 에디터 β”‚ β”œβ”€β”€ drawdb/ # λ°μ΄ν„°λ² μ΄μŠ€ λ””μžμ΄λ„ˆ β”‚ β”œβ”€β”€ gojs/ # λ‹€μ΄μ–΄κ·Έλž˜λ° 라이브러리 β”‚ └── three.js-r165/ # 3D κ·Έλž˜ν”½ β”‚ β”œβ”€β”€ file/ # λ¬Έμ„œ μ €μž₯μ†Œ β”œβ”€β”€ node_modules/ # NPM μ˜μ‘΄μ„± β”œβ”€β”€ .github/workflows/ # CI/CD μžλ™ν™” β”‚ β”œβ”€β”€ Gruntfile.js # Grunt λΉŒλ“œ μ„€μ • β”œβ”€β”€ package.json # 루트 νŒ¨ν‚€μ§€ μ„€μ • β”œβ”€β”€ index.html # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ§„μž… λΌμš°ν„° β”œβ”€β”€ manifest.json # PWA λ§€λ‹ˆνŽ˜μŠ€νŠΈ β”œβ”€β”€ robots.txt # SEO μ„€μ • β”œβ”€β”€ sitemap.xml # μ‚¬μ΄νŠΈ ꡬ쑰 β”œβ”€β”€ .prettierrc # μ½”λ“œ ν¬λ§·νŒ… κ·œμΉ™ └── κ°œλ°œκ·œμΉ™.txt # 개발 μ»¨λ²€μ…˜ (ν•œκ΅­μ–΄) ``` ## πŸ—οΈ μ•„ν‚€ν…μ²˜ ### 섀계 νŒ¨ν„΄ 1. **λͺ¨λ“ˆ νŒ¨ν„΄**: 각 κΈ°λŠ₯이 독립적인 JavaScript 파일둜 μΊ‘μŠν™” 2. **동적 λ‘œλ”© νŒ¨ν„΄**: URL 쿼리 νŒŒλΌλ―Έν„° 기반 νŽ˜μ΄μ§€ λ‘œλ”© 3. **ν…œν”Œλ¦Ώ-μ½˜ν…μΈ  뢄리**: HTML ν…œν”Œλ¦Ώκ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 뢄리 4. **ν”ŒλŸ¬κ·ΈμΈ 기반 μ•„ν‚€ν…μ²˜**: μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό μœ„ν•œ jQuery ν”ŒλŸ¬κ·ΈμΈ ν™œμš© 5. **ν”„λ‘μ‹œ νŒ¨ν„΄**: Grunt/Vite 개발 μ„œλ²„κ°€ API ν˜ΈμΆœμ„ λ°±μ—”λ“œ μ„œλΉ„μŠ€λ‘œ ν”„λ‘μ‹œ ### μ§„μž…μ  흐름 ``` index.html (λΌμš°ν„°) ↓ [도메인/ν™˜κ²½ 감지] ↓ β”œβ”€β”€ localhost/127.0.0.1 β†’ /arms/template.html?page=dashboard β”œβ”€β”€ 313.co.kr β†’ /cover/template.html?page=landing └── arms/고객 도메인 β†’ /cover/template.html?page=landing ``` ### 인증 및 κΆŒν•œ - **μ—­ν•  기반 μ ‘κ·Ό μ œμ–΄**: ROLE_USER, ROLE_MANAGER, ROLE_ADMIN - **OAuth2/SSO 톡합**: 미듀웨어 ν”„λ‘μ‹œλ₯Ό ν†΅ν•œ 연동 - **κΆŒν•œ 기반 메뉴 ν‘œμ‹œ**: μ‚¬μš©μž κΆŒν•œμ— λ”°λ₯Έ 메뉴 μ œμ–΄ - **토큰 기반 인증**: JWT ### API 톡신 - jQuery AJAX (λ ˆκ±°μ‹œ λͺ¨λ“ˆμš©) - RESTful API μ—”λ“œν¬μΈνŠΈ ν”„λ‘μ‹œ: - **포트 13131**: 인증 μ—”λ“œν¬μΈνŠΈ (/auth-user, /auth-admin, /auth-check λ“±) - **포트 31113**: WebSocket 및 API μ—”λ“œν¬μΈνŠΈ (/ws, /api) - **DWR (Direct Web Remoting)**: μ‹€μ‹œκ°„ 톡신 ## 🎯 μ£Όμš” κΈ°λŠ₯ λͺ¨λ“ˆ ### ARMS λͺ¨λ“ˆ (메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜) - 33개 이상 κΈ°λŠ₯ λͺ¨λ“ˆ #### μ œν’ˆ 관리 - `pdService.js` - μ œν’ˆ/μ„œλΉ„μŠ€ 관리 - `pdServiceVersion.js` - 버전 관리 #### ALM (Application Lifecycle Management) - `jiraServer.js` - Jira μ„œλ²„ 톡합 - `jiraConnection.js` - Jira μ—°κ²° - `mailServer.js` - 이메일 μ„œλ²„ μ„€μ • #### μš”κ΅¬μ‚¬ν•­ 관리 - `reqAdd.js` - μš”κ΅¬μ‚¬ν•­ μΆ”κ°€ - `reqStatus.js` - μƒνƒœ 좔적 (λͺ©λ‘ λ·°) - `reqStatusCalendar.js` - 달λ ₯ λ·° - `reqGantt.js` - κ°„νŠΈ 차트 λ·° - `reqKanban.js` - 칸반 λ³΄λ“œ λ·° - `mapping.js` - μš”κ΅¬μ‚¬ν•­ λ§€ν•‘ #### 뢄석 도ꡬ (4차원) - `analysisTime.js` - μ‹œκ°„ 뢄석 - `analysisScope.js` - λ²”μœ„ 뢄석 - `analysisResource.js` - μžμ› 뢄석 - `analysisCost.js` - λΉ„μš© 뢄석 #### λ¦¬ν¬νŒ… - `reportFullData.js` - μ’…ν•© 리포트 - `reportSWOT.js` - SWOT 뢄석 - `reportReqStatus.js` - μš”κ΅¬μ‚¬ν•­ μƒνƒœ 리포트 - `reportAlmProject.js` - ALM ν”„λ‘œμ νŠΈ 리포트 #### 특수 κΈ°λŠ₯ - `dashboard.js` - μ°¨νŠΈκ°€ ν¬ν•¨λœ 메인 λŒ€μ‹œλ³΄λ“œ - `searchEngine.js` - 검색 κΈ°λŠ₯ - `aiChat.js` - AI μ±— 톡합 - `devtools.js` - 개발자 도ꡬ - `swotSheet.js` - SWOT μ‹œνŠΈ νŽΈμ§‘κΈ° ### Backoffice λͺ¨λ“ˆ (κ΄€λ¦¬μž κΈ°λŠ₯) - 15개 이상 λͺ¨λ“ˆ - μ ‘κ·Ό μ œμ–΄ 관리 - λ³΄μ•ˆ (μ‚¬μš©μž, κ·Έλ£Ή, μ—­ν• ) - μ‹œμŠ€ν…œ 정보 및 λͺ¨λ‹ˆν„°λ§ - 감사 둜그 - λ°±μ—… 및 볡원 - μ–Έμ–΄ μ„€μ • (i18n) - μŠ€μΌ€μ€„ μ„€μ • (Cron μž‘μ—…) - 이메일/SMTP μ„€μ • - 메일 리포트 μ„€μ • - Elasticsearch 인덱슀 μ„€μ • - 동적 μ„€μ • - 인보이슀 및 청ꡬ - μ™Έκ΄€ μ„€μ • - νœ΄κ°€ 관리 ### Cover λͺ¨λ“ˆ (곡개 μ›Ήμ‚¬μ΄νŠΈ) - 30개 이상 νŽ˜μ΄μ§€ - Three.js 3D κΈ€λ‘œλΈŒκ°€ μžˆλŠ” λžœλ”© νŽ˜μ΄μ§€ - 에디터가 ν¬ν•¨λœ λΈ”λ‘œκ·Έ μ‹œμŠ€ν…œ - 에디터가 ν¬ν•¨λœ κ²½ν—˜/사둀 연ꡬ - λ‰΄μŠ€λ ˆν„° 관리 - 패치 λ…ΈνŠΈ/릴리슀 λ…ΈνŠΈ - FAQ 및 Q&A - μ œν’ˆ 문의 양식 - μ •μ±… 및 κ°œμΈμ •λ³΄ 보호 νŽ˜μ΄μ§€ - κΈ°μ—¬μž 및 λΌμ΄μ„ μŠ€ - POC (Proof of Concept) μš”μ²­ μ‹œμŠ€ν…œ ## βš™οΈ μ„€μ • 파일 ### λΉŒλ“œ 및 개발 - **Gruntfile.js** - 메인 λΉŒλ“œ μ˜€μΌ€μŠ€νŠΈλ ˆμ΄μ…˜ (LESS 컴파일, JS λ²ˆλ“€λ§, ν”„λ‘μ‹œκ°€ ν¬ν•¨λœ 개발 μ„œλ²„, watch νƒœμŠ€ν¬) - **package.json** - 루트 μ˜μ‘΄μ„±, 슀크립트 (dev: grunt server, arms: Vue serve, devops: Vue serve) - **backoffice/vite.config.js** - Vite 개발 μ„œλ²„ (포트 3000), ν”„λ‘μ‹œ μ„€μ •, SCSS μ „μ²˜λ¦¬, 경둜 별칭 ### μ½”λ“œ ν’ˆμ§ˆ - **.prettierrc** - μ½”λ“œ ν¬λ§·νŒ… (νƒ­, λ„ˆλΉ„ 120, snake_case μ„ ν˜Έ) - **.eslintrc.cjs** - JavaScript λ¦°νŒ… κ·œμΉ™ (λ°±μ˜€ν”ΌμŠ€) - **κ°œλ°œκ·œμΉ™.txt** - νŒ€ μ»¨λ²€μ…˜ (snake_case, 색상 μ½”λ”©, 속성 ν¬λ§·νŒ…) ### λ‹€κ΅­μ–΄ν™” - **arms/locales/ko.json** - ν•œκ΅­μ–΄ λ²ˆμ—­ - **arms/locales/en.json** - μ˜μ–΄ λ²ˆμ—­ - **arms/locales/jp.json** - 일본어 λ²ˆμ—­ ### CI/CD - **.travis.yml** - Travis CI μ„€μ • - **.github/workflows/release-drafter.yml** - μžλ™ 릴리슀 λ…ΈνŠΈ ### μ›Ή μ„€μ • - **manifest.json** - PWA μ„€μ • - **robots.txt** - 검색 μ—”μ§„ μ§€μ‹œμ‚¬ν•­ - **sitemap.xml** - SEOλ₯Ό μœ„ν•œ μ‚¬μ΄νŠΈ ꡬ쑰 ## 🎨 개발 μ»¨λ²€μ…˜ ### 넀이밍 κ·œμΉ™ - **snake_case** μ‚¬μš© (ν”„λ‘ νŠΈμ—”λ“œ) - **첫 κΈ€μž λŒ€λ¬Έμž, 이후 λŒ€λ¬ΈμžλŠ” "_"둜 ꡬ뢄** - **HTML 속성**: ν•œ 쀄에 ν•˜λ‚˜μ”© 수직 ν¬λ§·νŒ… ### 색상 μ½”λ”© - **νŒŒλž€μƒ‰ λ²„νŠΌ**: 생성/μΆ”κ°€ μž‘μ—… - **μ΄ˆλ‘μƒ‰ λ²„νŠΌ**: μˆ˜μ •/μ €μž₯ μž‘μ—… - **빨간색 λ²„νŠΌ**: μ‚­μ œ μž‘μ—… - **주황색 λ²„νŠΌ**: 선택/ꡬ뢄 - **데이터 ν…μŠ€νŠΈ 색상**: #a4c6ff (데이터 ν‘œμ‹œμš© μ—°ν•œ νŒŒλž€μƒ‰) ### λͺ¨λ“ˆ ꡬ쑰 νŒ¨ν„΄ ```javascript // 곡톡 λͺ¨λ“ˆ ꡬ쑰 var moduleVariables; function execDocReady() { // 그룹별 ν”ŒλŸ¬κ·ΈμΈ λ‘œλ”© var pluginGroups = [[/*css*/], [/*js*/], [/*more*/]]; // ν”ŒλŸ¬κ·ΈμΈ 순차 λ‘œλ“œ // UI μ»΄ν¬λ„ŒνŠΈ μ΄ˆκΈ°ν™” // 이벀트 ν•Έλ“€λŸ¬ 바인딩 // 초기 데이터 λ‘œλ“œ } ``` ### API 톡신 νŒ¨ν„΄ ```javascript // μ€‘μ•™ν™”λœ AJAX μ„€μ • ajax_setup(); // μΌκ΄€λœ μ—λŸ¬ 핸듀링 $.ajax({ url: "/auth-user/api/...", type: "GET", success: function(data) {}, error: function(error) {} }); ``` ## πŸš€ λΉŒλ“œ 및 μ‹€ν–‰ ### 개발 μ„œλ²„ μ‹€ν–‰ ```bash # Grunt 개발 μ„œλ²„ (포트 9000) npm run dev # λ˜λŠ” grunt server # Vue Arms μ„œλΉ„μŠ€ npm run arms # DevOps Vue μ„œλΉ„μŠ€ npm run devops # Backoffice Vite μ„œλ²„ (포트 3000) cd backoffice npm run dev ``` ### λΉŒλ“œ ```bash # Grunt λΉŒλ“œ grunt build # Backoffice λΉŒλ“œ cd backoffice npm run build ``` ## πŸ“Š ν”„λ‘œμ νŠΈ 톡계 - **227개** HTML 파일 (node_modules 및 reference μ œμ™Έ) - **148개** JavaScript 파일 (node_modules 및 reference μ œμ™Έ) - **33개 이상** ARMS κΈ°λŠ₯ λͺ¨λ“ˆ - **50개 이상** jQuery ν”ŒλŸ¬κ·ΈμΈ - **3개** μ£Όμš” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ„Ήμ…˜ (arms, backoffice, cover) ## πŸ’‘ μ£Όμš” νŠΉμ§• 1. **ν•˜μ΄λΈŒλ¦¬λ“œ μ•„ν‚€ν…μ²˜**: λ ˆκ±°μ‹œ jQuery와 μ΅œμ‹  Vue.js/Reactλ₯Ό ν˜Όν•©ν•˜μ—¬ 점진적 ν˜„λŒ€ν™” 2. **λͺ¨λ…Έλ¦¬ν‹± ν”„λ‘ νŠΈμ—”λ“œ**: μ‰¬μš΄ 배포λ₯Ό μœ„ν•΄ λͺ¨λ“  λͺ¨λ“ˆμ΄ 단일 μ €μž₯μ†Œμ— 포함 3. **κ΄‘λ²”μœ„ν•œ μ°Έμ‘° 라이브러리**: 자체 ν¬ν•¨λœ μ„œλ“œνŒŒν‹° μ˜μ‘΄μ„± (λͺ¨λ‘ NPM을 ν†΅ν•˜μ§€ μ•ŠμŒ) 4. **λ©€ν‹°ν…Œλ„ŒνŠΈ 지원**: λ‹€μ–‘ν•œ 고객 배포λ₯Ό μœ„ν•œ 도메인 기반 λΌμš°νŒ… 5. **μ—­ν•  기반 UI**: μ‚¬μš©μž κΆŒν•œμ— λ”°λ₯Έ 동적 메뉴 생성 6. **μ’…ν•© μ‹œκ°ν™”**: μ—”ν„°ν”„λΌμ΄μ¦ˆκΈ‰ 차트 및 λ‹€μ΄μ–΄κ·Έλž˜λ° κΈ°λŠ₯ 7. **λ‹€κ΅­μ–΄ 지원**: λ‹€κ΅­μ–΄ 지원 μ€€λΉ„ (ν•œκ΅­μ–΄, μ˜μ–΄, 일본어) 8. **개발자 μΉœν™”μ **: λ“€μ–Ό λΉŒλ“œ μ‹œμŠ€ν…œ (λ ˆκ±°μ‹œμš© Grunt, μ΅œμ‹ μš© Vite) ## πŸ” 인증 흐름 ```javascript authUserCheck() β†’ μ‚¬μš©μž μ„Έμ…˜ 검증 β†’ κΆŒν•œ λ°°μ—΄ μ„€μ • β†’ 역할에 λ”°λ₯Έ menu_setting() β†’ μ μ ˆν•œ λͺ¨λ“ˆ λ‘œλ“œ ``` ## 🌍 λ‹€κ΅­μ–΄ν™” νŒ¨ν„΄ ```javascript // λ™μ μœΌλ‘œ λ‘œλ“œλ˜λŠ” μ–Έμ–΄ 팩 currentLanguagePack = { language: 'ko', languagePack: {...} }; // μ„ νƒλœ λ‘œμΌ€μΌμ— 따라 UI μš”μ†Œ μ—…λ°μ΄νŠΈ ``` ## πŸ“ 개발 ν™˜κ²½ 감지 ```javascript // 도메인에 λ”°λ₯Έ λ‹€λ₯Έ λ™μž‘ if (localhost || 127.0.0.1) { // 개발 λͺ¨λ“œ β†’ ARMS λŒ€μ‹œλ³΄λ“œ } else if (313.co.kr) { // νšŒμ‚¬ μ›Ήμ‚¬μ΄νŠΈ β†’ Cover λžœλ”© νŽ˜μ΄μ§€ } else { // 고객 도메인 β†’ Cover λžœλ”© νŽ˜μ΄μ§€ } ``` ## πŸ“„ λΌμ΄μ„ μŠ€ ν”„λ‘œμ νŠΈ λΌμ΄μ„ μŠ€ μ •λ³΄λŠ” ν”„λ‘œμ νŠΈμ˜ LICENSE νŒŒμΌμ„ μ°Έμ‘°ν•˜μ„Έμš”. ## πŸ‘₯ κΈ°μ—¬ κΈ°μ—¬ κ°€μ΄λ“œλΌμΈμ€ ν”„λ‘œμ νŠΈμ˜ CONTRIBUTING λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. --- **생성일**: 2025-11-20 **ν”„λ‘œμ νŠΈ**: A-RMS (Advanced Requirements Management System) **μ €μž₯μ†Œ**: Java-Service-Tree-Framework-Frontend-Web