Jupyter라는 거대한 표준 규격 위에서,

Web UI인 Jupyter Notebook을 도구 삼아,

파이썬의 연산 엔진 프로세스로 ipykernel을 쓸 것인가, Go의 컴파일 엔진 프로세스로 gonb를 쓸 것인가. 본인의 주력 언어와 작업 목적에 맞는 커널을 선택해서 쓰면 된다.

기술 속성 ipykernel gonb
담당 언어 Python Go (Golang)
실행 메커니즘 순수 REPL / 인터프리터 런타임 유지 매 셀 실행 시 임시 소스 빌드 및 바이너리 실행
상태(State) 관리 파이썬 가상 머신 메모리에 지속 저장 커널 프로세스가 코드를 누적 관리하며 매번 재컴파일
최대 장점 압도적인 데이터 과학 생태계와 편리함 고성능 연산 및 Go 언어의 동시성 활용 가능

기술적 층위: Jupyter, Notebook, Kernel

우리가 흔히 '주피터'라고 부르는 환경은 아래와 같이 3가지 레이어(Layer)로 쪼개어 볼 수 있다.

plain text
+-----------------------------------------------------------+

| 1. Project Jupyter (오픈소스 생태계 & 프로토콜 표준)         |
+-----------------------------------------------------------+
                             │ (웹소켓 프로토콜 통신)
+-----------------------------------------------------------+

| 2. Jupyter Notebook / Lab (웹 애플리케이션 프론트엔드)       |
+-----------------------------------------------------------+
                             │ (ZMQ / JSON 메시지 규격)
+-----------------------------------------------------------+

| 3. Execution Kernel (백엔드 코드 실행 엔진)                  |
|    └─ ipykernel (Python)  vs  gonb (Go)                   |
+-----------------------------------------------------------+

층위 1: Jupyter (프로젝트 및 프로토콜)

Jupyter(주피터)는 프로그램 이름이 아니라, 대화형 컴퓨팅 환경을 만들기 위한 오픈소스 프로젝트 생태계이자 표준 프로토콜이다. 명칭은 최초로 지원했던 핵심 언어인 Julia, Python, R에서 유래했다. 프론트엔드와 백엔드가 데이터를 주고받는 규격인 'Jupyter Message Protocol'을 정의한다.

층위 2: Jupyter Notebook (웹 애플리케이션)

Jupyter Notebook은 유저가 눈으로 보고 코드를 타이핑하는 웹 기반 인터페이스(Web App)이다. 사용자에게 셀(Cell) 단위의 UI를 제공하지만 코드를 직접 실행하지는 못한다. 사용자가 코드를 실행하면 이를 JSON 형태로 포맷팅하여 백엔드의 커널(Kernel)로 토스하는 역할만 수행한다.

층위 3: Kernel (실행 엔진)

Kernel(커널)은 주피터 노트북의 백엔드에서 실제로 코드를 컴파일하거나 인터프리팅하여 실행한 뒤, 그 결과를 다시 웹 앱으로 돌려주는 독립된 프로세스 엔진이다. 바로 이 층위에서 ipykernel과 gonb가 비교 대상으로 맞붙는다.

REPL(대화형 환경) 개념

커널의 동작을 이해하려면 REPL 개념을 알아야 한다. REPL은 아래 네 단계의 반복을 뜻한다.

  • Read(읽기): 사용자가 입력한 코드를 읽는다.
  • Eval(평가): 코드를 실행하고 결과를 계산한다.
  • Print(출력): 실행 결과를 화면에 보여준다.
  • Loop(반복): 이 과정을 계속 반복한다.

주피터 노트북은 이 REPL 환경을 웹 UI로 구현한 도구다. ipykernel과 gonb는 각자의 방식으로 이 REPL을 달성한다.

ipykernel vs gonb 심층 비교

둘은 주피터 프로토콜 표준을 준수하는 '커널'이라는 점에서 본질적으로 같다. 하지만 태생이 인터프리터 언어(Python)인 것과 컴파일 언어(Go)인 것의 차이로 인해 내부 동작 메커니즘과 장단점이 완전히 갈린다.

① ipykernel (IPython Kernel)

  • 동작 방식: 파이썬은 동적 인터프리터 언어다. 코드가 들어오면 메모리(네임스페이스)를 그대로 유지한 상태에서 한 줄씩 실시간으로 평가(Evaluate)하고 결과를 반환한다. 전통적인 REPL 구조에 가장 최적화되어 있다.
  • 장점: 방대한 데이터 분석 및 AI/머신러닝 생태계(Pandas, TensorFlow 등)를 그대로 사용할 수 있다. 시각화 라이브러리와의 연동이 완벽하다.
  • 단점: 파이썬 언어 자체의 한계로 인해 대용량 반복 연산이나 멀티스레딩 성능이 컴파일 언어에 비해 떨어진다.
  • 주요 활용처: 데이터 전처리, 통계 분석, 머신러닝/딥러닝 모델 프로토타이핑.

② gonb (Go Notebook Kernel)

  • 동작 방식: Go 언어는 본래 코드를 한 줄씩 실행할 수 없다. 따라서 gonb는 유저가 셀을 실행할 때마다 이전 셀들의 코드와 현재 셀의 코드를 합쳐 임시 .go 파일로 저장한다. 그다음 배경에서 go binary로 순식간에 컴파일(Compile)한 뒤 실행 파일을 구동하여 그 결과만을 화면에 출력한다.
  • 장점: Go 언어 특유의 강력한 동시성(Goroutine) 제어와 압도적인 연산 속도를 주피터 환경에서 누릴 수 있다. 정적 타입 체크가 가능하다.
  • 단점: 파이썬에 비해 데이터 과학 관련 라이브러리 생태계가 부족하다. 셀을 실행할 때마다 매번 내부적으로 코드를 누적해 재컴파일하므로, 코드가 수천 줄로 길어지면 오버헤드가 발생할 수 있다.
  • 주요 활용처: Go 백엔드 서버 로직 가볍게 테스트하기, Go 알고리즘 검증, 고성능 데이터 파이프라인 프로토타이핑.