본문으로 건너뛰기

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:latestgend-singleuser-codeserver:0.3.0
강점셀 단위 인터랙티브 실행, 풍부한 시각화, 매직 명령어모듈 리팩토링, 다중 파일 검색·치환, 디버거, 단위 테스트, GitLens
약점대형 코드베이스 탐색 어려움, 디버거 제한셀 단위 시각화 약함 (notebook outputs 는 동등 지원)
Extension marketplacejupyterlab-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 가 같은 컨테이너에서 동시에 떠 있으므로:

  1. ML 허브 → Develop → 코드스페이스 카드에서 [JupyterLab 열기] / [VS Code 열기] 버튼으로 각각 새 탭에서 엽니다 (동시 사용 가능, 같은 파일시스템).
  2. JupyterLab 안에서는 Launcher 의 VS Code 타일로도 진입할 수 있습니다.

"JupyterLab (경량)" 프로필만은 VS Code 가 없습니다 — 필요해지면 중지 후 코드스페이스 프로필로 다시 시작하세요 (홈 디렉토리 보존).

재시작 시 kernel 상태는 휘발

코드스페이스를 중지/재시작(프로필 변경 포함)하면 kernel 메모리·변수는 전부 사라집니다. 노트북에 저장된 셀 출력은 보존되지만 인메모리 상태는 다시 실행해야 합니다. 같은 코드스페이스 안에서 JupyterLab ↔ VS Code 탭을 오가는 것은 재시작이 아니므로 안전합니다.

같은 git workflow

두 프로필 모두 같은 ~/.gitconfig 를 사용하며, ~/.local/share/code-server/ 와 JupyterLab 설정은 같은 PVC 안에 분리 저장됩니다. Step 3 머지 후에는 단명 PAT 자동 발급 + ~/.gitconfig 자동 시드가 두 프로필 모두에 동등 적용됩니다.

VS Code 확장 권장 셋 (Open VSX)

기본 시드 (vscode-settings.json) 외 사용자가 추가로 설치하면 좋은 확장:

확장용도Open VSX
PythonPython 언어 서버, 디버거ms-python.python (Open VSX 미러)
Jupyternotebook 편집 (셀 실행, kernel)ms-toolsai.jupyter (Open VSX 미러)
GitLensgit blame, history, compareeamodio.gitlens
Pylance타입 추론 (Python 보강)ms-python.vscode-pylance
Rufflinter / formattercharliermarsh.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 로 확인 후 작업.

관련 문서

참조