
Python으로 데이터 분석이나 AI를 시작하면 생각보다 자주 마주치는 단어들이 존재함.
.py.ipynb처음에는 전부 비슷해 보이지만 실제로는 각각 담당하는 역할이 다름.
이번 글에서는 단순히 사용 방법만 외우는 것이 아니라 다음 질문을 하나씩 해결하면서 전체 구조를 이해하는 것이 목적임.
"내가 VS Code에서 작성한 Python 코드는 도대체 누가 실행하는 것일까?"
Jupyter Notebook에서 말하는
Jupyter는 무슨 뜻일까?
Jupyter는 대화형 컴퓨팅 환경을 제공하는 프로젝트임.
이름은 전통적으로 다음 세 언어에서 유래한 것으로 설명됨.
즉, Jupyter가 처음부터 Python만을 위한 프로그램은 아니라는 의미.
Python뿐만 아니라 해당 언어를 실행할 수 있는 Kernel만 존재한다면 다양한 언어를 Notebook 환경에서 실행 가능.
대표적인 예시는 다음과 같음.
| 언어 | 사용할 수 있는 Kernel 예시 |
|---|---|
| Python | ipykernel |
| R | IRkernel |
| C++ | xeus-cling |
| JavaScript | ijavascript |
| Java | IJava |
.ipynb = Python 파일이라고 생각하면 Kernel의 역할을 이해하기 어려워지기 때문임.
정확하게는 다음 구조에 가까움.
.ipynb
↓
선택한 Kernel
↓
해당 언어 실행
따라서 .ipynb는 특정 언어 그 자체가 아니라 코드와 실행 결과 등을 담을 수 있는 Notebook 문서 형식으로 이해하는 것이 중요함.
Notebook 화면이 있는데 왜 Kernel이라는 것이 또 필요할까?
VS Code나 Jupyter Notebook은 우리가 코드를 작성하고 결과를 확인하는 화면을 제공함.
하지만 화면 자체가 Python 코드를 실행하는 것은 아님.
실제 코드를 실행해 주는 별도의 실행 엔진이 필요함.
이것이 Kernel임.
코드를 전달받아 실제로 실행하고 결과를 다시 Notebook에 전달하는 실행 프로세스
쉽게 구조화하면 다음과 같음.
사용자
↓
VS Code / Jupyter Notebook
↓
Kernel
↓
Python 실행
↓
실행 결과
↓
VS Code / Jupyter Notebook
전체 구조를 식당으로 생각하면 이해하기 쉬움.
| 개념 | 비유 |
|---|---|
| 사용자 | 손님 |
| VS Code / Jupyter | 주문을 전달하는 공간 |
.ipynb | 메뉴와 주문 내용이 적힌 종이 |
| Kernel | 실제 요리를 수행하는 주방장 |
| 가상환경 | 주방장이 사용하는 전용 주방 |
| 라이브러리 | 주방 안에 준비된 식재료와 조리도구 |
손님이 메뉴판에 주문을 적었다고 해서 음식이 자동으로 만들어지는 것은 아님.
실제로 요리하는 주방장, 즉 Kernel이 필요한 구조임.
그러면
ipykernel은 그냥 Python을 실행하는 Kernel인 걸까?
핵심적으로 맞는 이해임.
ipykernel이라는 이름을 나누어 보면 역할을 이해하기 쉬움.
i + py + kernel
즉,
Python 코드를 대화형으로 실행할 수 있도록 Jupyter 환경과 연결해 주는 Python Kernel
이라고 이해 가능함.
ipykernel은 IPython 기반의 Jupyter용 Python Kernel임.
Python을 실행하는 건 알겠는데 왜 굳이 '대화형'이라는 이름을 사용할까?
핵심은 코드를 한 번에 전부 실행하는 것이 아니라 조금씩 실행하고 바로 결과를 확인할 수 있기 때문임.
예를 들어 다음 코드를 실행한다고 가정함.
a = 10
Kernel이 살아 있는 상태에서 다음 셀을 실행함.
b = 20
그리고 다시 다음 코드를 실행함.
a + b
결과:
30
첫 번째 셀에서 만든 a와 두 번째 셀에서 만든 b가 Kernel의 메모리에 남아 있기 때문에 세 번째 셀에서 다시 사용 가능함.
사람과 다음과 같은 대화를 했다고 가정함.
나: 어제 치킨 먹었어.
상대방: 오.
나: 그거 맛있더라.
상대방은 앞의 대화를 기억하기 때문에 그거 = 치킨이라는 사실을 이해함.
대화형 실행도 비슷한 구조임.
a = 10
라고 먼저 실행하면 Kernel이 a를 기억함.
이후
print(a)
만 실행해도 이전 실행 상태를 기억하고 있기 때문에 다음 결과 출력이 가능함.
10
데이터 분석과 AI 실험에서는 다음과 같은 확인 작업의 반복이 많기 때문임.
데이터 불러오기
↓
잘 불러왔는지 확인
↓
전처리
↓
결과 확인
↓
그래프 생성
↓
결과 확인
↓
모델 학습
↓
성능 확인
즉,
코드 작성 → 실행 → 결과 확인 → 수정 → 다시 실행
이라는 반복적인 작업 구조에 적합한 방식임.
그런데 Kernel 말고 Python Interpreter라는 것도 나오는데 이건 무엇일까?
Python Interpreter는 Python 코드를 읽고 실행하는 Python 실행기임.
컴퓨터에 Python을 설치하면 사용할 수 있게 되는 python 실행 프로그램이 대표적인 Python Interpreter임.
예를 들어 터미널에서 다음 명령을 실행하는 상황임.
python main.py
이때 main.py를 읽고 실행하는 주체가 Python Interpreter임.
Python 코드를 위에서부터 실행하면서 필요한 연산을 수행하고 오류가 발생하면 해당 위치에서 오류를 알려주는 역할 수행.
예를 들어 다음 코드가 있다고 가정함.
a = 10
b = 20
print(a + b)
Python Interpreter가 이 코드를 읽고 실행하여 다음 결과 생성.
30
둘 다 Python 코드를 실행한다면 Python Interpreter와 ipykernel은 같은 것 아닐까?
완전히 같은 개념은 아님.
Python Interpreter가 Python 코드 실행의 기본 주체라면, ipykernel은 이 Python 실행 환경을 Jupyter와 연결하여 대화형으로 사용할 수 있도록 하는 Kernel에 가까움.
구조를 단순화하면 다음과 같음.
.py 실행
.py
↓
Python Interpreter
↓
실행
Notebook에서는 다음 구조로 이해 가능함.
.ipynb
↓
Jupyter / VS Code
↓
ipykernel
↓
Python 실행 환경
↓
실행 결과 반환
즉,
ipykernel이 Python 자체를 대체하는 것이 아니라 Python 실행 환경을 Jupyter의 대화형 구조와 연결하는 역할
이라는 이해가 중요함.
.ipynb는 왜 Kernel을 선택해야 할까?
.ipynb파일은 Kernel을 연결해야 실행할 수 있는 것일까?
맞음.
Notebook은 코드가 적혀 있는 문서이므로 어떤 실행 환경으로 해당 코드를 실행할 것인지 결정해야 함.
Python Notebook이라면 보통 Python 환경을 사용하는 ipykernel 선택이 필요함.
VS Code에서는 오른쪽 위의 다음 메뉴에서 확인 가능함.
Select Kernel
여기에서 프로젝트의 Python 가상환경 등을 선택하여 Notebook 실행 환경 지정 가능.
반드시 사용자가 매번 jupyter kernelspec 명령으로 직접 등록해야 한다는 의미는 아님.
VS Code에서는 설치된 Python 환경을 찾아 Kernel로 선택할 수 있는 경우도 많음.
따라서 핵심은 다음과 같음.
.ipynb실행에는 어떤 Kernel을 사용할 것인지 연결이 필요함
내 컴퓨터에는 어떤 Jupyter Kernel이 등록되어 있을까?
터미널에서 다음 명령 사용.
jupyter kernelspec list
등록된 Kernel 목록 확인 가능.
예전에 만든 Kernel이 너무 많다면 어떻게 삭제할까?
다음 명령 사용.
jupyter kernelspec uninstall 삭제할커널이름
여기서 중요한 점은 Kernel 등록 정보를 삭제하는 것과 실제 Python 가상환경 폴더를 삭제하는 것은 다른 작업이라는 점임.
즉, 일반적으로 kernelspec uninstall은 Jupyter에 등록된 Kernel 정보를 제거하는 작업임.
.py 파일은 무엇이 다를까?
.ipynb가 Kernel을 이용한다면.py는 완전히 다른 것일까?
.py는 일반적인 Python Script 파일임.
예를 들어 다음 파일 존재.
main.py
터미널에서 다음과 같이 실행 가능.
python main.py
Python Interpreter가 파일의 코드를 실행함.
.py와 .ipynb 비교| 구분 | .py Python Script | .ipynb Jupyter Notebook |
|---|---|---|
| 기본 실행 방식 | 스크립트 단위 실행 | Cell 단위 대화형 실행 |
| 실행 상태 | 실행 프로세스 종료 시 메모리 해제 | Kernel이 살아 있는 동안 상태 유지 |
| 주요 용도 | 프로그램, 자동화, 서버, 배포 | 데이터 분석, AI 실험, 시각화 |
| 실행 환경 | Python Interpreter | Jupyter Kernel(ipykernel 등) |
| 부분 실행 | 기본 실행은 전체 Script | Cell 단위 실행 |
| 결과 확인 | 터미널 등 | Notebook Cell 아래 |
| Git 관리 | 일반 텍스트라 비교 용이 | JSON 구조와 출력값 등으로 Diff가 복잡할 수 있음 |
.py는 완성된 영화에 가까움.
처음
↓
장면 1
↓
장면 2
↓
장면 3
↓
끝
일반적인 Script 실행에서는 처음부터 마지막까지 프로그램 흐름에 따라 실행됨.
반면 .ipynb는 촬영 현장과 비슷함.
Scene 1 촬영
↓
결과 확인
Scene 2 촬영
↓
결과 확인
Scene 2 수정
↓
다시 촬영
따라서 데이터를 탐색하거나 AI 모델을 실험하는 과정에서 Notebook 방식의 장점 발생.
.py가 끝나면 메모리는 어떻게 될까?
.py파일은 실행이 끝나면 메모리가 전부 사라지고 출력값만 남는 걸까?
일반적인 Script 실행 프로세스를 기준으로 보면 프로그램 종료와 함께 해당 프로세스가 사용하던 메모리도 해제됨.
흐름은 다음과 같음.
python main.py
Python 프로세스 시작.
a = 10
변수 a가 실행 중인 프로세스의 메모리에 존재.
print(a)
터미널에 다음 내용 출력.
10
마지막 코드까지 실행 완료 후 Python 프로세스 종료.
해당 프로세스가 사용하던 변수와 객체의 메모리 해제.
따라서 프로그램이 끝난 뒤 이전 실행의 a를 다음 실행에서 그대로 가져오는 것은 불가능함.
터미널에 다음 내용이 보일 수 있음.
10
하지만 이것은 a라는 변수가 계속 Python 메모리에 존재한다는 의미가 아님.
터미널에 출력된 실행 기록이 화면에 남아 있는 것임.
따라서 다음 실행에서 다시 해당 값이 필요하다면 재계산하거나 파일 등에 저장 필요.
예를 들어 CSV 저장.
df.to_csv("result.csv")
이미지 저장.
plt.savefig("result.png")
모델 저장.
torch.save(model.state_dict(), "model.pt")
RAM의 변수와 SSD/HDD의 파일은 서로 다른 저장 방식이기 때문임.
프로그램 실행 중
↓
RAM에 변수 존재
↓
프로그램 종료
↓
RAM의 실행 상태 해제
반면 파일로 저장하면 다음 구조가 됨.
프로그램 실행
↓
결과 생성
↓
파일 저장
↓
프로그램 종료
↓
SSD/HDD에 결과 파일 유지
.py에서도 pandas 같은 라이브러리가 필요하지 않을까?
.py는 Kernel이 필요 없다고 해도 pandas, numpy 같은 라이브러리는 필요하지 않을까?
당연히 필요함.
여기서 가장 중요한 구분이 등장함.
Kernel 등록과 라이브러리 설치는 서로 다른 개념
pip install pandas
현재 Python 환경에 pandas 설치.
Notebook이 어떤 Python 환경을 사용해서 코드를 실행할지 연결하는 과정.
둘을 방으로 비유하면 다음과 같음.
가상환경
= 하나의 전용 방
pandas / numpy / torch
= 방 안에 있는 도구
ipykernel
= 그 방의 Python을 Jupyter와 연결해주는 역할
따라서 .py와 .ipynb 모두 pandas를 사용한다면 실제로 실행되는 Python 환경에 pandas가 설치되어 있어야 함.
그냥 컴퓨터에 pandas를 한 번 설치하면 되는데 왜 굳이 가상환경을 만들까?
프로젝트마다 필요한 Python과 라이브러리 버전이 다를 수 있기 때문임.
예를 들어 다음 두 프로젝트 존재.
프로젝트 A
Python 3.11
pandas 2.x
torch 2.x
프로젝트 B
Python 3.9
pandas 1.x
tensorflow 특정 버전
모든 라이브러리를 하나의 전역 환경에 설치하면 프로젝트 간 버전 충돌 가능성 증가.
따라서 프로젝트별 독립 환경 구성.
Project A
└── .venv
├── Python
├── pandas
└── torch
Project B
└── .venv
├── Python
├── pandas
└── tensorflow
가상환경은 프로젝트 전용 주방과 같은 개념.
프로젝트 A 주방에는 한식 재료가 있고, 프로젝트 B 주방에는 양식 재료가 있는 형태.
각 프로젝트가 자기에게 필요한 도구와 라이브러리만 사용하는 구조.
.py는 어떤 가상환경의 라이브러리를 사용할까?컴퓨터에 가상환경이 여러 개 있다면
.py는 어디의 pandas를 가져오는 걸까?
결국 어떤 Python Interpreter로 해당 파일을 실행했느냐가 중요함.
가상환경을 활성화한 터미널에서 다음과 같이 실행한다고 가정함.
python test.py
현재 활성화된 가상환경의 Python이 실행되고, 해당 환경에 설치된 라이브러리 사용.
예를 들어 macOS/Linux에서는 상황에 따라 다음과 같이 가상환경 활성화 가능.
source .venv/bin/activate
Windows에서는 환경과 Shell에 따라 다음과 같은 방식 사용.
.venv\Scripts\activate
활성화 이후:
python test.py
해당 가상환경의 Python과 라이브러리 사용.
Select Interpreter는 무엇일까?VS Code에서 자꾸
Python: Select Interpreter가 나오는데 도대체 무엇을 선택하라는 것일까?
VS Code에게 다음을 알려주는 과정임.
"이 프로젝트의 Python 코드를 어떤 Python 환경을 기준으로 처리할 것인가?"
컴퓨터에 다음 Python들이 존재할 수 있음.
시스템 Python
Python 3.11
Python 3.12
Project A .venv
Project B .venv
Conda Environment
VS Code 입장에서는 어떤 Python을 사용해야 하는지 결정 필요.
따라서 Select Interpreter를 통해 프로젝트에서 사용할 Python 환경 선택.
명령 팔레트 실행.
Cmd + Shift + P
Ctrl + Shift + P
검색창에 다음 입력.
Select Interpreter
다음 메뉴 선택.
Python: Select Interpreter
이후 프로젝트 내부 가상환경 선택.
예:
.venv
또는 macOS/Linux의 경우 다음과 유사한 경로 확인.
./.venv/bin/python
Windows에서는 다음과 유사한 경로 사용.
.venv\Scripts\python.exe
예를 들어 .venv에는 pandas가 설치되어 있다고 가정함.
.venv
├── Python
├── pandas
├── numpy
└── ipykernel
하지만 VS Code가 시스템 Python을 사용하고 있다면 다음 코드에서 오류 발생 가능.
import pandas as pd
대표적인 오류:
ModuleNotFoundError: No module named 'pandas'
pandas가 컴퓨터에 전혀 없는 것이 아니라,
현재 코드를 실행하고 있는 Python 환경에는 pandas가 없는 상황
일 수 있음.
따라서 Python 환경 문제를 확인할 때 중요한 질문은 다음과 같음.
"pandas를 설치했는가?"
뿐만 아니라
"지금 실행 중인 Python과 pandas를 설치한 Python이 같은 환경인가?"
라는 확인 필요.
.venv를 터미널에서 활성화하면 Interpreter 선택은 안 해도 될까?터미널에
(.venv)가 떠 있다면 VS Code에서 Python Interpreter를 따로 선택하지 않아도 될까?
실행 방식에 따라 구분 필요.
터미널에 다음처럼 가상환경이 활성화되어 있다고 가정함.
(.venv)
그리고 직접 다음 명령 실행.
python test.py
이 경우 Shell의 python이 활성화된 .venv의 Python을 가리키도록 설정되어 있으므로 해당 환경을 이용한 실행 가능.
활성화된 .venv
↓
python test.py
↓
.venv의 Python
↓
.venv의 pandas 사용
VS Code에서 오른쪽 위의 ▶ 버튼 등을 사용하는 경우에는 VS Code가 선택하고 있는 Python 환경 설정도 중요함.
따라서 VS Code 작업에서는 프로젝트의 .venv를 Interpreter로 선택해 두는 것이 안전함.
Cmd/Ctrl + Shift + P
↓
Python: Select Interpreter
↓
프로젝트 .venv 선택
프로젝트를 열었을 때 한 번 다음 설정 수행.
Select Interpreter
↓
.venv 선택
이를 통해 코드 분석, 실행, 디버깅 등의 환경을 프로젝트 가상환경과 일치시키기 쉬워짐.
.py에서도 Notebook처럼 조금씩 실행할 수 없을까?
.py파일은 항상 처음부터 끝까지 실행해야 할까?
일반적인 Script 실행은 파일 단위 실행이지만 VS Code에서는 .py 파일을 Cell 형태로 나누어 Interactive Window에서 실행하는 기능 사용 가능.
이때 사용하는 것이 다음 주석임.
# %%
# %%란 무엇일까?.py 파일에 다음처럼 작성.
# %% [1번 블록] 데이터 정의하기
import pandas as pd
a = 10
b = 20
print("데이터 입력 완료!")
다음 Cell 작성.
# %% [2번 블록] 계산하기
result = a + b
print(f"결과는? {result}")
VS Code가 # %%를 기준으로 코드 영역을 Cell처럼 인식 가능.
화면 위에 다음과 같은 메뉴 표시 가능.
Run Cell
Run Below
Debug Cell
Run Cell을 누르면 해당 영역만 실행 가능.
# %%을 사용하면 왜 메모리가 유지될까?
.py인데 왜 첫 번째 블록에서 만든a를 두 번째 블록에서 사용할 수 있을까?
python test.py로 일반 Script 실행을 하는 것이 아니라 VS Code의 Interactive Window를 통해 실행하고 있기 때문임.
Interactive Window에서는 Jupyter 계열의 실행 환경을 이용하여 Cell 단위 실행 가능.
따라서 다음 코드 실행.
# %%
a = 10
b = 20
이후 다음 Cell 실행.
# %%
result = a + b
print(result)
결과:
30
실행 세션이 유지되는 동안 앞에서 만든 변수 사용 가능.
# %%은 왜 유용할까?.py 형태 유지파일 자체는 여전히 다음과 같은 일반 Python Script임.
analysis.py
# %%은 Python 문법상 주석이므로 일반 Script 실행에서는 주석으로 처리됨.
따라서 다음 실행도 가능.
python analysis.py
VS Code에서는 다음 방식 사용 가능.
Run Cell
또는 환경과 단축키 설정에 따라 Cell 실행 단축키 사용 가능.
.py는 일반 텍스트 기반 파일이므로 Git에서 변경 사항 확인이 비교적 단순함.
반면 .ipynb는 Notebook 구조와 출력 결과 등의 정보가 JSON 형태로 저장되기 때문에 Git Diff가 복잡해질 수 있음.
따라서 다음 방식 활용 가능.
개발 / 분석
↓
.py + # %%
↓
Cell 단위 실험
↓
Git 관리
↓
최종 Script 실행
# %%을 작성했는데 왜 Interactive Window가 안 열릴까?
# %%을 적었는데 왜python test.py를 실행하면 Interactive Window가 안 나올까?
여기에서 실행 방식의 차이가 중요함.
터미널에서 다음을 입력하면:
python test.py
일반적인 Python Script 실행임.
즉,
test.py
↓
Python Interpreter
↓
파일 실행
# %%은 Python 입장에서는 단순한 주석임.
따라서 Interactive Window를 사용하려면 VS Code가 제공하는 Cell 실행 기능 사용 필요.
예:
Run Cell
즉,
# %%을 적는 것만으로 실행 방식이 자동으로 바뀌는 것이 아니라 VS Code의 Interactive 실행 기능으로 해당 Cell을 실행해야 함
Run Cell을 눌렀는데 pandas 오류가 발생한다면?
import pandas as pd에서 오류가 발생한다면 무엇을 확인해야 할까?
대표적으로 두 가지 확인 필요.
현재 사용할 가상환경을 활성화한 상태에서 필요한 패키지 설치.
pip install pandas jupyter ipykernel
pandas를 설치한 환경과 VS Code / Interactive Window가 사용하는 환경이 동일한지 확인 필요.
예:
.venv에 pandas 설치
↓
VS Code도 .venv 선택
↓
Interactive 환경도 해당 Python 사용
pip install 결과는 어떻게 읽을까?
Collecting과Requirement already satisfied는 무슨 뜻일까?
다음과 같은 메시지가 나왔다고 가정함.
Collecting pandas
해당 환경에 필요한 pandas 패키지를 내려받아 설치하는 과정이라는 의미.
반면 다음과 같은 메시지:
Requirement already satisfied: ipykernel ...
현재 pip가 대상으로 삼고 있는 Python 환경에 해당 패키지가 이미 설치되어 있다는 의미.
터미널에 다음과 같이 표시되어 있는 상태에서 설치했다면:
(.venv)
일반적으로 활성화된 가상환경의 pip를 사용하게 됨.
보다 명확하게 현재 Python에 설치하고 싶다면 다음 형태도 활용 가능.
python -m pip install pandas jupyter ipykernel
현재 python과 연결된 pip를 사용한다는 점이 명확해지는 방식임.
여기까지의 관계를 한 번에 연결하면 다음과 같음.
사용자
│
▼
VS Code / Jupyter
│
├────────────────────────────┐
│ │
.py .ipynb
│ │
▼ ▼
Python Interpreter Jupyter Kernel
│
▼
ipykernel
│
▼
Python 실행 환경
그리고 프로젝트마다 다음과 같은 가상환경 사용 가능.
Project
│
├── main.py
├── analysis.ipynb
│
└── .venv
│
├── Python
├── pandas
├── numpy
├── torch
└── ipykernel
핵심은 .py냐 .ipynb냐만 보는 것이 아니라 실제로 어떤 Python 환경이 코드를 실행하고 있는지 확인하는 것임.
GPU 서버에 연결했다고 해서 Python 코드가 자동으로 GPU를 사용할까?
그렇지 않음.
GPU가 존재하는 환경에서도 PyTorch 모델과 데이터를 실제 GPU 장치로 이동시키는 과정 필요.
먼저 CUDA 사용 가능 여부 확인.
import torch
device = torch.device(
"cuda" if torch.cuda.is_available() else "cpu"
)
print(f"현재 사용 중인 장치: {device}")
결과가 다음과 같다면 GPU 사용 가능 상태.
cuda
하지만 이것만으로 모든 데이터와 모델이 자동으로 GPU에서 실행되는 것은 아님.
데이터와 모델을 해당 장치로 이동 필요.
data = torch.randn(3, 3)
model = MyAIModel()
data = data.to(device)
model = model.to(device)
output = model(data)
.to(device)가 필요할까?CPU 메모리와 GPU 메모리는 별도의 영역이기 때문임.
따라서 모델과 Tensor가 어느 장치에 존재하는지 지정 필요.
Python 코드
↓
PyTorch
↓
device 결정
↓
CPU 또는 CUDA
↓
데이터 / 모델 이동
↓
연산 수행
즉,
GPU가 존재하는 것과 내 코드가 GPU를 실제로 사용하는 것은 서로 다른 문제
라는 이해 필요.
Python 코드를 Jupyter 환경에서 대화형으로 실행할 수 있도록 연결하는 Python Kernel이라는 이해.
Python 코드를 전달받아 실행하고 결과를 Jupyter나 VS Code에 반환하는 역할.
맞는 이해.
다만 단순히 Python을 사용한다는 의미에서 한 단계 더 나아가,
Python 코드를 Cell 단위로 실행하고, 실행 상태를 유지하면서 다음 코드와 이어갈 수 있는 구조
라는 점이 핵심.
.ipynb는 Kernel을 연결해야 하는 거구나?"맞음.
Notebook에서 작성된 코드를 실행하기 위해 어떤 언어와 실행 환경을 사용할 것인지 Kernel 선택 필요.
Python을 사용할 경우 대표적으로 ipykernel 사용.
핵심적으로 맞음.
정확히는 Jupyter에서 Python 코드를 Cell 단위로 대화형 실행하고 실행 상태를 유지하기 위해 ipykernel 사용.
따라서 데이터 분석과 AI 실험에서 다음 과정에 적합함.
데이터 로드
↓
확인
↓
전처리
↓
확인
↓
모델 실행
↓
결과 확인
.py 파일은 ipykernel 등록을 안 해도 돼?"일반적인 Script 실행이라면 ipykernel 등록 없이 실행 가능.
python main.py
Python Interpreter를 이용한 실행.
다만 VS Code의 # %% Interactive Window처럼 Jupyter 기반의 대화형 기능을 사용한다면 관련 Jupyter/IPython 실행 환경 사용.
.py도 라이브러리는 필요하지 않아?"당연히 필요함.
예를 들어:
import pandas as pd
import numpy as np
를 사용한다면 현재 코드를 실행하는 Python 환경에 pandas와 numpy가 설치되어 있어야 함.
pip install pandas numpy
핵심 구분:
라이브러리 설치
≠
Kernel 연결
Python 코드를 읽고 실제로 실행하는 Python 실행 프로그램.
예:
python main.py
여기에서 python이 가리키는 실행 환경이 중요함.
가상환경을 사용하는 이유도 결국 프로젝트마다 독립적인 Python Interpreter와 라이브러리 환경을 구성하기 위함.
데이터 분석과 AI는 한 번에 완성된 프로그램을 실행하는 것보다 중간 결과를 계속 확인하는 과정이 중요하기 때문.
데이터 불러오기
→ 확인
결측치 처리
→ 확인
그래프 생성
→ 확인
Feature 생성
→ 확인
모델 학습
→ 성능 확인
따라서 코드와 결과를 계속 주고받을 수 있는 Interactive 방식의 높은 활용성.
.py 파일은 끝나면 메모리가 다 날아가는 거야?"일반적인 Script 실행에서는 프로그램 프로세스가 종료되면 해당 실행에서 사용하던 메모리 상태도 해제됨.
따라서 다음 실행에서 이전 변수 직접 사용 불가.
필요한 결과는 파일이나 DB 등에 별도 저장 필요.
RAM
→ 실행 중 임시 상태
SSD / HDD / DB
→ 실행 이후에도 유지할 데이터
.py에서도 Notebook처럼 한 블록씩 실행하고 싶다면?"VS Code에서 # %% 사용 가능.
# %%
a = 10
b = 20
# %%
result = a + b
print(result)
Run Cell을 이용하여 Interactive Window에서 Cell 단위 실행 가능.
프로젝트 내부에 .venv 존재 여부 확인.
project/
├── .venv/
└── test.py
가상환경을 활성화한 뒤:
python -m pip install pandas jupyter ipykernel
macOS:
Cmd + Shift + P
Windows:
Ctrl + Shift + P
검색:
Python: Select Interpreter
프로젝트의 .venv 선택.
.py 파일 작성# %% [1번 블록] 데이터 정의
import pandas as pd
a = 10
b = 20
print("데이터 입력 완료!")
다음 Cell 작성.
# %% [2번 블록] 계산
result = a + b
print(f"결과는? {result}")
Run Cell 실행# %% 위에 표시되는 다음 버튼 사용.
Run Cell
첫 번째 Cell 실행 후 두 번째 Cell 실행.
예상 결과:
데이터 입력 완료!
이후:
결과는? 30
첫 번째 Cell의 변수 상태를 Interactive 실행 세션이 유지하고 있기 때문에 두 번째 Cell에서 사용 가능.
같은 test.py 파일이라도 실행 방법에 따라 차이 발생.
python test.py
구조:
test.py
↓
처음부터 실행
↓
마지막 코드
↓
프로세스 종료
Run Cell
구조:
Cell 1
↓
실행
↓
상태 유지
↓
Cell 2
↓
실행
↓
상태 유지
즉, 파일 확장자만 보는 것이 아니라 어떤 실행 방식으로 실행했는지 확인하는 것이 중요함.
마지막으로 모든 개념을 하나의 비유로 연결.
식당에 들어온 손님.
주문하고 결과를 확인하는 공간.
.ipynb코드와 실행 결과를 Cell 단위로 기록할 수 있는 Notebook.
전달받은 코드를 실제로 실행하는 주방장.
Python 요리를 대화형으로 처리할 수 있는 Python 담당 주방장.
Python이라는 언어를 실제로 실행하는 기본 실행기.
프로젝트마다 분리된 전용 주방.
주방에 설치해 놓은 재료와 도구.
.pyPython 프로그램의 소스코드가 들어 있는 Script 파일.
# %%.py 파일을 VS Code Interactive Window에서 Cell처럼 나누어 실행하기 위한 구분자.
처음에는 다음처럼 생각하기 쉬움.
VS Code가 Python 코드를 실행한다.
하지만 실제 구조를 이해할 때는 다음처럼 생각하는 것이 좋음.
VS Code
= 코드를 작성하고 실행을 요청하는 개발 환경
Python Interpreter
= Python 코드를 실행하는 실행기
가상환경
= 프로젝트별 Python + 라이브러리 환경
ipykernel
= Python 환경을 Jupyter의 대화형 실행 구조와 연결
Jupyter Notebook
= Cell 단위로 코드를 작성하고 실행 결과를 확인하는 환경
단순히 용어를 외우기 위한 내용이 아님.
Python을 사용하다 보면 다음 문제를 반복해서 경험하게 됨.
분명 pandas를 설치했는데 import가 안 됨
분명 .venv를 켰는데 VS Code에서는 다른 Python으로 실행됨
Notebook에서 Kernel을 선택하라고 나옴
터미널에서는 되는데 Run Cell에서는 안 됨
같은 코드인데 터미널과 Notebook의 결과가 다름
이 문제들의 상당수는 코드 문법보다 실행 환경의 불일치에서 발생 가능.
따라서 다음 질문을 스스로 할 수 있어야 함.
① 지금 어떤 Python이 실행되고 있는가?
② 어떤 가상환경을 사용하고 있는가?
③ 필요한 라이브러리가 그 환경에 설치되어 있는가?
④ Notebook이라면 어떤 Kernel이 연결되어 있는가?
⑤ 일반 Script 실행인가, Interactive 실행인가?
이 다섯 가지를 구분할 수 있다면 Python 개발 환경 문제를 훨씬 빠르게 진단 가능.
가상환경은 프로젝트별 Python 작업 공간, Python Interpreter는 Python 코드 실행기, ipykernel은 그 Python 환경을 Jupyter와 연결하여 대화형 실행을 가능하게 하는 Kernel,
.ipynb는 그 대화형 실행에 적합한 Notebook 파일,.py는 일반적인 Python Script 파일이라는 구조
[프로젝트]
.venv
├── Python Interpreter
├── pandas
├── numpy
├── torch
└── ipykernel
│
├──────────────→ Jupyter / .ipynb
│ Cell 단위 실행
│ 실행 상태 유지
│
└──────────────→ VS Code Interactive Window
# %% / Run Cell
.py
│
└──────────────→ Python Interpreter
python main.py
일반 Script 실행
그리고 가장 중요한 한 가지.
"코드가 왜 안 되지?"라고 생각하기 전에 "지금 이 코드를 어떤 Python 환경이 실행하고 있지?"를 먼저 확인하는 습관 형성
Python과 AI 개발 환경을 이해하는 출발점.