JupyterHub 설정
메뉴 통합 안내 — 노트북 기능은 ML 허브 → 개발 스테이지로 통합되었습니다. 메뉴 경로: 사이드바 → ML 허브 → 개발 (
/ml-hub/develop?tab=notebooks). 구 경로/notebooks는 자동 리다이렉트됩니다.

GenD는 Kubernetes 기반 JupyterHub를 통해 멀티 사용자 노트북 환경을 제공합니다. 각 사용자에게 독립된 Jupyter 서버가 할당되며, Trino 커넥터가 사전 구성됩니다.
아키텍처
GenD UI → GenD API (notebook.py) → JupyterHub API → K8s Pod (사용자별)
│ ↑ ├── Python 3.12
│ │ ├── trino-python-client
│ hub:8081 └── 분석 라이브러리
│
└── Open 버튼 → Ingress /jupyter → proxy-public → JupyterLab
JupyterHub는 K8s 클러스터 내에서 사용자 요청에 따라 개별 Pod(jupyter-{username})를 생성합니다. GenD API는 서버 관리(시작/중지/상태)를 담당하고, 브라우저는 Ingress를 통해 JupyterLab에 직접 접속합니다.

사전 구성 항목
| 항목 | 설명 |
|---|---|
| Python 커널 | Python 3.12 + pandas, matplotlib, seaborn, plotly |
| ML 라이브러리 | scikit-learn, ipywidgets |
| Trino 클라이언트 | trino[sqlalchemy] 사전 설치 |
| 환경 변수 | TRINO_HOST, TRINO_PORT 자동 설정 |
| 스토리지 | PVC 기반 사용자별 영구 스토리지 (2Gi) |
| 자동 종료 | 1시간 미사용 시 자동 종료, 최대 8시간 |
Trino 연동 예시
노트북 내에서 Trino에 연결하여 쿼리하는 기본 코드:
from trino.dbapi import connect
conn = connect(
host="trino",
port=8080,
user="notebook-user",
catalog="lakehouse",
schema="default",
)
cursor = conn.cursor()
cursor.execute("SELECT * FROM orders LIMIT 10")
rows = cursor.fetchall()
리소스 관리
각 노트북 서버 Pod에는 리소스 제한이 적용됩니다:
| 프로파일 | CPU | Memory | 용도 |
|---|---|---|---|
| GenD Default | 0.25~1 | 512M~2G | 데이터 분석, 시각화 |
| GenD ML | 0.25~2 | 512M~4G | ML 모델 학습 |
- 1시간 미사용 시 자동 종료 (cull), 최대 8시간 수명
- 관리자는 전체 서버 목록에서 리소스 사용 현황을 모니터링합니다