P2-10.3 노트북을 재실행 가능한 기록으로 정리하기¶
Section ID:
P2-10.3Version:v2026.09.15
저장된 문서와 실행 상태¶
Jupyter Notebook 파일은 .ipynb 확장자를 가진 JSON 기반 문서입니다. nbformat 문서는 노트북이 셀(cell) 목록과 메타데이터(metadata)를 포함하고, 각 셀이 입력과 출력을 가질 수 있다고 설명합니다. Jupyter 아키텍처 문서도 노트북을 코드, 출력, 마크다운 노트가 함께 저장되는 문서로 설명합니다.
코드와 저장된 출력, 실행 중인 상태는 서로 구분해야 합니다.
flowchart TB
A["노트북 파일<br/>.ipynb 문서"]
B["마크다운 셀<br/>질문과 설명"]
C["코드 셀<br/>Python 코드"]
D["저장된 출력<br/>값·표·차트·오류"]
E["커널 메모리<br/>변수와 import 상태"]
A --> B
A --> C
A --> D
C -. "실행" .-> E
E -. "결과 생성" .-> D
노트북 파일에는 코드와 일부 출력이 남을 수 있습니다. 변수와 import 상태는 실행 중인 커널의 메모리에 있습니다. 커널 재시작은 이 상태를 초기화합니다. 디스크의 파일과 설치된 패키지는 별개이며, 원격 가상 머신 자체가 삭제되면 그 머신에만 있던 파일과 설치 상태도 사라질 수 있습니다.
그래서 노트북은 저장만 해서는 충분하지 않습니다. 저장된 노트북이 나중에 다시 실행되는지도 확인해야 합니다.
출력 지우기와 커널 재시작¶
화면을 비우는 작업과 메모리를 초기화하는 작업은 다릅니다. 다음 표는 노트북을 저장하고 같은 파일 시스템을 계속 사용하는 경우를 기준으로 합니다.
| 작업 | 코드·설명 | 화면의 출력 | 변수·import 상태 | 디스크 파일 |
|---|---|---|---|---|
| 출력만 지우기 | 유지 | 지움 | 유지 | 유지 |
| 커널만 재시작 | 유지 | 남을 수 있음 | 초기화 | 유지 |
| 커널 재시작 후 전체 실행 | 유지 | 실행 결과로 갱신 | 코드 순서대로 생성 | 코드가 읽거나 변경할 수 있음 |
커널 재시작만으로 설치된 패키지나 파일까지 새 환경이 되는 것은 아닙니다. Colab에서 원격 VM을 삭제하고 새로 할당받는 작업은 더 큰 범위의 초기화이며, 그 VM에만 있던 파일과 설치 상태도 사라질 수 있습니다.
준비에서 해석까지¶
좋은 학습용 노트북은 위에서 아래로 읽고 실행할 수 있어야 합니다.
flowchart TB
A["목적"]
B["설정·import"]
C["데이터 준비"]
D["계산"]
E["출력 확인"]
F["해석 기록"]
G["커널 재시작 후 전체 실행"]
H["오류 없이 출력과 해석이 일치하는가?"]
I["저장"]
A --> B --> C --> D --> E --> F --> G --> H
H -->|예| I
H -->|아니오: 수정| B
먼저 무엇을 확인하려는지 적습니다. 그다음 필요한 패키지를 불러오고, 데이터를 준비하고, 계산을 실행합니다. 결과를 본 뒤에는 해석을 적습니다.
이 순서가 무너지면 나중에 노트북을 다시 열었을 때 “왜 이 계산을 했는지”, “어떤 데이터로 실행했는지”, “결과가 어떤 의미인지”를 잃기 쉽습니다.
목적과 데이터 범위¶
노트북의 첫 부분에는 코드보다 목적을 먼저 둡니다.
예를 들어 이 노트북은 작은 점수 데이터에서 평균(mean)과 분산(variance)을 계산해 보고, 데이터의 중심과 퍼짐이 어떻게 다른지 확인한다처럼 시작할 수 있습니다.
노트북은 셀을 추가하다 보면 금방 길어집니다. 목적이 없으면 실험이 흩어지고, 결과가 무엇을 설명하는지 흐려집니다.
목적 셀에는 다음 내용을 짧게 적습니다.
| 항목 | 적는 이유 |
|---|---|
| 확인할 질문 | 실험이 흩어지지 않게 한다 |
| 사용할 데이터 | 결과의 범위를 분명히 한다 |
| 기대하는 출력 | 무엇을 봐야 하는지 정한다 |
| 다루지 않을 것 | 노트북이 과도하게 커지지 않게 한다 |
목적이 다른 실험을 덧붙였다면 제목과 입력 조건도 구분해 남깁니다.
패키지 준비¶
필요한 패키지의 설치 방법과 import를 계산보다 앞에 둡니다. NumPy가 없는 Python 노트북 환경에서는 %pip install numpy를 사용할 수 있습니다. %pip는 현재 커널 환경에 설치하는 IPython 명령이며 일반 Python 스크립트 문법은 아닙니다.
다음 준비 셀은 NumPy를 불러오고 실행 버전을 출력합니다. 출력값은 환경에 따라 달라지므로 실제 사용한 버전을 기록합니다.
입력 데이터¶
파일을 사용하면 경로뿐 아니라 파일의 출처와 준비 방법도 필요합니다. data/scores.csv라는 문자열만 저장해도 파일이 함께 저장되지는 않습니다.
| 입력 종류 | 남길 내용 |
|---|---|
| 작은 예제 | 실제 값과 각 값의 의미 |
| 로컬 파일 | 파일과 폴더 위치, 실행할 작업 폴더 |
| 원격 파일 | 다운로드 출처, 사용한 버전 또는 확인 날짜 |
| 개인 저장소 파일 | 연결 방법과 접근 권한 |
다음 점수 목록은 다섯 학생의 100점 만점 점수입니다. 대입문에는 출력이 없고, 뒤 계산 셀에서 사용할 scores를 준비합니다.
출력과 해석¶
앞 점수의 합은 353, 개수는 5이므로 평균은 70.6입니다. 다음 셀은 값의 의미를 함께 출력합니다.
출력은 mean score: 70.6입니다. 그 아래에는 “다섯 학생의 평균은 70.6점이며 최저 점수는 45점이다”라고 해석을 적을 수 있습니다. 데이터를 바꿨다면 출력과 해석도 함께 갱신합니다.
설정 셀의 실행 순서¶
같은 이름을 서로 다른 셀에서 설정하면 마지막으로 실행한 셀의 값이 사용됩니다. 첫 셀은 학습률을 0.1로 정합니다.
두 번째 셀은 이를 0.01로 바꿉니다.
확인 셀은 현재 값을 출력합니다.
첫 셀, 두 번째 셀, 확인 셀 순으로 실행하면 0.01입니다. 두 번째 셀, 첫 셀, 확인 셀 순으로 실행하면 0.1입니다. 최종 설정을 한 셀에 모으면 문서 순서와 실행 순서가 뒤섞이는 문제를 줄일 수 있습니다.
따라서 중요한 노트북은 다음처럼 확인합니다.
- 불필요한 임시 셀을 정리하고 필요한 준비 셀을 남긴다.
- Python 커널을 다시 시작한다.
- 첫 셀부터 마지막 셀까지 순서대로 실행한다.
- 오류가 없는지, 출력이 설명과 맞는지 확인한다.
- 확인한 코드·출력·해석을 저장한다.
난수의 시작 상태¶
AI와 통계 실습에서는 표본 추출이나 초기값 설정에 난수를 사용합니다. 다음 코드는 난수 생성기를 seed 42로 만들고 다섯 값 중 세 개를 중복 없이 뽑습니다. 검수 환경의 출력은 [50 10 40]입니다.
여기서 seed는 같은 난수 흐름을 다시 만들기 위한 시작값으로 볼 수 있습니다. 모든 실습에서 seed를 반드시 고정해야 하는 것은 아니지만, 같은 결과를 다시 보고 싶다면 seed를 남기는 것이 좋습니다.
주의할 점은 seed가 모든 재현성 문제를 해결하지는 않는다는 것입니다. 패키지 버전, 실행 환경, 하드웨어, 병렬 처리 방식에 따라 결과가 달라질 수도 있습니다. 같은 생성기에서 추출만 다시 실행하면 난수 상태가 이미 진행되어 결과가 달라질 수 있습니다. 생성기를 다시 만드는 줄부터 실행해야 같은 시작 상태로 돌아갑니다.
공유할 준비 과정¶
Colab FAQ는 노트북을 공유하면 텍스트, 코드, 출력, 댓글 같은 노트북 내용은 공유될 수 있지만, 가상 머신(virtual machine), 런타임 파일, 설치한 라이브러리는 공유되지 않는다고 설명합니다.
따라서 Colab 노트북을 공유할 때는 다음을 확인해야 합니다.
| 확인할 것 | 이유 |
|---|---|
| 필요한 패키지 설치 셀이 있는가 | 공유받은 사람의 런타임에는 설치되어 있지 않을 수 있다 |
| 데이터 파일 준비 방법이 있는가 | 내 런타임 파일은 공유되지 않을 수 있다 |
| Drive 파일 권한이 필요한가 | 개인 Drive 파일은 상대방이 접근하지 못할 수 있다 |
| 위에서 아래로 실행되는가 | 숨은 상태 없이 재현되는지 확인한다 |
| 출력이 오래된 것은 아닌가 | 저장된 출력과 현재 코드 결과가 다를 수 있다 |
노트북에서 스크립트로 옮기는 기준¶
노트북에서 시작한 코드는 시간이 지나면 길어집니다. 어느 순간에는 .py 스크립트로 옮기는 편이 낫습니다.
다음 신호가 보이면 분리를 검토합니다.
| 신호 | 의미 |
|---|---|
| 같은 코드를 여러 셀에 반복한다 | 함수(function)로 묶을 수 있다 |
| 셀 순서가 자주 꼬인다 | 스크립트 실행 순서가 더 안전할 수 있다 |
| 매번 같은 전처리를 한다 | 별도 함수나 모듈(module)로 옮길 수 있다 |
| 다른 노트북에서도 같은 코드를 쓴다 | 공통 .py 파일이 필요할 수 있다 |
| 자동 실행이 필요하다 | 노트북보다 스크립트가 자연스럽다 |
흐름은 다음처럼 잡을 수 있습니다.
flowchart TB
A["노트북 탐색"]
B["반복 계산을 함수로 묶기"]
C["모듈 파일<br/>공통 함수 저장"]
D["노트북에서 import<br/>결과 비교와 해석"]
E["스크립트에서 import<br/>정해진 작업 실행"]
A --> B --> C
C --> D
C --> E
공통 계산은 모듈에 두고 노트북에서는 입력과 결과 해석을 관리할 수 있습니다.
사례: 삭제한 준비 셀¶
다섯 점수의 평균이 정상적으로 출력된 뒤, scores를 만드는 준비 셀을 삭제했다고 하겠습니다. 같은 커널에서 평균 셀만 다시 실행하면 기존 변수가 남아 있어 여전히 70.6이 출력됩니다.
하지만 커널을 재시작한 뒤 평균 셀을 실행하면 scores가 없어 NameError가 발생합니다. 준비 셀을 복구하고 위에서 아래로 실행해야 결과를 다시 만들 수 있습니다. 저장된 출력이 남아 있다는 사실만으로 현재 코드가 재실행된다고 판단할 수 없는 이유입니다.
실행 가능한 기록 예제¶
다음 노트북에는 목적, 입력과 기준값, 계산, 출력, 해석을 순서대로 담았습니다. Python 표준 기능만 사용하며 외부 파일이나 패키지 설치가 필요하지 않습니다. 파일을 내려받아 Jupyter에서 열거나 Colab의 노트북 업로드 기능으로 열 수 있습니다.
기본 점수는 [82, 75, 45, 90, 61], 기준은 60입니다. 전체 실행 결과는 다음과 같습니다.
입력 셀에서 기준을 80으로 바꾸고 계산·출력 셀까지 다시 실행하면 평균은 70.6으로 유지되고 선택 결과는 [82, 90]이 됩니다. 마지막 점수를 100으로 바꾸면 평균은 78.4가 됩니다. 점수 목록을 비우면 계산 셀에서 ValueError가 발생하도록 했습니다. 오류가 난 뒤 이전 출력 셀이 남아 있더라도 이번 실행의 결과로 읽지 않습니다.
변경한 조건에 맞춰 해석 셀도 수정한 뒤, 커널을 재시작하고 전체 실행합니다. 오류가 없고 출력과 해석이 일치하면 노트북을 저장합니다. 저장된 출력은 독자가 비교할 기록이며, 새 실행을 대신하지는 않습니다.
체크리스트¶
- 좋은 노트북을
다시 실행 가능한 기록으로 설명할 수 있는가? - 숨은 상태(hidden state)가 왜 문제인지 말할 수 있는가?
- 노트북 앞쪽에 setup 셀과 데이터 준비 셀을 두는 이유를 설명할 수 있는가?
- 런타임 재시작 후 위에서 아래로 다시 실행해야 하는 이유를 말할 수 있는가?
- 노트북의 첫 부분에 목적과 범위가 있는가?
- 필요한 import와 패키지 설치 셀이 앞쪽에 있는가?
- 데이터 파일을 어디에서 가져오는지 설명되어 있는가?
- 셀을 위에서 아래로 다시 실행해도 오류가 없는가?
- 출력 아래에 해석이 남아 있는가?
- 랜덤성이 있는 경우 seed나 변동 가능성을 설명했는가?
- Colab 공유 시 파일, 패키지, 권한 문제가 생기지 않는지 확인했는가?
- 반복되는 코드를 함수나
.py파일로 분리할 필요가 있는가? - 노트북을 문서이면서 실행 기록으로 읽고,
같은 파일보다같은 준비 흐름이 중요하다는 점을 설명할 수 있는가?
출처와 참고 자료¶
- Project Jupyter, Architecture, Jupyter Documentation, 확인 날짜: 2026-09-15. 노트북 문서가 코드, 출력, markdown notes를 함께 저장한다는 설명 확인에 사용했다.
- Project Jupyter, The Jupyter Notebook Format, nbformat documentation, 확인 날짜: 2026-09-15.
.ipynb파일이 셀 목록과 메타데이터, 셀 입력·출력을 담는 JSON 기반 형식이라는 설명 확인에 사용했다. - Google, Google Colab FAQ, Google Colab, 확인 날짜: 2026-09-15. Colab 공유에서 노트북 내용과 런타임 상태가 분리된다는 주의점을 확인하는 근거로 사용했다.
- NumPy Developers, Random Generator, 확인 날짜: 2026-09-15. 난수 생성기와 seed·상태 및 버전별 재현성 한계의 근거.