IDE 선택 가이드 — JupyterLab vs VS Code
GenD 코드스페이스는 하나의 환경에서 JupyterLab 과 VS Code 를 동시에 제공합니다
(Epic #2614 — 코드스페이스 프로필은
gend-singleuser-codeserver 이미지 하나로 두 IDE 를 같이 띄웁니다). 같은 컨테이너,
같은 홈 디렉토리, 같은 git workflow 를 공유하므로 프로필 전환 없이 탭만 바꿔 두 IDE 를
오갈 수 있습니다. 시작/중지·프로필(리소스 크기)은 코드스페이스 가이드 참조.
본 가이드는 "어떤 작업을 어느 IDE 에서 하는 게 좋은가"를 다룹니다 (원문: Epic #1081 M1 Step 2).
옵션 비교
| 항목 | JupyterLab (default) | VS Code (code-server) |
|---|---|---|
| 베이스 이미지 | gend-singleuser:latest | gend-singleuser-codeserver:0.3.0 |
| 강점 | 셀 단위 인터랙티브 실행, 풍부한 시각화, 매직 명령어 | 모듈 리팩토링, 다중 파일 검색·치환, 디버거, 단위 테스트, GitLens |
| 약점 | 대형 코드베이스 탐색 어려움, 디버거 제한 | 셀 단위 시각화 약함 (notebook outputs 는 동등 지원) |
| Extension marketplace | jupyterlab-git 사전 설치 | Open VSX (MS marketplace 라이선스 회피) |
| Git 통합 | jupyterlab-git 좌측 패널 + nbdime | 내장 Source Control 패널 + nbdime CLI |
| pre-commit hook | 동일 (nbstripout + detect-secrets) | 동일 (nbstripout + detect-secrets) |
| MLflow 자동 태깅 | 동일 (Step 3 활성) | 동일 (Step 3 활성) |
사용 시나리오
JupyterLab 을 권장하는 작업
- EDA (탐색적 데이터 분석) — 셀 단위 plot, df.head() 반복
- 시각화 위주 노트북 — matplotlib / seaborn / plotly + Rich Display
- NL2SQL → Trino 쿼리 반복 실행 — Genie / 검색 결과를 셀에 붙여 즉시 실행
- 모델 학습 실험 노트북 — sklearn / XGBoost 셀 단위 fit, plot
- Markdown + 코드 혼합 보고서
VS Code (code-server) 를 권장하는 작업
- 공통 모듈 리팩토링 — utils.py / features.py 다중 파일 검색·치환
- 단위 테스트 작성 — pytest 통합 (Test Explorer)
- 디버깅 — breakpoint, watch, call stack
- Type 검사 — mypy / pyright 실시간 (extension)
- 데이터 파이프라인 코드 작성 — Dagster asset, Spark job
- git rebase / merge 충돌 해결 — VS Code SCM 패널이 jupyterlab-git 보다 강력
IDE 전환 방법
코드스페이스 프로필에서는 전환 절차가 없습니다 — 두 IDE 가 같은 컨테이너에서 동시에 떠 있으므로:
- ML 허브 → Develop → 코드스페이스 카드에서 [JupyterLab 열기] / [VS Code 열기] 버튼으로 각각 새 탭에서 엽니다 (동시 사용 가능, 같은 파일시스템).
- JupyterLab 안에서는 Launcher 의 VS Code 타일로도 진입할 수 있습니다.
"JupyterLab (경량)" 프로필만은 VS Code 가 없습니다 — 필요해지면 중지 후 코드스페이스 프로필로 다시 시작하세요 (홈 디렉토리 보존).
코드스페이스를 중지/재시작(프로필 변경 포함)하면 kernel 메모리·변수는 전부 사라집니다. 노트북에 저장된 셀 출력은 보존되지만 인메모리 상태는 다시 실행해야 합니다. 같은 코드스페이스 안에서 JupyterLab ↔ VS Code 탭을 오가는 것은 재시작이 아니므로 안전합니다.
두 프로필 모두 같은 ~/.gitconfig 를 사용하며, ~/.local/share/code-server/ 와 JupyterLab 설정은 같은 PVC 안에 분리 저장됩니다. Step 3 머지 후에는 단명 PAT 자동 발급 + ~/.gitconfig 자동 시드가 두 프로필 모두에 동등 적용됩니다.
VS Code 확장 권장 셋 (Open VSX)
기본 시드 (vscode-settings.json) 외 사용자가 추가로 설치하면 좋은 확장:
| 확장 | 용도 | Open VSX |
|---|---|---|
| Python | Python 언어 서버, 디버거 | ms-python.python (Open VSX 미러) |
| Jupyter | notebook 편집 (셀 실행, kernel) | ms-toolsai.jupyter (Open VSX 미러) |
| GitLens | git blame, history, compare | eamodio.gitlens |
| Pylance | 타입 추론 (Python 보강) | ms-python.vscode-pylance |
| Ruff | linter / formatter | charliermarsh.ruff |
설치는 좌측 사이드바 Extensions 패널 → 검색 → Install. GenD 는 Open VSX 만 사용하며 MS Marketplace 직접 사용은 라이선스 위반 소지가 있습니다 (#1081 IDE 보강 코멘트 § 위험 추가).
Git workflow (M1 Step 1+2 시점)
Step 3 머지 후 단명 PAT 자동 발급이 활성되면 본 절차는 더 단순해집니다.
# 1. (수동) Gitea UI 에서 PAT 발급
# https://gend.genon.ai/git/ → Settings → Applications → Generate New Token
# 2. 노트북 / VS Code 터미널에서
git config --global user.name "<keycloak-username>"
git config --global user.email "<keycloak-username>@gend.local"
git clone https://<keycloak-username>:<PAT>@gend.genon.ai/git/<owner>/<repo>.git
# 3. pre-commit hook 설치 (nbstripout + detect-secrets — 이미지에 사전 포함)
cd <repo>
pre-commit install
# 4. 작업 → commit → push
git add .
git commit -m "feat(notebook): EDA on card_crm dataset"
git push
트러블슈팅
VS Code spawn 후 빈 화면
- KubeSpawner 의
port가 8888 인지 확인.infra/jupyterhub/values.yaml의 VS Code 프로필kubespawner_override.port: 8888가 누락되면 JupyterHub proxy 가 백엔드 포트를 찾지 못합니다. - Spawner 로그:
kubectl logs -n gend deployment/hub
노트북 셀 실행이 안 됨 (VS Code)
- Python extension + Jupyter extension 설치 확인 (Extensions 패널)
- Kernel 선택: 우상단 "Select Kernel" → "/opt/conda/bin/python"
같은 git repo 가 두 프로필에서 conflict
- 두 프로필이 같은 PVC 의 같은 디렉토리에서 작업하므로, 다른 셀/터미널에서 동시에 commit/push 하면 일반 git 충돌과 동일합니다. 항상 git status 로 확인 후 작업.
관련 문서
- GenD Git (Gitea) 개요 — 내부 Git 서버 인프라
- JupyterHub 관리 가이드 — 외부
- 메모리:
project_jupyterhub_deploy,feedback_jupyterhub_oidc_secret
참조
- code-server (Coder) — VS Code 베이스 (Code-OSS fork)
- Open VSX Registry — Marketplace 대안
- JupyterHub KubeSpawner profile_list
- Epic #1081 IDE 보강 코멘트 — 글로벌 2026 IDE 매트릭스 + GenOS Codespace 비교