# 금도 내부 문서

## 📝 개요

이 저장소는 금도에서 사용하는 **서버 인프라 환경(Docker, Nginx)**과 내부 **AI 교육 자료**를 관리하는 문서 저장소입니다.

---

## 🚀 서버 인프라

서버 운영에 필요한 Docker 및 Nginx 관련 설정과 가이드를 포함합니다.

### 🐳 Docker

- **[Docker 환경 리포트](./docker/geumdo_docker_report_240611.md)**: 서버별 Docker 버전 현황과 주요 Docker Compose 프로젝트 정보를 정리한 문서입니다.
- **[Docker 배포 가이드](./docker/deployment_guide.md)**: Docker를 이용한 서비스 배포 절차를 안내하는 가이드입니다.
- **[Tomcat SSL/TLS 설정 가이드](./docker/docker_ssl_setup_guide.md)**: 리버스 프록시(Nginx/Apache)를 이용해 Tomcat 애플리케이션에 SSL/TLS를 적용하는 방법을 안내합니다.
- **[Docker 프로젝트 모음](./docker/README.md)**: 30개 이상의 다양한 Docker 기반 애플리케이션 및 서비스 환경을 포함합니다.

#### 🖥️ 고급 가상화: Docker + KVM + Windows VM

- **[Docker Windows VM 가이드](./docker/docker-windows-vm/)**: **복합 가상화 환경 구축 가이드**

**🏗️ 아키텍처 개요**
```
외부 사용자 (RDP 클라이언트)
    ↓ (RDP 연결: 호스트IP:33890)
Linux 서버 (호스트)
    ↓ (Docker 포트 포워딩: 33890→3389, 8081→8090)
Docker 컨테이너 (Ubuntu 20.04)
    ├── libvirtd (KVM 관리 데몬)
    ├── Vagrant (VM 자동화 도구)
    └── iptables (내부 포트 포워딩)
         ↓ (3389→VM의 3389, 8090→VM의 8090)
    KVM 가상 머신 (Windows 10)
         ├── RDP 서비스 (포트 3389)
         └── Spring Boot 애플리케이션 (Embed Tomcat, 포트 8090)
```

**⚙️ 핵심 기술 스택**
- **가상화**: Docker (컨테이너) + KVM (하드웨어 가상화)
- **자동화**: Vagrant + vagrant-libvirt 플러그인
- **네트워킹**: 2단계 NAT + iptables FORWARD 체인 설정
- **원격 접속**: RDP (Remote Desktop Protocol)
- **애플리케이션**: [Spring Boot](https://spring.io/guides/gs/spring-boot-docker) 기반 Java 웹 애플리케이션

**🔧 주요 해결 과제**
- **방화벽 문제**: 호스트의 iptables FORWARD 체인 DROP 정책 우회
- **네트워크 라우팅**: 복잡한 다중 NAT 환경에서의 패킷 흐름 제어
- **포트 충돌**: 호스트-컨테이너-VM 간 포트 매핑 관리

**💡 사용 시나리오**
- Windows 전용 소프트웨어를 Linux 서버에서 실행
- 격리된 개발 환경에서 Spring Boot 애플리케이션 테스트
- 원격 Windows 데스크톱 환경이 필요한 업무
- CI/CD 파이프라인에서 Windows 환경 테스트

**🚀 빠른 시작**
```bash
# 1. 호스트 방화벽 설정 (필수)
sudo iptables -I DOCKER-USER -d 172.29.0.2 -p tcp --dport 3389 -j ACCEPT
sudo iptables -I DOCKER-USER -d 172.29.0.2 -p tcp --dport 8090 -j ACCEPT
sudo netfilter-persistent save

# 2. Docker 컨테이너 실행
cd docker/docker-windows-vm
docker-compose up -d

# 3. 접속 방법
# RDP 접속: 호스트IP:33890
# Spring Boot 애플리케이션: http://호스트IP:8081
```

**📋 상세 설정 파일**
- **[docker-compose.yml](./docker/docker-windows-vm/docker-compose.yml)**: 컨테이너 설정 (포트 매핑, 권한, 디바이스)
- **[Dockerfile](./docker/docker-windows-vm/Dockerfile)**: Ubuntu 20.04 + KVM + Vagrant 환경 구축
- **[Vagrantfile](./docker/docker-windows-vm/Vagrantfile)**: Windows 10 VM 설정 (메모리 8GB, CPU 4코어)
- **[startup.sh](./docker/docker-windows-vm/startup.sh)**: 자동화된 VM 부팅 및 네트워크 설정

#### 🏭 주요 Docker 프로젝트들

| 프로젝트 | 설명 | 주요 기술 | 실행 방법 |
|---------|------|-----------|-----------|
| **`docker_all`** | Java 웹 개발 및 협업에 필요한 모든 서비스(Tomcat, MariaDB, SVN)를 통합한 올인원 개발 서버 | `Tomcat`, `MariaDB`, `SVN`, `Java 8` | `./rebuild_docker.sh` |
| **`docker_fastapi`** | 스마트스토어, 쿠팡 상품 정보 및 리뷰를 수집하고 AI 감성 분석을 수행하는 크롤링 시스템 | `FastAPI`, `Selenium`, `TensorFlow` | `docker-compose up -d` |
| **`docker_jupyter`** | GPU를 지원하는 Jupyter Lab 실행 환경으로, PyTorch가 사전 설치되어 있음 | `Jupyter Lab`, `PyTorch`, `GPU` | `docker-compose up -d` |
| **`docker_jenkins`** | Jenkins CI/CD 자동화 서버를 구축하며, 데이터는 호스트에 영속적으로 저장 | `Jenkins`, `OpenJDK 8`, `MariaDB` | `./rebuild.sh` |
| **`docker_gitlab`** | 공식 이미지를 사용하여 GitLab CE(Community Edition) 서버를 배포 | `GitLab CE` | `docker-compose up -d` |
| **`docker_registry`** | Docker 이미지를 저장하고 관리할 수 있는 사설 레지스트리(Web UI 포함) | `Docker Registry`, `Web UI` | `docker-compose up -d` |
| **`geumdo-rag-chat-bot`** | 사내 GitLab 코드에 대해 자연어 질의를 할 수 있는 RAG 기반 챗봇 시스템 | `RAG`, `LangChain`, `FastAPI`, `Streamlit` | `docker-compose up --build -d` |
| **`gpu_cooling_monitor`** | TIG 스택(InfluxDB, Grafana)을 활용하여 서버의 GPU 및 시스템 냉각 상태를 실시간으로 모니터링 | `InfluxDB`, `Grafana`, `Python`, `Slack` | `docker-compose up -d` |
| **`jupyter_geumdo_lab`** | Kubernetes(K8s) 기반의 다중 사용자 JupyterHub 서비스로, Google OAuth 인증과 동적 GPU/CPU 서버 생성을 지원 | `Kubernetes`, `JupyterHub`, `NFS`, `OAuth` | `helm upgrade ...` |
| **`docker_3dp`** | Nextcloud 파일 관리, 웹 기반 원격 슬라이싱(PrusaSlicer), 프린터 제어 기능을 통합한 3D 프린팅 솔루션 | `Nextcloud`, `PrusaSlicer`, `Flask`, `PHP` | `./rebuild_docker.sh` |

### 🌐 Nginx

- **[Nginx 프록시 설정 분석](./nginx/proxy_analysis.md)**: Nginx 리버스 프록시 서버의 주요 설정 파일과 서비스별 프록시 규칙을 상세히 분석한 문서입니다.

### 🔄 서버 백업 시스템

- **[서버 백업 가이드](./server_backup/README.md)**: 서버 데이터 백업 시스템 구성 및 스크립트 활용 가이드입니다.
- **[Docker 백업 가이드](./server_backup/docker_backup_guide.md)**: Docker 환경에서의 효율적인 백업 방법을 안내합니다.
- **[lftp 설치 가이드](./server_backup/README.md#lftp-설치-방법)**: 다양한 리눅스 배포판에서 lftp를 설치하는 방법을 안내합니다.

---

## 🤖 AI 전문가 양성 과정

16주 완성! 파이썬부터 프로덕션 배포까지의 AI 전문가 양성 과정을 위한 체계적인 강의 자료입니다.

### 📚 과정 개요

- **[AI 전문가 과정 메인 페이지](./ai_lecture/README.md)**: 전체 과정 소개 및 기술 스택 정보
- **[강의 계획서](./ai_lecture/AI_Expert_Course_Schedule.md)**: 16주 과정의 상세한 주차별 학습 목표와 내용
- **[개발 환경 설정 가이드](./ai_lecture/SETUP.md)**: Poetry를 사용한 현대적인 개발 환경 설정 방법
- **[자주 묻는 질문 (FAQ)](./ai_lecture/FAQ.md)**: 과정에 대한 주요 질문과 답변
- **[기여 가이드](./ai_lecture/CONTRIBUTING.md)**: 프로젝트 기여 방법 및 개발 환경 설정
- **[문제 해결 가이드](./ai_lecture/TROUBLESHOOTING.md)**: 개발 중 발생할 수 있는 문제 해결 방법

### 🎯 커리큘럼 구조

#### **Part 1: AI 개발을 위한 파이썬 마스터리 (1-5주차)**
- **[Part 0: 과정 소개](./ai_lecture/courses/00_introduction/part_0_introduction.md)**
- **[Part 0.1: AI의 역사](./ai_lecture/courses/00_introduction/part_0.1_history_of_ai.md)**
- **[Part 1: AI 개발 환경 구축](./ai_lecture/courses/01_ai_development_environment/part_1_ai_development_environment.md)**
- **[Part 2: 파이썬 핵심 문법](./ai_lecture/courses/02_python_core_syntax/part_2_python_core_syntax.md)**
- **[Part 3: 파이썬 컬렉션](./ai_lecture/courses/03_python_collections/part_3_python_collections.md)**
- **[Part 4: 객체 지향 프로그래밍](./ai_lecture/courses/04_object_oriented_programming/part_4_object_oriented_programming.md)**
- **[Part 5: AI 핵심 라이브러리](./ai_lecture/courses/05_ai_core_libraries/part_5_ai_core_libraries.md)**

#### **Part 2: 핵심 AI 모델 개발 및 서빙 (6-9주차)**
- **[Part 6: 머신러닝](./ai_lecture/courses/06_machine_learning/part_6_machine_learning.md)**
- **[Part 7: 딥러닝](./ai_lecture/courses/07_deep_learning/part_7_deep_learning.md)**
  - **[7.1: 순환 신경망 (RNN)](./ai_lecture/courses/07_deep_learning/part_7.1_recurrent_neural_networks.md)**
  - **[7.2: Transformer와 LLM의 원리](./ai_lecture/courses/07_deep_learning/part_7.2_transformer_and_llm_principles.md)**
  - **[7.3: LangChain을 활용한 LLM 애플리케이션 개발](./ai_lecture/courses/07_deep_learning/part_7.3_llm_application_development_with_langchain.md)**
  - **[7.4: 그래프 신경망 (GNN)](./ai_lecture/courses/07_deep_learning/part_7.4_graph_neural_networks.md)**
  - **[7.5: 강화학습 (RL)](./ai_lecture/courses/07_deep_learning/part_7.5_reinforcement_learning.md)**
- **[Part 8: FastAPI를 이용한 모델 서빙](./ai_lecture/courses/08_model_serving_with_fastapi/part_8_model_serving_with_fastapi.md)**
- **[Part 9: 프로덕션 레벨 API](./ai_lecture/courses/09_production_ready_api/part_9_production_ready_api.md)**

#### **Part 3: 프로덕션 MLOps 및 AI 심화 (10-14주차)**
- **[Part 10: AI 전문가 과정 로드맵](./ai_lecture/courses/10_expert_path/part_10_expert_path.md)**
  - **[추천 학습 자료](./ai_lecture/courses/10_expert_path/recommended_resources.md)**
- **[Part 11: 프로덕션 레벨 MLOps 심화](./ai_lecture/courses/11_mlops/part_11_mlops.md)**
- **[Part 12: 대규모 AI 모델 최적화 및 서빙](./ai_lecture/courses/12_model_optimization/part_12_model_optimization.md)**
- **[Part 13: 생성형 AI 및 AI 에이전트 심화](./ai_lecture/courses/13_generative_ai/part_13_generative_ai.md)**
- **[Part 14: AI 윤리 및 거버넌스 실무](./ai_lecture/courses/14_ai_ethics/part_14_ai_ethics.md)**

#### **Part 4: 최종 캡스톤 프로젝트 (15-16주차)**
- **[Part 15: 최종 캡스톤 프로젝트 가이드](./ai_lecture/courses/15_capstone_project/part_15_capstone_project.md)**
  - **[캡스톤 프로젝트 템플릿](./ai_lecture/courses/15_capstone_project/capstone_template.md)**

### 💻 실습 코드 및 자료

- **[실습 코드 메인](./ai_lecture/source_code/README.md)**: 전체 실습 코드 구조 및 사용법
- **[파이썬 핵심 문법 실습](./ai_lecture/source_code/02_python_core_syntax/)**
- **[파이썬 컬렉션 실습](./ai_lecture/source_code/03_python_collections/)**
- **[객체 지향 프로그래밍 실습](./ai_lecture/source_code/04_object_oriented_programming/)**
- **[AI 핵심 라이브러리 실습](./ai_lecture/source_code/05_ai_core_libraries/)**
- **[머신러닝 실습](./ai_lecture/source_code/06_machine_learning/)**
- **[딥러닝 실습](./ai_lecture/source_code/07_deep_learning/)**
- **[FastAPI 모델 서빙 실습](./ai_lecture/source_code/08_model_serving_with_fastapi/)**
- **[Production API 실습](./ai_lecture/source_code/09_production_ready_api/)**
- **[MLOps 심화 실습](./ai_lecture/source_code/11_mlops/)**
- **[모델 최적화 실습](./ai_lecture/source_code/12_model_optimization/)**
- **[생성형 AI 실습](./ai_lecture/source_code/13_generative_ai/)**
- **[AI 윤리 실습](./ai_lecture/source_code/14_ai_ethics/)**

### 📚 추가 자료

- **[통합 용어집](./ai_lecture/glossary.md)**: 전체 과정에서 사용되는 핵심 용어 정리
- **[실습 데이터셋](./ai_lecture/assets/datasets/)**: 과정에서 사용되는 실습용 데이터
- **[Docker 설정 파일](./ai_lecture/docker-compose.dev.yml)**: 개발 환경용 Docker 설정
- **[GPU 지원 Docker 설정](./ai_lecture/docker-compose.gpu.yml)**: GPU 환경용 Docker 설정
- **[프로젝트 TODO](./ai_lecture/TODO.md)**: 프로젝트 개선 사항 및 향후 계획

### 🎯 학습 진도 관리

본 과정에서는 학습 진도를 체계적으로 관리할 수 있는 도구를 제공합니다:

```bash
# 전체 진도 확인
make progress

# 특정 파트 진도 확인
make progress-show PART=part_2

# 학습 항목 완료 표시
make progress-complete PART=part_2 ITEM=0

# 진도 리포트 생성
make progress-export FILE=my_progress.md
```

---

## 🛠️ 기술 스택

### AI 강의 과정
- **언어**: 파이썬 3.10+
- **의존성 관리**: Poetry (권장) / pip
- **핵심 라이브러리**: NumPy, Pandas, Scikit-learn, PyTorch, LangChain
- **API 서버**: FastAPI
- **배포 및 운영**: Docker, Git
- **개발 환경**: JupyterLab, Visual Studio Code, Cursor, GitHub Copilot
- **코드 품질**: Black, Ruff, MyPy, Pytest
- **CI/CD**: GitLab CI/CD

### 서버 인프라
- **컨테이너화**: Docker, Docker Compose
- **웹 서버**: Nginx (리버스 프록시)
- **가상화 기술**: 
  - **Type 1**: KVM (Kernel-based Virtual Machine) - 하드웨어 직접 제어
  - **Type 2**: Docker 컨테이너 - OS 레벨 가상화
  - **복합 구조**: Docker + KVM 중첩 가상화로 Windows 환경 구현
- **네트워킹**: iptables 방화벽, NAT 포트 포워딩, RDP 원격 접속
- **모니터링**: TIG 스택 (Telegraf, InfluxDB, Grafana), Prometheus
- **CI/CD**: Jenkins, GitLab CI/CD
- **데이터베이스**: MariaDB, MySQL, PostgreSQL
- **AI/ML**: Jupyter Lab, TensorFlow, PyTorch, FastAPI

---

## 🚀 시작하기

### AI 강의 과정 시작하기
1. **[개발 환경 설정](./ai_lecture/SETUP.md)**을 참고하여 환경을 구축합니다.
2. **[Part 0: 과정 소개](./ai_lecture/courses/00_introduction/part_0_introduction.md)**부터 시작합니다.
3. 각 파트별로 이론 학습과 실습을 병행합니다.

### 서버 인프라 설정
1. **[Docker 배포 가이드](./docker/deployment_guide.md)**를 참고하여 Docker 환경을 구축합니다.
2. **[Nginx 프록시 설정](./nginx/proxy_analysis.md)**을 확인하여 웹 서버를 설정합니다.
3. **[Docker 프로젝트 모음](./docker/README.md)**에서 필요한 서비스를 선택하여 배포합니다.

---

## 📊 프로젝트 통계

- **Docker 프로젝트**: 30+ 개
- **파이썬 코드**: 6,492줄
- **문서**: 10,224줄 (마크다운)
- **Jupyter 노트북**: 10개
- **테스트 파일**: 8개
- **Docker 설정**: 2개 (개발/GPU 환경)

---

## 📞 문의 및 지원

- **기술 문의**: 각 파트별 README 파일 및 FAQ 참고
- **개발 환경 문제**: [TROUBLESHOOTING.md](./ai_lecture/TROUBLESHOOTING.md) 참고
- **프로젝트 기여**: [CONTRIBUTING.md](./ai_lecture/CONTRIBUTING.md) 참고

---

**💡 이 저장소는 금도의 내부 교육 및 인프라 관리를 위한 문서입니다. 지속적인 업데이트와 개선을 통해 더 나은 학습 경험을 제공하겠습니다.**
