Notebook이란?
💡 Notebook(노트북) 은 코드, 텍스트 설명, 시각화 결과를 하나의 문서에 담을 수 있는 대화형 개발 환경 입니다. 마치 실험 노트처럼, 코드를 작성하고 바로 실행하여 결과를 확인하면서 작업을 진행할 수 있습니다.Jupyter Notebook과 유사하지만, Databricks Notebook은 다음과 같은 추가 기능을 제공합니다.
| 기능 | 설명 |
|---|---|
| 멀티 언어 지원 | 하나의 노트북 안에서 Python, SQL, Scala, R을 혼합하여 사용할 수 있습니다 |
| 실시간 협업 | 여러 사용자가 동시에 같은 노트북을 편집할 수 있습니다 (Google Docs처럼) |
| 클러스터 연결 | 클릭 한 번으로 분산 컴퓨팅 클러스터에 연결됩니다 |
| 버전 관리 | 노트북의 변경 이력이 자동으로 저장됩니다 |
| Git 연동 | 외부 Git 저장소와 직접 연동하여 코드를 관리할 수 있습니다 |
| 시각화 내장 | 실행 결과를 바로 차트로 변환할 수 있습니다 |
셀(Cell)의 개념
Notebook은 여러 개의 셀(Cell) 로 구성되어 있습니다. 각 셀은 독립적으로 실행할 수 있습니다.셀 유형
| 셀 유형 | 용도 | 표기 방법 |
|---|---|---|
| Code Cell | 코드를 작성하고 실행합니다 | 기본 셀 (별도 표기 불필요) |
| Markdown Cell | 설명 텍스트를 작성합니다 | 셀 상단에 %md 입력 |
| SQL Cell | SQL 쿼리를 실행합니다 | 셀 상단에 %sql 입력 |
| Shell Cell | 쉘 명령어를 실행합니다 | 셀 상단에 %sh 입력 |
언어 전환 (Magic Command)
기본 언어가 Python인 노트북에서도, 셀 첫 줄에 매직 커맨드 를 입력하면 다른 언어를 사용할 수 있습니다.기본 사용법
셀 실행
| 동작 | 단축키 | 설명 |
|---|---|---|
| 현재 셀 실행 | Shift + Enter | 셀을 실행하고 다음 셀로 이동합니다 |
| 현재 셀만 실행 | Ctrl/Cmd + Enter | 셀을 실행하되 커서는 그 자리에 유지합니다 |
| 전체 실행 | 상단 Run All 버튼 | 노트북의 모든 셀을 순서대로 실행합니다 |
| 위쪽 전체 실행 | Run All Above | 현재 셀 위의 모든 셀을 실행합니다 |
셀 관리
| 동작 | 방법 |
|---|---|
| 새 셀 추가 | 셀 사이의 + 버튼 클릭 |
| 셀 삭제 | 셀 우측 ⋮ 메뉴 → Delete |
| 셀 이동 | 셀 좌측을 드래그하여 이동 |
| 셀 분할 | 커서 위치에서 Ctrl/Cmd + Shift + - |
실습: 첫 번째 Notebook 만들기
간단한 실습을 통해 Notebook 사용법을 익혀 보겠습니다.Step 1: Notebook 생성
- Workspace에서 + New→ Notebook 클릭
- 이름:
my-first-notebook - 기본 언어: Python
- Cluster: Serverless 또는 사용 가능한 클러스터 선택
Step 2: Python으로 데이터 생성
Step 3: SQL로 분석
Step 4: 시각화
SQL 셀의 실행 결과 아래에 나타나는 차트 아이콘(📊) 을 클릭하면, 결과를 다양한 차트로 변환할 수 있습니다.| 차트 유형 | 적합한 데이터 |
|---|---|
| Bar Chart | 카테고리별 비교 (도시별 매출 등) |
| Line Chart | 시계열 데이터 (일별 매출 추이 등) |
| Pie Chart | 비율 비교 (카테고리 비중 등) |
| Scatter Plot | 두 변수 간의 관계 |
| Map | 지리 데이터 |
Step 5: Markdown으로 설명 추가
Jupyter에서 넘어온 사람이 처음 당황하는 5가지
Jupyter Notebook을 사용하던 분들이 Databricks Notebook으로 옮기면 겪는 흔한 혼란을 정리했습니다.1. “pip install이 왜 다른가?”
Jupyter에서는 터미널에서pip install을 하면 끝이지만, Databricks에서는 클러스터 전체에 라이브러리를 설치해야 합니다.
⚠️ 주의: %pip install은 해당 노트북이 연결된 클러스터에만 적용됩니다. 다른 사용자가 같은 클러스터를 공유하는 경우, 라이브러리 버전 충돌이 발생할 수 있습니다. 프로덕션에서는 클러스터 설정의 Libraries 탭에서 관리하는 것이 안전합니다.
2. “변수가 왜 사라지나?”
Jupyter는 커널이 항상 살아있지만, Databricks 클러스터는 Auto-termination(자동 종료) 이후 재시작하면 모든 변수가 초기화됩니다. 또한 클러스터를 Detach 했다가 다시 Attach 하면 상태가 초기화됩니다.
💡 해결법: 중간 결과는 Delta 테이블에 저장하세요. df.write.saveAsTable("my_catalog.my_schema.temp_result") 한 줄이면 됩니다. 변수가 사라져도 데이터는 남아 있습니다.
3. “spark라는 변수는 어디서 온 거지?”
Jupyter에서는SparkSession.builder.getOrCreate()를 직접 호출해야 하지만, Databricks에서는 spark 변수가 자동으로 생성 되어 있습니다. 마찬가지로 sc(SparkContext), sqlContext, dbutils도 미리 선언되어 있습니다.
4. “display()가 뭐지?”
Databricks에는display()라는 고유 함수가 있습니다. Jupyter의 df.show()와 달리, 인터랙티브한 테이블 과 차트 시각화 를 제공합니다.
⚠️ 대형 테이블 주의:display(df)는 기본적으로 1,000행만 표시하지만, 내부적으로 쿼리를 실행합니다. 수십억 건의 테이블에display()를 호출하면 집계 없이 전체 스캔이 발생할 수 있습니다. 반드시display(df.limit(100))또는display(df.filter(...))처럼 범위를 제한하세요. 현업에서 실수로display(spark.read.table("10TB_table"))을 호출하여 클러스터가 OOM(메모리 부족)으로 죽는 사고가 실제로 발생합니다.
5. “노트북 출력이 저장되지 않는다?”
Jupyter는.ipynb 파일에 출력 결과가 함께 저장되지만, Databricks Notebook은 기본적으로 코드만 Git에 저장 됩니다. 출력 결과를 보존하려면 HTML로 내보내기 하거나, Databricks의 자체 리비전 히스토리를 사용해야 합니다.
%sql 결과를 Python DataFrame으로 변환하는 실전 패턴
노트북에서%sql과 %python을 혼합할 때, SQL 결과를 Python에서 사용하는 방법이 필요합니다.
방법 1: 임시 뷰 활용 (가장 일반적)
방법 2: spark.sql() 함수 활용
방법 3: _sqldf 매직 변수 (간편하지만 비공식)
💡 현업에서는 이렇게 합니다: SQL이 가독성이 좋은 경우(집계, 조인 등)에는 %sql로 쿼리를 작성하고, 그 결과를 Python에서 ML 모델에 넣거나 복잡한 로직을 처리할 때 혼합 사용합니다. “SQL을 잘 하는 분석가가 쿼리를 작성하고, ML 엔지니어가 Python으로 모델을 학습하는” 협업 패턴이 매우 흔합니다.
Notebook 고급 기능
위젯(Widgets) — 동적 매개변수
위젯을 사용하면 노트북 상단에 드롭다운, 텍스트 입력 등을 추가하여, 코드를 수정하지 않고도 매개변수를 변경할 수 있습니다.dbutils — Databricks 유틸리티
💡 dbutils 는 Databricks Notebook에서 사용할 수 있는 유틸리티 모음입니다. 파일 시스템 접근, 비밀 키 관리, 위젯 제어 등의 기능을 제공합니다.
| 유틸리티 | 용도 | 예시 |
|---|---|---|
dbutils.fs | 파일 시스템 조작 | dbutils.fs.ls("/mnt/data") |
dbutils.widgets | 매개변수 위젯 | dbutils.widgets.text("name", "default") |
dbutils.secrets | 비밀 키 접근 | dbutils.secrets.get("scope", "key") |
dbutils.notebook | 다른 노트북 실행 | dbutils.notebook.run("./other", 60) |
dbutils 핵심 기능 상세
dbutils는 Databricks Notebook에서만 사용할 수 있는 강력한 유틸리티입니다. 각 모듈별로 실전에서 가장 많이 쓰이는 기능을 상세히 살펴보겠습니다.
dbutils.secrets — 비밀 키 관리
비밀번호, API 키, 접속 정보를 코드에 직접 입력하면 안 됩니다.dbutils.secrets를 사용하면 안전하게 관리할 수 있습니다.
⚠️ 현업에서의 사고 사례: 노트북에 AWS Access Key를 하드코딩한 채로 Git에 push하여 보안 사고가 발생한 경우가 실제로 있습니다.dbutils.secrets를 쓰면 값이[REDACTED]로 표시되어 실수로 노출될 위험이 없습니다.
dbutils.widgets — 매개변수화된 노트북
위젯은 노트북을 재사용 가능한 템플릿으로 만들어 줍니다.💡 위젯은 Lakeflow Jobs에서 파라미터로 전달 할 수 있습니다. 개발 시에는 위젯으로 값을 입력하고, 운영 시에는 Jobs에서 자동으로 파라미터를 주입하는 패턴이 매우 유용합니다.
dbutils.notebook.run — 노트북 간 호출
💡 현업에서는 이렇게 합니다: dbutils.notebook.run은 간단한 워크플로우에는 유용하지만, 복잡한 파이프라인에서는 Lakeflow Jobs 를 사용하는 것이 좋습니다. Jobs는 병렬 실행, 재시도, 알림, 의존성 관리 등 운영에 필요한 기능을 모두 제공합니다.
dbutils.fs — 파일 시스템 조작
노트북 버전 관리 전략
노트북의 버전 관리는 크게 두 가지 방법이 있습니다.방법 1: Databricks 내장 리비전 히스토리
노트북 우측 상단의 Revision history 버튼을 클릭하면, 자동 저장된 모든 버전을 확인하고 복원할 수 있습니다.| 장점 | 단점 |
|---|---|
| 별도 설정 불필요 | 브랜치, PR 등의 협업 기능이 없습니다 |
| 자동 저장 | 다른 프로젝트와 코드를 공유하기 어렵습니다 |
| 특정 시점으로 복원 가능 | 코드 리뷰 프로세스가 없습니다 |
방법 2: Git 연동 (Repos)
Databricks의 Repos 기능을 사용하면 GitHub, GitLab, Azure DevOps 등의 Git 저장소와 연동할 수 있습니다.| 장점 | 단점 |
|---|---|
| 브랜치, PR, 코드 리뷰 가능 | 초기 설정이 필요합니다 |
| CI/CD 파이프라인 연동 | Git 사용법을 알아야 합니다 |
| 팀 협업에 필수적 | 노트북 출력 결과는 저장되지 않습니다 |
| 다른 IDE(VS Code 등)와 함께 사용 가능 |
💡 현업에서는 이렇게 합니다: “개인 실험은 Workspace 폴더에서, 프로덕션 코드는 반드시 Repos(Git)로” 라는 원칙을 팀 내에서 명확히 합니다. 또한 Databricks에서는 노트북을 .py 파일로 저장하는 방식(Databricks Notebook 포맷)을 지원하므로, Git에서 diff(변경 사항 비교)가 깔끔하게 표시됩니다.
결과 내보내기
노트북 실행 결과는 다양한 형태로 내보낼 수 있습니다.- DBC 파일: Databricks 전용 포맷 (다른 Workspace로 가져오기 가능)
- IPython Notebook (.ipynb): Jupyter Notebook 포맷
- HTML: 실행 결과를 포함한 웹 페이지
- Python/SQL 파일: 코드만 추출
정리
| 핵심 기능 | 설명 |
|---|---|
| 셀 기반 실행 | 코드를 셀 단위로 나누어 실행하고, 결과를 바로 확인할 수 있습니다 |
| 매직 커맨드 | %sql, %md, %sh 등으로 하나의 노트북에서 여러 언어를 혼합 사용할 수 있습니다 |
| 실시간 협업 | 여러 사용자가 동시에 편집하고, 변경 이력이 자동 저장됩니다 |
| 시각화 | SQL/DataFrame 결과를 클릭 한 번으로 차트로 변환할 수 있습니다 |
| dbutils | 파일 접근, 비밀 키 관리, 위젯 등 유틸리티를 제공합니다 |