Files
iDRAC_Info/.gemini/artifacts/guid_slot_multiple_counts.md
2026-01-20 20:47:45 +09:00

9.2 KiB

GUID 슬롯 우선순위 - 다양한 슬롯 개수 지원 (최종 업데이트)

📋 업데이트 내용

슬롯 개수가 2개, 4개, 10개 등 다양한 서버 모델에 대응할 수 있도록 슬롯 개수 선택 기능을 추가했습니다.

새로운 기능

1. 슬롯 개수 프리셋 선택

모달창에서 서버 모델에 맞는 슬롯 개수를 선택할 수 있습니다:

  • 2 슬롯: 38, 37 (2슬롯 서버 모델)
  • 4 슬롯: 38, 37, 32, 34 (4슬롯 서버 모델)
  • 10 슬롯: 31 ~ 40 전체 (10슬롯 서버 모델)

2. 동적 슬롯 리스트

  • 선택한 개수만큼만 슬롯이 표시됨
  • 불필요한 슬롯 표시 제거로 혼란 방지
  • 각 프리셋별로 최적화된 기본 순서 제공

3. 로컬 스토리지 확장

  • 슬롯 개수순서 모두 저장
  • 다음 방문 시 마지막 설정 자동 복원
  • 프리셋 변경 시 해당 개수의 기본 순서로 초기화

🎨 UI 개선 사항

슬롯 개수 선택 버튼

┌─────────────────────────────────────────────┐
│  [2 슬롯]  [4 슬롯]  [10 슬롯] ← 버튼 그룹  │
│  38, 37    38,37,    31 ~ 40               │
│            32,34                            │
└─────────────────────────────────────────────┘

슬롯 순서 헤더

슬롯 순서 [2개]  ← 현재 선택된 개수 표시
         [4개]
         [10개]

📊 동작 예시

시나리오 1: 2슬롯 서버

1. 모달 열기
   ↓
2. "2 슬롯" 버튼 클릭
   ↓
3. 슬롯 리스트에 Slot 38, 37만 표시
   ↓
4. 드래그로 순서 변경 (예: 37, 38)
   ↓
5. 확인 버튼 클릭
   ↓
6. txt 파일:
   Slot.37: xxx
   Slot.38: yyy
   GUID: 0xXXX;0xYYY

시나리오 2: 4슬롯 서버

1. 모달 열기
   ↓
2. "4 슬롯" 버튼 클릭
   ↓
3. 슬롯 리스트에 38, 37, 32, 34 표시
   ↓
4. 원하는 순서로 드래그 (예: 32, 34, 37, 38)
   ↓
5. txt 파일:
   Slot.32: aaa
   Slot.34: bbb
   Slot.37: ccc
   Slot.38: ddd
   GUID: 0xAAA;0xBBB;0xCCC;0xDDD

시나리오 3: 10슬롯 서버 (기본)

1. 모달 열기 (10슬롯이 기본 선택됨)
   ↓
2. 슬롯 31~40 모두 표시
   ↓
3. 기본 순서: 38, 39, 37, 36, 32, 33, 34, 35, 31, 40
   ↓
4. 드래그로 자유롭게 순서 조정

🔧 기술 구현

JavaScript - 슬롯 프리셋

// 슬롯 개수별 기본 순서 프리셋
const slotPresets = {
  2: ['38', '37'],
  4: ['38', '37', '32', '34'],
  10: ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40']
};

let currentSlotCount = 10; // 기본값
let currentSlotOrder = [...slotPresets[10]];

슬롯 개수 변경 이벤트

document.querySelectorAll('input[name="slotCount"]').forEach(radio => {
  radio.addEventListener('change', function() {
    const newCount = parseInt(this.value);
    if (newCount !== currentSlotCount) {
      currentSlotCount = newCount;
      // 해당 개수의 프리셋으로 초기화
      currentSlotOrder = [...slotPresets[currentSlotCount]];
      // UI 업데이트
      updateSlotCountBadge();
      renderSlotList();
      initSortable();
      saveSlotConfigToStorage();
    }
  });
});

로컬 스토리지 저장/불러오기

// 저장
function saveSlotConfigToStorage() {
  localStorage.setItem('guidSlotCount', currentSlotCount.toString());
  localStorage.setItem('guidSlotPriority', JSON.stringify(currentSlotOrder));
}

// 불러오기
function loadSlotConfigFromStorage() {
  const savedCount = localStorage.getItem('guidSlotCount');
  const savedOrder = localStorage.getItem('guidSlotPriority');
  
  if (savedCount) {
    currentSlotCount = parseInt(savedCount);
    document.getElementById(`slotCount${currentSlotCount}`).checked = true;
  }
  
  if (savedOrder) {
    currentSlotOrder = JSON.parse(savedOrder);
  } else {
    // 저장된 순서 없으면 프리셋 사용
    currentSlotOrder = [...slotPresets[currentSlotCount]];
  }
}

🎯 백엔드 호환성

백엔드 스크립트들은 이미 유연하게 구현되어 있습니다:

PortGUID_v1.py

# 환경변수에서 슬롯 우선순위 읽기
slot_priority_str = os.getenv("GUID_SLOT_PRIORITY", "")

if slot_priority_str:
    # 사용자 지정 순서 (2개든 4개든 10개든 모두 처리)
    desired_order = [s.strip() for s in slot_priority_str.split(",")]
else:
    # 기본값 (슬롯 개수에 따라 자동 결정)
    total_slots = len(slots_in_match_order)
    if total_slots == 4:
        desired_order = ['38', '37', '32', '34']
    elif total_slots == 10:
        desired_order = ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40']
    else:
        desired_order = slots_in_match_order

# 존재하는 슬롯만 처리
for s in desired_order:
    guid = slot_to_guid.get(s, "Not Found")
    if guid != "Not Found":  # 존재하는 슬롯만
        f.write(f"Slot.{s}: {guid}\n")
        hex_guid_list.append(f"0x{guid.replace(':', '').upper()}")

GUIDtxtT0Execl.py

# 슬롯 우선순위에 따라 데이터 재정렬
for slot_num in SLOT_PRIORITY:
    slot_key = f"Slot.{slot_num}"
    if slot_key in parsed_data:  # txt 파일에 존재하는 슬롯만
        reordered_data[slot_key] = parsed_data[slot_key]

💡 핵심 특징

1. 유연성

  • 2슬롯, 4슬롯, 10슬롯 모두 지원
  • 커스텀 슬롯 개수도 확장 가능
  • 존재하지 않는 슬롯은 자동으로 스킵

2. 사용자 편의성

  • 한 번에 한 가지 프리셋만 선택
  • 프리셋 변경 시 즉시 UI 업데이트
  • 기본값 복원 시 현재 프리셋의 기본 순서로 복원

3. 일관성

  • 모든 GUID 관련 작업에서 동일한 슬롯 개수/순서 적용
  • 로컬 스토리지로 설정 유지
  • 환경변수로 백엔드까지 일관되게 전달

4. 확장성

  • 새로운 프리셋 추가 용이
    const slotPresets = {
      2: ['38', '37'],
      4: ['38', '37', '32', '34'],
      6: ['38', '39', '37', '36', '32', '34'],  // 새로운 프리셋 추가
      10: ['38', '39', '37', '36', '32', '33', '34', '35', '31', '40']
    };
    

⚠️ 주의사항

1. 프리셋 변경 시

  • 기존에 드래그로 조정한 순서는 초기화됩니다
  • 프리셋의 기본 순서로 리셋됨
  • 필요시 다시 드래그로 조정 가능

2. 슬롯 번호 제한

  • 현재는 31~40 범위 내의 슬롯만 지원
  • 다른 범위 슬롯 필요 시 프리셋 추가 필요

3. 하위 호환성

  • 환경변수가 없으면 스크립트가 자동으로 슬롯 개수 감지
  • 기존 txt 파일도 정상 처리됨

🚀 향후 개선 방안

1. 커스텀 슬롯 입력

  • 프리셋 외에 직접 슬롯 번호 입력 가능
  • 예: "32, 33, 38, 39" 입력

2. 자동 감지

  • 업로드된 txt 파일에서 실제 존재하는 슬롯 자동 감지
  • 감지된 슬롯만 모달에 표시

3. 프리셋 관리

  • 사용자 정의 프리셋 저장
  • 프로젝트별/서버별 프리셋 관리

4. 일괄 적용

  • 여러 서버에 동일한 설정 적용
  • 프리셋 템플릿 공유 기능

📝 사용 예시

예제 1: 2슬롯 서버 (간단한 구성)

모달에서 "2 슬롯" 선택
순서: 38 → 37 (기본값 유지)

결과 txt 파일:
ABC1234
Slot.38: 00:11:22:33:44:55:66:77
Slot.37: 11:22:33:44:55:66:77:88
GUID: 0x0011223344556677;0x1122334455667788

예제 2: 4슬롯 서버 + 순서 커스터마이징

모달에서 "4 슬롯" 선택
순서 변경: 32, 34, 37, 38 (드래그로 조정)

결과 txt 파일:
ABC1234
Slot.32: AA:BB:CC:DD:EE:FF:00:11
Slot.34: BB:CC:DD:EE:FF:00:11:22
Slot.37: CC:DD:EE:FF:00:11:22:33
Slot.38: DD:EE:FF:00:11:22:33:44
GUID: 0xAABBCCDDEEFF0011;0xBBCCDDEEFF001122;0xCCDDEEFF00112233;0xDDEEFF0011223344

예제 3: 10슬롯 서버 (역순 정렬)

모달에서 "10 슬롯" 선택 (기본값)
순서 변경: 40, 31, 35, 34, 33, 32, 36, 37, 39, 38

결과: 지정한 순서대로 txt 파일 생성

테스트 체크리스트

  • 2슬롯 프리셋 선택 및 표시
  • 4슬롯 프리셋 선택 및 표시
  • 10슬롯 프리셋 선택 및 표시 (기본)
  • 프리셋 변경 시 슬롯 리스트 업데이트
  • 슬롯 개수 배지 동적 업데이트
  • 드래그 앤 드롭 정상 동작
  • 로컬 스토리지에 개수+순서 저장
  • 페이지 새로고침 후 설정 복원
  • 기본값 복원 버튼 (현재 프리셋 기준)
  • 백엔드 환경변수 전달
  • txt 파일 순서 적용
  • 엑셀 컬럼 순서 적용
  • GUID 합치기 순서 적용

🎉 결과

이제 모든 슬롯 개수의 서버에 대응할 수 있습니다!

2슬롯 서버 → "2 슬롯" 선택 → 38, 37만 표시 ✅
4슬롯 서버 → "4 슬롯" 선택 → 38, 37, 32, 34 표시 ✅
10슬롯 서버 → "10 슬롯" 선택 → 31~40 모두 표시 ✅

각 프리셋별로 최적화된 기본 순서가 제공되며, 사용자는 드래그로 자유롭게 순서를 조정할 수 있습니다!

완벽한 유연성과 확장성을 갖춘 GUID 슬롯 관리 시스템 완성! 🚀