# iDRAC Info Manager

Dell iDRAC 서버 관리 및 펌웨어 업데이트 자동화를 위한 Flask 기반 웹 애플리케이션

## 📋 목차

- [소개](#소개)
- [주요 기능](#주요-기능)
- [기술 스택](#기술-스택)
- [시스템 아키텍처](#시스템-아키텍처)
- [시작하기](#시작하기)
- [프로젝트 구조](#프로젝트-구조)
- [사용법](#사용법)
- [고급 기능](#고급-기능)
- [Git 사용법](#git-사용법)
- [문제 해결](#문제-해결)
- [라이선스](#라이선스)

## 📖 소개

**iDRAC Info Manager**는 Dell iDRAC(Integrated Dell Remote Access Controller) 서버를 효율적으로 관리하고 펌웨어 업데이트를 자동화하기 위한 웹 기반 도구입니다. 

이 애플리케이션은 다음과 같은 시나리오에서 유용합니다:
- 여러 대의 Dell 서버를 동시에 관리해야 할 때
- 펌웨어 카탈로그를 주기적으로 업데이트하고 관리해야 할 때
- iDRAC 설정을 XML 파일로 관리하고 배포해야 할 때
- 서버 하드웨어 정보(MAC, GUID, GPU 등)를 수집하고 관리해야 할 때
- Telegram을 통해 서버 관리 알림을 받고 싶을 때

## ✨ 주요 기능

### 🖥️ iDRAC 서버 관리
- **Redfish API 통합**: Dell Redfish API를 통한 서버 정보 조회 및 제어
- **다중 IP 처리**: 여러 서버에 대한 일괄 작업 실행
- **실시간 모니터링**: SocketIO를 통한 실시간 작업 진행 상황 확인
- **작업 큐 관리**: 백그라운드 작업 스케줄링 및 상태 추적

### 📦 펌웨어 관리
- **Dell 카탈로그 동기화**: Dell 공식 펌웨어 카탈로그 자동 다운로드 및 파싱
- **DRM 통합**: Dell Repository Manager(DRM) XML 파일 지원
- **펌웨어 버전 추적**: 서버별 펌웨어 버전 비교 및 업데이트 필요 여부 확인
- **카탈로그 관리**: 여러 펌웨어 카탈로그 버전 관리 및 전환

### 📄 XML 설정 관리
- **XML 파일 업로드**: iDRAC 설정 XML 파일 업로드 및 저장
- **설정 편집**: 웹 인터페이스를 통한 XML 설정 편집
- **SCP 파일 관리**: Server Configuration Profile 파일 관리
- **자동 백업**: 파일 변경 시 자동 백업 생성

### 📊 데이터 수집 및 변환
- **MAC 주소 수집**: 서버 네트워크 인터페이스 MAC 주소 수집
- **GUID 추출**: 서버 GUID 정보 추출 및 관리
- **GPU 시리얼 수집**: GPU 하드웨어 시리얼 번호 수집
- **Excel 변환**: 수집된 데이터를 Excel 파일로 자동 변환
- **서버 리스트 관리**: 서버 목록 관리 및 매핑

### 👥 사용자 관리
- **인증 시스템**: Flask-Login 기반 보안 인증
- **사용자 승인 워크플로우**: 신규 사용자 등록 시 관리자 승인 필요
- **Telegram 승인**: Telegram 봇을 통한 사용자 승인/거부
- **비밀번호 암호화**: Argon2 해싱을 통한 안전한 비밀번호 저장
- **세션 관리**: 자동 로그아웃 및 세션 타임아웃

### 📱 Telegram 봇 통합
- **실시간 알림**: 로그인, 회원가입, 작업 완료 알림
- **인터랙티브 승인**: 인라인 버튼을 통한 사용자 승인/거부
- **봇 폴링 서비스**: 백그라운드 스레드에서 실행되는 봇 서비스
- **중복 실행 방지**: 봇 인스턴스 중복 실행 방지 메커니즘

### 🔍 실시간 파일 모니터링
- **Watchdog 통합**: 파일 시스템 변경 실시간 감지
- **자동 UI 업데이트**: 파일 변경 시 웹 인터페이스 자동 갱신
- **이벤트 로깅**: 파일 생성, 수정, 삭제 이벤트 로깅

## 🛠 기술 스택

### Backend Framework
- **Flask 3.1.2**: 경량 웹 프레임워크
- **Flask-SocketIO 5.5.1**: 실시간 양방향 통신
- **Flask-Login 0.6.3**: 사용자 인증 및 세션 관리
- **Flask-Migrate 4.1.0**: 데이터베이스 마이그레이션
- **Flask-WTF 1.2.2**: 폼 처리 및 CSRF 보호

### Database
- **SQLAlchemy 2.0.43**: ORM (Object-Relational Mapping)
- **Flask-SQLAlchemy 3.1.1**: Flask-SQLAlchemy 통합
- **Alembic 1.16.5**: 데이터베이스 마이그레이션 도구
- **SQLite**: 기본 데이터베이스 (운영 환경에서는 PostgreSQL/MySQL 권장)

### Security
- **Argon2-cffi 25.1.0**: 비밀번호 해싱
- **Flask-WTF**: CSRF 토큰 보호
- **Werkzeug 3.1.3**: 보안 유틸리티

### Data Processing
- **Pandas 2.3.3**: 데이터 분석 및 처리
- **NumPy 2.3.3**: 수치 연산
- **OpenPyXL 3.1.5**: Excel 파일 생성 및 편집
- **Chardet 5.2.0**: 문자 인코딩 자동 감지
- **Natsort 8.4.0**: 자연스러운 정렬

### Real-time Communication
- **Python-SocketIO 5.14.1**: SocketIO 서버 구현
- **Python-EngineIO 4.12.3**: EngineIO 프로토콜
- **Simple-WebSocket 1.1.0**: WebSocket 통신

### Monitoring & Notifications
- **Watchdog 6.0.0**: 파일 시스템 모니터링
- **Python-Telegram-Bot 22.5**: Telegram 봇 API

### HTTP & API
- **Requests 2.32.3**: HTTP 클라이언트
- **DNSPython 2.8.0**: DNS 조회

### Frontend
- **Bootstrap 5**: 반응형 UI 프레임워크
- **Bootstrap Icons**: 아이콘 세트
- **Socket.IO Client**: 실시간 통신 클라이언트
- **JavaScript (ES6+)**: 클라이언트 사이드 로직

### Development & Testing
- **Pytest 8.0.0**: 테스트 프레임워크
- **Pytest-Mock 3.12.0**: 모킹 라이브러리
- **Python-Dotenv 1.0.1**: 환경 변수 관리

## 🏗️ 시스템 아키텍처

```
┌─────────────────────────────────────────────────────────────┐
│                        Client Browser                        │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │   HTML/CSS   │  │  JavaScript  │  │ SocketIO CLI │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
                            ↕ HTTP/WebSocket
┌─────────────────────────────────────────────────────────────┐
│                      Flask Application                       │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                    Routes Layer                       │  │
│  │  • auth.py (인증)  • main.py (메인)                  │  │
│  │  • admin.py (관리) • api.py (API)                    │  │
│  └──────────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                  Services Layer                       │  │
│  │  • redfish_client.py (iDRAC 통신)                    │  │
│  │  • firmware_service.py (펌웨어 관리)                 │  │
│  │  • watchdog_handler.py (파일 모니터링)               │  │
│  │  • logger.py (로깅)                                   │  │
│  └──────────────────────────────────────────────────────┘  │
│  ┌──────────────────────────────────────────────────────┐  │
│  │                   Models Layer                        │  │
│  │  • user.py (사용자)  • job.py (작업)                 │  │
│  │  • firmware.py (펌웨어)                               │  │
│  └──────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────────┐
│                    External Services                         │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐      │
│  │  SQLite DB   │  │ Telegram Bot │  │ Dell Redfish │      │
│  └──────────────┘  └──────────────┘  └──────────────┘      │
└─────────────────────────────────────────────────────────────┘
```

### 주요 컴포넌트

1. **Routes (라우트)**
   - 사용자 요청을 받아 적절한 서비스로 전달
   - 인증, 권한 검사, 입력 검증 수행

2. **Services (서비스)**
   - 비즈니스 로직 구현
   - 외부 API 통신 (Redfish, Telegram)
   - 파일 처리 및 데이터 변환

3. **Models (모델)**
   - 데이터베이스 스키마 정의
   - ORM을 통한 데이터 접근

4. **SocketIO Events**
   - 실시간 양방향 통신
   - 진행 상황 업데이트
   - 파일 변경 알림

## 🚀 시작하기

### 필수 요구사항

- **Python 3.8 이상** (Python 3.10+ 권장)
- **pip** (Python 패키지 관리자)
- **Git** (버전 관리)
- **Dell iDRAC 9 이상** (Redfish API 지원)

### 설치 방법

#### Windows

```powershell
# 1. 저장소 클론
git clone https://github.com/yourusername/idrac_info.git
cd idrac_info

# 2. 가상환경 생성 및 활성화
python -m venv venv
.\venv\Scripts\Activate.ps1

# 3. 의존성 설치
pip install -r requirements.txt

# 4. 환경 변수 설정 (.env 파일 생성)
Copy-Item .env.example .env
# .env 파일을 편집하여 필요한 값 설정

# 5. 데이터베이스 초기화
flask db upgrade

# 6. 애플리케이션 실행
python app.py
```

#### Linux / macOS

```bash
# 1. 저장소 클론
git clone https://github.com/yourusername/idrac_info.git
cd idrac_info

# 2. 가상환경 생성 및 활성화
python3 -m venv venv
source venv/bin/activate

# 3. 의존성 설치
pip install -r requirements.txt

# 4. 환경 변수 설정 (.env 파일 생성)
cp .env.example .env
# .env 파일을 편집하여 필요한 값 설정

# 5. 데이터베이스 초기화
flask db upgrade

# 6. 애플리케이션 실행
python app.py
```

### 환경 설정

`.env` 파일을 생성하고 다음 내용을 설정하세요:

```env
# ========================================
# Flask 기본 설정
# ========================================
SECRET_KEY=your-super-secret-key-change-this-in-production
FLASK_ENV=development
FLASK_DEBUG=true
FLASK_HOST=0.0.0.0
FLASK_PORT=5000

# ========================================
# 데이터베이스 설정
# ========================================
# SQLite (개발용)
DATABASE_URL=sqlite:///backend/instance/site.db

# PostgreSQL (운영용 - 권장)
# DATABASE_URL=postgresql://username:password@localhost:5432/idrac_info

# MySQL (운영용)
# DATABASE_URL=mysql://username:password@localhost:3306/idrac_info

# ========================================
# Redfish API 설정
# ========================================
REDFISH_TIMEOUT=15
REDFISH_VERIFY_SSL=false

# ========================================
# Telegram Bot 설정 (선택 사항)
# ========================================
# Telegram BotFather에서 봇 생성 후 토큰 입력
TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
# Telegram에서 본인의 Chat ID 입력
TELEGRAM_CHAT_ID=123456789

# ========================================
# 데이터 디렉토리 설정
# ========================================
APP_DATA_DIR=./data

# ========================================
# 업로드 및 파일 설정
# ========================================
MAX_CONTENT_LENGTH=10485760  # 10MB
FILES_PER_PAGE=35
BACKUP_FILES_PER_PAGE=3

# ========================================
# 작업 처리 설정
# ========================================
MAX_WORKERS=60  # 동시 처리 가능한 최대 작업 수

# ========================================
# 세션 설정
# ========================================
SESSION_MINUTES=30  # 세션 타임아웃 (분)

# ========================================
# SocketIO 설정
# ========================================
# threading (Windows 권장) / eventlet (Linux 권장)
SOCKETIO_ASYNC_MODE=threading

# ========================================
# 데이터베이스 자동 부트스트랩 (개발용만)
# ========================================
AUTO_BOOTSTRAP_DB=false
```

### 초기 관리자 계정 생성

```bash
# Flask shell 실행
flask shell

# Python 인터프리터에서 실행
>>> from backend.models.user import db, User
>>> admin = User(username='admin', email='admin@example.com', is_admin=True, is_approved=True)
>>> admin.set_password('your-admin-password')
>>> db.session.add(admin)
>>> db.session.commit()
>>> exit()
```

### 실행 방법

```bash
# 개발 서버 실행
python app.py

# 또는 Flask CLI 사용
flask run

# 특정 호스트/포트 지정
flask run --host=0.0.0.0 --port=8080
```

브라우저에서 `http://localhost:5000` 접속

## 📁 프로젝트 구조

```
idrac_info/
├── app.py                          # 메인 애플리케이션 엔트리포인트
├── config.py                       # 애플리케이션 설정
├── requirements.txt                # Python 의존성 목록
├── telegram_bot_service.py         # Telegram 봇 폴링 서비스
├── migrate_passwords.py            # 비밀번호 마이그레이션 스크립트
├── update_db.py                    # 데이터베이스 업데이트 스크립트
├── update_user_approval.py         # 사용자 승인 상태 업데이트 스크립트
├── check_telegram.py               # Telegram 설정 확인 스크립트
│
├── .env                            # 환경 변수 (git에서 제외)
├── .gitignore                      # Git 제외 파일 목록
│
├── backend/                        # 백엔드 코드
│   ├── __init__.py
│   │
│   ├── models/                     # 데이터베이스 모델
│   │   ├── __init__.py
│   │   ├── user.py                 # 사용자 모델
│   │   ├── job.py                  # 작업 모델
│   │   ├── firmware.py             # 펌웨어 모델
│   │   └── telegram_bot.py         # Telegram 봇 모델
│   │
│   ├── routes/                     # 라우트 핸들러
│   │   ├── __init__.py
│   │   ├── main.py                 # 메인 페이지 라우트
│   │   ├── auth.py                 # 인증 라우트
│   │   ├── admin.py                # 관리자 라우트
│   │   ├── api.py                  # API 엔드포인트
│   │   ├── firmware.py             # 펌웨어 관리 라우트
│   │   └── xml_routes.py           # XML 파일 관리 라우트
│   │
│   ├── services/                   # 비즈니스 로직
│   │   ├── __init__.py
│   │   ├── redfish_client.py       # Redfish API 클라이언트
│   │   ├── firmware_service.py     # 펌웨어 관리 서비스
│   │   ├── drm_parser.py           # DRM XML 파서
│   │   ├── watchdog_handler.py     # 파일 모니터링
│   │   ├── logger.py               # 로깅 설정
│   │   ├── platform_utils.py       # 플랫폼 유틸리티
│   │   └── file_utils.py           # 파일 유틸리티
│   │
│   ├── forms/                      # WTForms 폼
│   │   ├── __init__.py
│   │   ├── auth_forms.py           # 인증 폼
│   │   └── admin_forms.py          # 관리자 폼
│   │
│   ├── templates/                  # Jinja2 템플릿
│   │   ├── base.html               # 기본 레이아웃
│   │   ├── index.html               # 메인 페이지
│   │   ├── login.html              # 로그인 페이지
│   │   ├── register.html           # 회원가입 페이지
│   │   ├── admin.html              # 관리자 페이지
│   │   ├── admin_settings.html     # 관리자 설정
│   │   ├── jobs.html               # 작업 관리
│   │   ├── idrac_firmware.html     # 펌웨어 관리
│   │   ├── xml_files.html          # XML 파일 목록
│   │   └── edit_xml.html           # XML 편집기
│   │
│   ├── static/                     # 정적 파일
│   │   ├── css/
│   │   │   ├── admin.css
│   │   │   ├── admin_settings.css
│   │   │   ├── edit_xml.css
│   │   │   ├── index.css
│   │   │   └── jobs.css
│   │   ├── js/
│   │   │   ├── admin.js
│   │   │   ├── admin_settings.js
│   │   │   ├── edit_xml.js
│   │   │   ├── index.js
│   │   │   └── jobs.js
│   │   └── images/
│   │
│   ├── instance/                   # 인스턴스별 데이터
│   │   └── site.db                 # SQLite 데이터베이스
│   │
│   └── socketio_events.py          # SocketIO 이벤트 핸들러
│
├── data/                           # 애플리케이션 데이터
│   ├── logs/                       # 로그 파일
│   ├── uploads/                    # 업로드된 파일
│   ├── temp_ip/                    # 임시 IP 파일
│   ├── temp_zips/                  # 임시 ZIP 파일
│   ├── xml/                        # XML 설정 파일
│   ├── scripts/                    # 스크립트 파일
│   ├── idrac_info/                 # iDRAC 정보 파일
│   ├── mac/                        # MAC 주소 파일
│   ├── guid_file/                  # GUID 파일
│   ├── gpu_serial/                 # GPU 시리얼 파일
│   ├── mac_backup/                 # MAC 백업 파일
│   └── server_list/                # 서버 리스트 파일
│
├── migrations/                     # Alembic 마이그레이션
│   ├── versions/                   # 마이그레이션 버전
│   ├── alembic.ini
│   ├── env.py
│   └── README
│
├── tests/                          # 테스트 코드
│   ├── __init__.py
│   ├── test_auth.py
│   ├── test_api.py
│   └── test_services.py
│
└── venv/                           # 가상환경 (git에서 제외)
```

## 💡 사용법

### 1. 로그인 및 회원가입

1. 브라우저에서 `http://localhost:5000` 접속
2. 회원가입 페이지에서 계정 생성
3. 관리자 승인 대기 (Telegram 봇 설정 시 자동 알림)
4. 승인 후 로그인

### 2. iDRAC 서버 정보 수집

1. 메인 페이지에서 "IP 처리" 섹션 선택
2. 스크립트 선택 (예: `get_idrac_info.py`)
3. IP 주소 입력 (각 줄에 하나씩)
   ```
   192.168.1.100
   192.168.1.101
   192.168.1.102
   ```
4. iDRAC 사용자명/비밀번호 입력
5. "처리" 버튼 클릭
6. 실시간 진행 상황 확인
7. 완료 후 결과 파일 다운로드

### 3. 펌웨어 카탈로그 관리

1. 관리자 페이지 접속
2. "펌웨어 관리" 섹션 선택
3. "Dell 카탈로그 동기화" 버튼 클릭
4. 카탈로그 다운로드 및 파싱 대기
5. 펌웨어 목록 확인

### 4. DRM XML 파일 업로드

1. Dell Repository Manager에서 XML 카탈로그 생성
2. 관리자 설정 페이지 접속
3. "DRM Repository 상태 확인" 클릭
4. XML 파일 업로드
5. "DRM 데이터 동기화" 클릭

### 5. XML 설정 파일 관리

1. "XML 파일" 메뉴 선택
2. XML 파일 업로드 또는 기존 파일 선택
3. "편집" 버튼 클릭하여 웹 에디터에서 수정
4. 저장 시 자동 백업 생성
5. SCP 파일 다운로드 또는 서버에 적용

### 6. MAC/GUID 데이터 수집 및 변환

#### MAC 주소 수집
1. "MAC to Excel" 섹션 선택
2. MAC 주소 데이터 입력 또는 파일 업로드
3. 서버 리스트 입력 (선택 사항)
4. "변환" 버튼 클릭
5. 생성된 Excel 파일 다운로드

#### GUID 수집
1. "GUID to Excel" 섹션 선택
2. GUID 데이터 입력
3. 서버 리스트 매핑
4. Excel 파일 생성 및 다운로드

### 7. 작업 모니터링

1. "작업 관리" 메뉴 선택
2. 실행 중인 작업 목록 확인
3. 작업 상세 정보 보기
4. 필요시 작업 취소

## 🔧 고급 기능

### Telegram 봇 설정

#### 1. Telegram 봇 생성

1. Telegram에서 [@BotFather](https://t.me/botfather) 검색
2. `/newbot` 명령어 입력
3. 봇 이름 및 사용자명 설정
4. 발급받은 토큰을 `.env` 파일의 `TELEGRAM_BOT_TOKEN`에 입력

#### 2. Chat ID 확인

1. [@userinfobot](https://t.me/userinfobot) 검색
2. 봇과 대화 시작
3. 표시되는 ID를 `.env` 파일의 `TELEGRAM_CHAT_ID`에 입력

#### 3. 봇 기능 활성화

- 애플리케이션 재시작 시 자동으로 봇 폴링 시작
- 사용자 로그인/회원가입 시 Telegram 알림 전송
- 신규 사용자 승인 요청 시 인라인 버튼으로 승인/거부 가능

### 데이터베이스 마이그레이션

#### 새로운 마이그레이션 생성

```bash
# 모델 변경 후 마이그레이션 파일 생성
flask db migrate -m "Add new column to user table"

# 마이그레이션 적용
flask db upgrade

# 마이그레이션 롤백
flask db downgrade
```

#### 기존 데이터베이스 업그레이드

```bash
# 현재 마이그레이션 상태 확인
flask db current

# 최신 버전으로 업그레이드
flask db upgrade

# 특정 버전으로 업그레이드
flask db upgrade <revision>
```

### 비밀번호 해싱 마이그레이션

기존 사용자의 비밀번호를 Argon2로 마이그레이션:

```bash
python migrate_passwords.py
```

### 사용자 승인 상태 업데이트

기존 사용자를 일괄 승인:

```bash
python update_user_approval.py
```

### 로그 관리

로그 파일 위치: `data/logs/app.log`

로그 레벨 설정 (`.env` 파일):
```env
LOG_LEVEL=INFO  # DEBUG, INFO, WARNING, ERROR, CRITICAL
```

로그 파일 로테이션:
- 자동으로 날짜별 로그 파일 생성
- 최대 30일간 보관

### 성능 최적화

#### 동시 작업 수 조정

`.env` 파일에서 `MAX_WORKERS` 값 조정:
```env
MAX_WORKERS=60  # CPU 코어 수에 따라 조정
```

#### SocketIO 모드 변경

Windows:
```env
SOCKETIO_ASYNC_MODE=threading
```

Linux (eventlet 설치 필요):
```env
SOCKETIO_ASYNC_MODE=eventlet
```

```bash
pip install eventlet
```

### 운영 환경 배포

#### Gunicorn 사용 (Linux)

```bash
# Gunicorn 설치
pip install gunicorn eventlet

# 실행
gunicorn --worker-class eventlet -w 1 --bind 0.0.0.0:5000 app:app
```

#### Nginx 리버스 프록시 설정

```nginx
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /socket.io {
        proxy_pass http://127.0.0.1:5000/socket.io;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
```

#### Systemd 서비스 등록 (Linux)

`/etc/systemd/system/idrac-info.service`:
```ini
[Unit]
Description=iDRAC Info Manager
After=network.target

[Service]
User=www-data
WorkingDirectory=/path/to/idrac_info
Environment="PATH=/path/to/idrac_info/venv/bin"
ExecStart=/path/to/idrac_info/venv/bin/gunicorn --worker-class eventlet -w 1 --bind 127.0.0.1:5000 app:app
Restart=always

[Install]
WantedBy=multi-user.target
```

서비스 시작:
```bash
sudo systemctl daemon-reload
sudo systemctl enable idrac-info
sudo systemctl start idrac-info
sudo systemctl status idrac-info
```

## 📚 Git 사용법

### 변경사항 커밋 및 푸시

```bash
# 변경된 파일 확인
git status

# 모든 변경사항 스테이징
git add -A

# 또는 특정 파일만 스테이징
git add backend/routes/main.py

# 커밋 메시지와 함께 커밋
git commit -m "Add new feature: firmware auto-update"

# 원격 저장소에 푸시
git push origin main
```

### 원격 저장소에서 최신 버전 가져오기

```bash
# 최신 변경사항 가져오기
git pull origin main

# 또는 fetch 후 merge
git fetch origin
git merge origin/main
```

### 브랜치 관리

```bash
# 새 브랜치 생성
git checkout -b feature/new-feature

# 브랜치 전환
git checkout main

# 브랜치 목록 확인
git branch -a

# 브랜치 병합
git checkout main
git merge feature/new-feature

# 브랜치 삭제
git branch -d feature/new-feature
```

### 원격 저장소 확인

```bash
# 원격 저장소 목록
git remote -v

# 원격 저장소 추가
git remote add origin https://github.com/username/idrac_info.git

# 원격 저장소 URL 변경
git remote set-url origin https://github.com/username/new-repo.git
```

### 변경사항 되돌리기

```bash
# 작업 디렉토리 변경사항 취소
git checkout -- filename

# 스테이징 취소
git reset HEAD filename

# 마지막 커밋 취소 (변경사항 유지)
git reset --soft HEAD~1

# 마지막 커밋 취소 (변경사항 삭제)
git reset --hard HEAD~1
```

## 🐛 문제 해결

### Telegram 봇이 응답하지 않음

**증상**: Telegram 메시지가 전송되지 않음

**해결 방법**:
1. `.env` 파일에서 `TELEGRAM_BOT_TOKEN`과 `TELEGRAM_CHAT_ID` 확인
2. Telegram 설정 확인 스크립트 실행:
   ```bash
   python check_telegram.py
   ```
3. 봇 폴링 서비스 로그 확인:
   ```bash
   tail -f data/logs/app.log | grep "텔레그램"
   ```
4. 중복 봇 인스턴스 확인 및 종료:
   ```bash
   # Windows
   tasklist | findstr python
   taskkill /F /PID <process_id>
   
   # Linux
   ps aux | grep python
   kill -9 <process_id>
   ```

### SocketIO 연결 실패

**증상**: 실시간 업데이트가 작동하지 않음

**해결 방법**:
1. 브라우저 콘솔에서 에러 확인
2. SocketIO 모드 변경:
   ```env
   # Windows
   SOCKETIO_ASYNC_MODE=threading
   
   # Linux
   SOCKETIO_ASYNC_MODE=eventlet
   ```
3. 방화벽 설정 확인
4. CORS 설정 확인 (app.py):
   ```python
   socketio = SocketIO(app, cors_allowed_origins="*")
   ```

### 데이터베이스 마이그레이션 오류

**증상**: `flask db upgrade` 실행 시 오류 발생

**해결 방법**:
1. 현재 마이그레이션 상태 확인:
   ```bash
   flask db current
   ```
2. 마이그레이션 히스토리 확인:
   ```bash
   flask db history
   ```
3. 데이터베이스 백업 후 재생성:
   ```bash
   # 백업
   cp backend/instance/site.db backend/instance/site.db.backup
   
   # 재생성
   rm backend/instance/site.db
   flask db upgrade
   ```

### 파일 업로드 실패

**증상**: XML 파일 업로드 시 오류 발생

**해결 방법**:
1. 파일 크기 제한 확인 (`.env`):
   ```env
   MAX_CONTENT_LENGTH=10485760  # 10MB
   ```
2. 디렉토리 권한 확인:
   ```bash
   # Linux
   chmod -R 755 data/
   ```
3. 디스크 공간 확인:
   ```bash
   df -h
   ```

### Redfish API 연결 실패

**증상**: iDRAC 서버 연결 시 타임아웃 또는 인증 오류

**해결 방법**:
1. iDRAC IP 주소 및 네트워크 연결 확인
2. iDRAC 사용자명/비밀번호 확인
3. SSL 검증 비활성화 (`.env`):
   ```env
   REDFISH_VERIFY_SSL=false
   ```
4. 타임아웃 시간 증가:
   ```env
   REDFISH_TIMEOUT=30
   ```
5. iDRAC Redfish 서비스 활성화 확인

### 세션 타임아웃 문제

**증상**: 로그인 후 자주 로그아웃됨

**해결 방법**:
1. 세션 타임아웃 시간 증가 (`.env`):
   ```env
   SESSION_MINUTES=60
   ```
2. 쿠키 설정 확인 (`config.py`):
   ```python
   SESSION_COOKIE_SECURE = False  # HTTP 환경
   REMEMBER_COOKIE_SECURE = False
   ```

## 📄 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다.

## 📧 연락처 및 지원

- **이슈 리포트**: GitHub Issues를 통해 버그 리포트 및 기능 요청
- **문의**: 프로젝트 관련 문의사항은 이슈를 등록해주세요

## 🙏 기여

기여를 환영합니다! Pull Request를 보내주세요.

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)
3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)
4. Push to the Branch (`git push origin feature/AmazingFeature`)
5. Open a Pull Request

## 📝 변경 로그

### v1.0.0 (2025-11-29)
- 초기 릴리스
- iDRAC Redfish API 통합
- Telegram 봇 알림 기능
- DRM 카탈로그 동기화
- 사용자 승인 워크플로우
- 실시간 파일 모니터링