구글 코랩 Matplotlib 한글 폰트 설정, koreanize-matplotlib로 한 번에 해결하는 방법 및 완벽 가이드
Google Colab 환경에서 Matplotlib 한글 폰트 설정의 혁신: koreanize-matplotlib 라이브러리 완전 정복
데이터 과학과 시각화는 현대 연구 및 분석의 핵심적인 부분으로 자리 잡았습니다. 특히 파이썬(Python) 생태계에서 가장 널리 사용되는 시각화 라이브러리 중 하나인 Matplotlib은 사용자가 데이터를 직관적인 그래프와 플롯으로 변환할 수 있도록 강력한 기능을 제공합니다. 그러나 이러한 강력함에도 불구하고, 비영어권 사용자들은 종종 언어 지원 문제, 특히 폰트 렌더링 문제에 직면하게 됩니다. 구글 코랩(Google Colab)과 같은 클라우드 기반 개발 환경에서는 기본적으로 한글 폰트가 설치되어 있지 않아, Matplotlib으로 생성된 그래프의 한글 제목이나 레이블이 깨져 보이는 현상, 이른바 '두부 현상'이 발생하곤 합니다 . 이러한 문제를 해결하기 위해 과거에는 여러 복잡한 단계를 거쳐야만 했습니다. 사용자는 직접 폰트를 내려받아 특정 경로에 설치하고, Matplotlib의 폰트 캐시를 삭제한 후, 런타임을 재시작하고, 코드 내에서 특정 폰트를 명시적으로 지정해야 하는 번거로움이 있었습니다 .
이러한 불편함을 단번에 해결해 주는 혁신적인 라이브러리가 바로 koreanize-matplotlib입니다. 이 라이브러리는 '설치하고 임포트하는 것만으로 Matplotlib에서 한국어를 표시할 수 있다'는 매우 직관적이고 강력한 해결책을 제시합니다 . 복잡한 설정 과정 없이 단 두 줄의 코드, 즉 라이브러리 설치와 임포트만으로 모든 한글 처리 문제를 자동으로 해결해 주어, 데이터 분석가와 연구자들이 본연의 업무인 데이터 분석과 인사이트 도출에 더욱 집중할 수 있도록 돕습니다. 본 글에서는 koreanize-matplotlib 라이브러리의 등장 배경과 기술적 원리, 구체적인 사용법 및 장점을 심도 있게 분석하고, 기존의 한글 폰트 설정 방식과 비교하여 그 효율성과 편리성을 구체적인 예시와 함께 극도로 상세히 탐구하고자 합니다. 이를 통해 독자들은 데이터 시각화 과정에서 마주치는 한글 처리의 장벽을 손쉽게 넘어서는 방법을 완벽하게 이해하게 될 것입니다.
Matplotlib 한글 폰트 문제의 근원과 전통적 해결 방식의 한계
Matplotlib에서 한글 폰트가 정상적으로 표시되지 않는 문제의 근본적인 원인은 Matplotlib 라이브러리가 그래프를 렌더링할 때 운영체제에 설치된 폰트 파일을 직접 사용하기 때문입니다. 즉, 코드에서 특정 폰트를 지정하면 Matplotlib은 시스템의 폰트 디렉터리에서 해당 폰트 파일을 찾아 글자를 그리게 됩니다. 그러나 구글 코랩이나 도커(Docker)와 같은 격리된 가상 환경의 리눅스 시스템에는 기본적으로 영문 폰트만 포함되어 있을 뿐, 한글을 표현할 수 있는 폰트 파일이 존재하지 않습니다 . 따라서 Matplotlib은 그래프에 한글을 그리라는 명령을 받아도 해당 글자에 해당하는 글꼴(glyph) 정보를 찾지 못해, 이를 대체하기 위한 기본 문자인 네모(□) 모양의 기호, 소위 '두부'로 표시하게 되는 것입니다.
이 문제를 해결하기 위한 전통적인 방법은 매우 번거롭고 여러 단계의 수작업을 요구했습니다. 가장 널리 알려진 방법은 나눔글꼴과 같은 무료 한글 폰트를 시스템에 직접 설치하는 것이었습니다. 구글 코랩 환경을 기준으로 이 과정을 구체적으로 살펴보면 다음과 같습니다. 첫째, 리눅스 패키지 관리자인 apt-get
을 사용하여 fonts-nanum
패키지를 설치해야 합니다. 이는 !apt-get install -y fonts-nanum
과 같은 명령어를 코랩 셀에서 실행하는 것을 의미합니다 . 둘째, 폰트가 시스템에 성공적으로 설치되었더라도, Matplotlib은 초기에 생성된 폰트 목록 캐시 파일을 계속 참조하기 때문에 새로 설치된 폰트를 즉시 인식하지 못합니다. 따라서 ~/.config/matplotlib/
경로에 존재하는 캐시 파일을 !rm -rf ~/.config/matplotlib/*
와 같은 명령어로 수동 삭제해야 합니다.
셋째, 캐시 파일을 삭제한 후에는 변경 사항을 시스템 전체에 적용하기 위해 코랩의 '런타임 다시 시작' 메뉴를 통해 전체 세션을 재부팅해야 합니다. 이 과정에서 기존에 메모리에 로드했던 변수나 데이터가 모두 초기화되는 불편함이 따릅니다. 마지막으로, 런타임이 재시작된 후에도 Matplotlib이 어떤 폰트를 기본으로 사용해야 할지 알려주어야 합니다. 이를 위해 import matplotlib.pyplot as plt
와 함께 plt.rc('font', family='NanumGothic')
과 같은 코드를 추가하여 Matplotlib의 전역 설정(rcParams)에서 기본 폰트를 'NanumGothic'으로 명시적으로 지정해야 했습니다 . 이 모든 과정을 거쳐야만 비로소 Matplotlib 그래프에서 한글을 깨짐 없이 볼 수 있었습니다. 이러한 다단계 프로세스는 초보자에게는 매우 혼란스러울 뿐만 아니라, 숙련된 사용자에게도 매번 새로운 노트북을 시작할 때마다 반복해야 하는 비효율적이고 성가신 작업이었습니다.
koreanize-matplotlib의 등장과 혁신적인 문제 해결 방식
이러한 배경 속에서 등장한 koreanize-matplotlib
라이브러리는 기존의 복잡성을 완전히 제거한 혁신적인 대안을 제시합니다. 이 라이브러리의 핵심 철학은 '단순함'입니다. 사용자는 더 이상 폰트 설치, 캐시 삭제, 런타임 재시작, 코드 내 폰트 지정이라는 번거로운 과정을 거칠 필요가 없습니다. 필요한 것은 오직 두 줄의 코드뿐입니다.
첫 번째 줄은 pip
를 이용한 라이브러리 설치입니다: !pip install koreanize-matplotlib
. 이 명령어는 PyPI(Python Package Index)에 등록된 koreanize-matplotlib
패키지를 다운로드하여 현재 파이썬 환경에 설치합니다 . 이 패키지 안에는 널리 사용되는 고품질 한글 폰트인 나눔고딕(NanumGothic) 폰트 파일이 내장되어 있습니다 . 따라서 사용자는 별도로 폰트 파일을 찾거나 다운로드할 필요가 없습니다.
두 번째 줄은 설치된 라이브러리를 임포트하는 것입니다: import koreanize_matplotlib
. 이 단순한 임포트 구문이 실행되는 순간, 라이브러리 내부에서는 놀랍도록 효율적인 자동화 작업이 일어납니다. 라이브러리 코드는 Matplotlib이 폰트를 찾는 경로를 확인하고, 패키지에 포함된 나눔고딕 폰트 파일을 해당 경로에 복사하거나 Matplotlib이 인식할 수 있도록 경로를 설정합니다. 그 후, Matplotlib의 폰트 캐시를 자동으로 재빌드하여 새로운 폰트를 인식하게 만들고, 마지막으로 Matplotlib의 전역 설정인 rcParams
의 font.family
값을 'NanumGothic'으로 설정하는 모든 과정을 자동으로 처리합니다 .
이 모든 과정이 단 한 번의 임포트로 완료되기 때문에, 사용자는 복잡한 내부 동작 원리를 전혀 알 필요 없이 즉시 Matplotlib을 사용하여 한글이 포함된 그래프를 생성할 수 있습니다. 이는 일본어 환경을 위해 개발되었던 유사한 라이브러리인 japanize-matplotlib
에서 영감을 받은 것으로, 비 라틴 문자권 사용자들이 겪는 공통적인 문제를 해결하기 위한 매우 효과적인 접근법이라 할 수 있습니다 . 결과적으로 데이터 분석가는 시각화의 기술적 제약에서 벗어나, 데이터가 담고 있는 의미를 탐색하고 전달하는 본질적인 작업에 온전히 집중할 수 있는 환경을 제공받게 됩니다.
실제 적용 사례 비교: 전통적 방식 vs koreanize-matplotlib
koreanize-matplotlib
의 효율성과 편리성은 실제 코드 예시를 통해 비교해 보면 더욱 명확하게 드러납니다. 먼저, 이 라이브러리를 사용하지 않고 한글 그래프를 그리려고 할 때의 상황을 가정해 보겠습니다.
다음은 한글 제목을 가진 간단한 사인 함수 그래프를 그리는 코드입니다.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.title('사인 함수 그래프')
plt.xlabel('X축')
plt.ylabel('Y축')
plt.grid(True)
plt.show()
위 코드를 기본 구글 코랩 환경에서 실행하면, 그래프 자체는 정상적으로 그려지지만 제목과 축 레이블의 '사인 함수 그래프', 'X축', 'Y축'이라는 한글이 모두 깨져 네모 상자로 표시될 것입니다.
이 문제를 전통적인 방식으로 해결하려면 앞서 설명한 대로 최소 4~5개의 추가적인 셀 명령어와 코드 라인이 필요합니다.
# 1. 폰트 설치
!apt-get install -y fonts-nanum
# 2. 폰트 캐시 삭제
!rm -rf ~/.config/matplotlib/*
# 3. 런타임 재시작 (메뉴에서 수동으로 실행)
# 4. 폰트 지정 및 그래프 그리기 (재시작 후 새로운 셀에서)
import matplotlib.pyplot as plt
import numpy as np
plt.rc('font', family='NanumGothic')
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.title('사인 함수 그래프')
plt.xlabel('X축')
plt.ylabel('Y축')
plt.grid(True)
plt.show()
이처럼 여러 단계에 걸친 복잡한 과정과 런타임 재시작이라는 치명적인 단점이 존재합니다.
이제 koreanize-matplotlib
을 사용한 해결책을 살펴보겠습니다.
# 1. 라이브러리 설치
!pip install koreanize-matplotlib
# 2. 라이브러리 임포트 및 그래프 그리기
import matplotlib.pyplot as plt
import numpy as np
import koreanize_matplotlib # 이 한 줄이 핵심입니다.
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
plt.figure(figsize=(10, 6))
plt.plot(x, y)
plt.title('사인 함수 그래프')
plt.xlabel('X축')
plt.ylabel('Y축')
plt.grid(True)
plt.show()
결과는 놀랍도록 간결합니다. 별도의 폰트 설치 명령어, 캐시 삭제, 런타임 재시작, plt.rc
를 통한 폰트 설정이 전혀 필요 없습니다. 단지 import koreanize_matplotlib
한 줄을 추가하는 것만으로 모든 문제가 해결되고, 그래프의 한글이 완벽하게 렌더링됩니다. 이러한 극명한 대비는 koreanize-matplotlib
이 왜 파이썬 데이터 시각화, 특히 교육 및 빠른 프로토타이핑 환경인 구글 코랩에서 한국어 사용자에게 필수적인 라이브러리로 평가받는지를 명백히 보여줍니다 .
기술적 배경 및 생태계에 미치는 영향
koreanize-matplotlib
의 성공은 단순히 편리함을 넘어 파이썬 데이터 과학 생태계의 접근성을 확장했다는 점에서 더 큰 의미를 가집니다. 이 라이브러리의 개발은 오픈소스 협업의 좋은 사례이며, GitHub 저장소를 통해 누구나 소스 코드를 확인하고 기여할 수 있습니다 . 라이브러리의 핵심은 setup.py
파일과 같은 패키징 설정에 나눔고딕 폰트 파일을 포함시키고, 라이브러리가 임포트될 때 실행되는 초기화 코드에서 Matplotlib의 설정을 동적으로 변경하는 것에 있습니다.
구체적으로, 라이브러리가 임포트되면 내부적으로 matplotlib.font_manager
모듈을 사용하여 시스템의 폰트 목록을 가져오고, 여기에 내장된 나눔고딕 폰트를 추가한 뒤 matplotlib.font_manager._rebuild()
함수를 호출하여 폰트 캐시를 갱신합니다. 이후 matplotlib.rcParams['font.family']
와 matplotlib.rcParams['axes.unicode_minus']
등의 설정을 한국어 환경에 최적화된 값으로 변경합니다. 특히 axes.unicode_minus
설정을 False
로 변경하는 것은 마이너스(-) 부호가 깨지는 현상을 방지하는 중요한 역할을 합니다. 이는 한글 폰트가 유니코드 마이너스 문자를 제대로 지원하지 않는 경우가 많기 때문인데, 이 설정은 마이너스 부호를 일반 하이픈(-)으로 대체하여 깨짐 없이 표시되도록 합니다.
이러한 자동화된 접근 방식은 데이터 과학 교육 현장에서 특히 강력한 영향을 미칩니다. 파이썬과 데이터 분석을 처음 배우는 학생들은 복잡한 환경 설정 문제로 인해 학습 초기에 흥미를 잃기 쉽습니다. koreanize-matplotlib
은 이러한 진입 장벽을 크게 낮춤으로써, 교육자들이 운영체제나 환경에 구애받지 않고 일관된 실습 환경을 제공할 수 있도록 돕습니다. 결과적으로 학생들은 설정 문제에 시간을 낭비하는 대신, 판다스(Pandas)로 데이터를 분석하고 Matplotlib으로 시각화하는 핵심 개념에 더 깊이 몰입할 수 있습니다 . 이는 궁극적으로 국내 데이터 과학 저변 확대에 긍정적인 기여를 하는 중요한 요소로 작용합니다. 더 나아가, 이 라이브러리의 성공은 다른 비영어권 언어 커뮤니티에도 영감을 주어 유사한 '언어-ize' 라이브러리의 개발을 촉진하는 선순환 구조를 만들 수 있습니다.
참고문헌
PyPI. (n.d.). koreanize-matplotlib. Retrieved from https://pypi.org/project/koreanize-matplotlib/
Choi, Y. (n.d.). ychoi-kr/koreanize-matplotlib. GitHub. Retrieved from https://github.com/ychoi-kr/koreanize-matplotlib
TensorFlow Developers. (2020). [ko][zh-cn] How to get chinese/korean fonts to work in colab notebooks. GitHub Issue. Retrieved from https://github.com/tensorflow/docs-l10n/issues/200
Park, S. (n.d.). seongminp/koreanize-matplotlib. GitHub. Retrieved from https://github.com/seongminp/koreanize-matplotlib
Libraries.io. (n.d.). koreanize-matplotlib 0.1.1 on PyPI. Retrieved from https://libraries.io/pypi/koreanize-matplotlib
Anaconda. (n.d.). Matplotlib. Anaconda.org. Retrieved from https://anaconda.org/conda-forge/matplotlib
Kim, H. (n.d.). Day_1.ipynb - Colab. Google Colab. Retrieved from https://colab.research.google.com/github/kimhwidam/zerobase_EDA/blob/main/Day_1.ipynb
Choi, Y. (n.d.). koreanize-matplotlib/setup.py at master. GitHub. Retrieved from https://github.com/ychoi-kr/koreanize-matplotlib/blob/master/setup.py
Park, S. (n.d.). seongminp/koreanize-matplotlib. GitHub. Retrieved from https://github.com/seongminp/koreanize-matplotlib
GeeksforGeeks. (2023). How to Install Matplotlib on Anaconda?. Retrieved from https://www.geeksforgeeks.org/techtips/how-to-install-matplotlib-on-anaconda/
Google Colab Developers. (2023). Asian fonts are not installed in Google Colab. GitHub Issue. Retrieved from https://github.com/googlecolab/colabtools/issues/4113
Choi, Y. (n.d.). koreanize-matplotlib/demo.py at master. GitHub. Retrieved from https://github.com/ychoi-kr/koreanize-matplotlib/blob/master/demo.py
Release-Monitoring.org. (n.d.). koreanize-matplotlib. Anitya. Retrieved from https://release-monitoring.org/project/316230/
TILNote. (n.d.). ChatGPT 데이터 분석, 그래프 작성 시 한글 깨짐 해결 방법. Retrieved from https://tilnote.io/pages/68114eac3c3f2fc7099c8cda
Corazzon. (n.d.). 공공데이터 상권정보 분석해 보기 - Colab. Google Colab. Retrieved from https://colab.research.google.com/github/corazzon/boostcourse-ds-510/blob/master/open-data-analysis-output.ipynb
Choi, Y. (n.d.). koreanize-matplotlib/LICENSE at master. GitHub. Retrieved from https://github.com/ychoi-kr/koreanize-matplotlib/blob/master/LICENSE
PyPI. (n.d.). Matplotlib. Retrieved from https://pypi.org/project/matplotlib/
Velog. (2023). Matplotlib 시각화에서 한글 지원이 안될 때. Retrieved from https://velog.io/@dpwl3765/Matplotlib-시각화에서-한글-지원이-안될-때
Lee, T. (2021). 구글 코랩(colab) 한글 깨짐 현상 해결방법. TeddyNote. Retrieved from https://teddylee777.github.io/colab/colab-korean/
GitHub. (n.d.). Security Overview · seongminp/koreanize-matplotlib. Retrieved from https://github.com/seongminp/koreanize-matplotlib/security
Choi, Y. (n.d.). koreanize-matplotlib/Pipfile at master. GitHub. Retrieved from https://github.com/ychoi-kr/koreanize-matplotlib/blob/master/Pipfile
Velog. (2022). 구글 코랩(Colab) 한글 사용 패치(한글 깨짐 현상). Retrieved from https://velog.io/@seonydg/구글-코랩Colab-한글-사용-패치한글-깨짐-현상
Park, S. (n.d.). koreanize-matplotlib/setup.cfg at master. GitHub. Retrieved from https://github.com/seongminp/koreanize-matplotlib/blob/master/setup.cfg
Release-Monitoring.org. (n.d.). Search Projects. Anitya. Retrieved from https://release-monitoring.org/projects/search/?pattern=matplotlib
WhatIWant. (2022). matplotlib에서 한글 폰트 출력하기 (colab, local). Retrieved from https://www.whatwant.com/entry/matplotlib-hangul-colab-local
Unbelievable T. (2021). matplotlib 한국어 폰트 자동 설정 패키지. Tistory. Retrieved from https://salryujutme.tistory.com/18
Qiita. (2020). pip install して import するだけで matplotlib をハングル表示対応させる. Retrieved from https://qiita.com/sentencebird/items/226a47dc176023207969