# GUID 엑셀 변환 시 슬롯 우선순위 설정 기능 구현 ## 📋 개요 GUID to Excel 버튼 클릭 시 슬롯 우선순위(slot 31~40)를 사용자가 직접 지정할 수 있는 모달창을 추가하여, 지정된 순서대로 엑셀 파일에 저장되도록 기능을 구현했습니다. ## ✨ 주요 기능 ### 1. **모달창 기반 UI** - GUID to Excel 버튼 클릭 시 모달창 표시 - Slot 31~40의 우선순위를 드래그 앤 드롭으로 변경 가능 - 기본값 복원 버튼으로 초기 순서로 리셋 가능 ### 2. **드래그 앤 드롭 인터페이스** - **SortableJS** 라이브러리 사용 - 직관적인 슬롯 순서 조정 - 실시간으로 순위 번호 업데이트 ### 3. **백엔드 처리** - 사용자가 지정한 슬롯 순서를 환경변수로 전달 - `GUIDtxtT0Execl.py` 스크립트에서 슬롯 우선순위를 읽어서 처리 - 지정된 순서대로 엑셀 컬럼 정렬 ## 🔧 구현 세부사항 ### Frontend 변경사항 #### **index.html** **모달창 추가:** ```html ``` **JavaScript 로직:** - `SortableJS` 라이브러리를 사용하여 드래그 앤 드롭 구현 - 기본 슬롯 순서: `['38', '39', '37', '36', '32', '33', '34', '35', '31', '40']` - 폼 제출 시 슬롯 순서를 콤마로 구분된 문자열로 전달 ### Backend 변경사항 #### **utilities.py** ```python @utils_bp.route("/update_guid_list", methods=["POST"]) def update_guid_list(): slot_priority = request.form.get("slot_priority", "") # 환경변수로 슬롯 우선순위 전달 env = os.environ.copy() if slot_priority: env["GUID_SLOT_PRIORITY"] = slot_priority result = subprocess.run( [sys.executable, "GUIDtxtT0Execl.py"], env=env, # 환경변수 전달 ... ) ``` #### **GUIDtxtT0Execl.py** ```python # 환경변수에서 슬롯 우선순위 읽기 slot_priority_str = os.getenv("GUID_SLOT_PRIORITY", "") if slot_priority_str: SLOT_PRIORITY = [s.strip() for s in slot_priority_str.split(",")] else: # 기본 우선순위 SLOT_PRIORITY = ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40'] # 데이터 재정렬 for slot_num in SLOT_PRIORITY: slot_key = f"Slot.{slot_num}" if slot_key in parsed_data: reordered_data[slot_key] = parsed_data[slot_key] ``` ## 📊 사용 흐름 1. **서버 리스트 입력**: 텍스트 영역에 서버 목록 입력 2. **GUID to Excel 버튼 클릭**: 모달창 표시 3. **슬롯 우선순위 설정**: 드래그 앤 드롭으로 순서 변경 4. **확인 버튼 클릭**: 설정된 순서로 엑셀 생성 5. **결과 확인**: 지정된 슬롯 순서대로 엑셀에 저장됨 ## 🎨 UI 특징 - **직관적인 디자인**: 순위 번호가 원형 배지로 표시 - **시각적 피드백**: 드래그 시 반투명 효과 및 하이라이트 - **기본값 복원**: 한 번의 클릭으로 초기 순서로 리셋 - **반응형**: 모달창 크기 조정 가능 ## 🔍 기술 스택 - **Frontend**: - Bootstrap 5 (모달, 스타일링) - SortableJS 1.15.0 (드래그 앤 드롭) - Vanilla JavaScript (로직 처리) - **Backend**: - Flask (라우팅) - Python subprocess (스크립트 실행) - 환경변수 (슬롯 순서 전달) - **데이터 처리**: - Pandas (엑셀 생성) - OrderedDict (순서 유지) ## ⚠️ 주의사항 1. **서버 리스트 필수**: 모달 열기 전에 서버 리스트를 입력해야 함 2. **슬롯 개수**: 현재는 10개 슬롯(31~40) 기준으로 구현 3. **호환성**: 기존 *.txt 파일 형식과 호환됨 ## 🚀 향후 개선 방안 1. **동적 슬롯 개수**: txt 파일에서 실제 존재하는 슬롯만 표시 2. **프리셋 저장**: 자주 사용하는 슬롯 순서를 프리셋으로 저장 3. **일괄 적용**: 여러 서버에 동일한 슬롯 순서 적용 4. **검증 강화**: 슬롯 번호 유효성 검사 추가 ## ✅ 테스트 시나리오 1. ✓ 모달창 정상 표시 2. ✓ 드래그 앤 드롭 동작 확인 3. ✓ 기본값 복원 버튼 동작 4. ✓ 슬롯 순서가 백엔드로 정상 전달 5. ✓ 엑셀 파일에 순서대로 저장 6. ✓ 환경변수 전달 확인 7. ✓ 기본 순서 동작 (슬롯 우선순위 미지정 시) ## 📝 관련 파일 - `backend/templates/index.html` - 모달 UI 및 JavaScript - `backend/routes/utilities.py` - 백엔드 라우트 처리 - `data/server_list/GUIDtxtT0Execl.py` - 엑셀 생성 로직