기본 Tool 준비 & 필요 Tip

EC2 Streamlit 대시보드 Web 화면 차트에 한글 출력하기

신강희 2024. 5. 7. 17:58
728x90

< 리눅스 서버에 한글 찍기 >

# Matplotlib 차트에 한글이 깨지던것과 동일하게, 리눅스 서버 Web 화면에 streamlit 차트를 출력시키는 경우에도 한글이 깨지는걸 볼수 있다.

 

# 이런 경우 리눅스 서버에 직접 한글 폰트를 설치하여 압축 해제후 적용시켜줘야 한글이 깨지지 않고 출력된다.

# AWS의 EC2 서버를 사용한다는 가정하에 폰트 설치부터 적용까지 진행

 

# 우선 Putty로 한글을 출력시킬 리눅스 서버 진입 (터미널)

 

# 폰트 관리 유틸리티 설치

sudo yum install fontconfig

 

# 네이버 나눔 폰트 다운로드 (명령어로 링크까지다 복사해서 붙여넣고 실행해야함)

curl -o nanumfont.zip http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip

 

# 압축 풀기

sudo unzip -d /usr/share/fonts/nanum nanumfont.zip

 

# 폰트 리스트 확인

fc-list

ㄴ 설치된 한글 리스트를 확인할수 있음

 

# 이제 폰트설치된것을 확인하였고,

# 파이썬의 버전과 설치 위치, 캐시 정보가 담긴 폴더의 이름을 알기 위해서, python 인터프린터로 진입하여 확인이 필요

# putty 터미널에서 python을 입력하면 인터프린터 진입

 

(base) [ec2-user@ip-172-31-14-14 ~]$ python
Python 3.11.7 (main, Dec 15 2023, 18:12:31) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

 

# matplotlib import 한후 코드를 한줄씩 입력하여 확인

import matplotlib

 

# matplotlib 버전확인

print(matplotlib.__version__)

 

# 설치 폴더 경로 확인
print(matplotlib.__file__)

 

# 캐시 폴더 경로 확인

print(matplotlib.get_cachedir())

 

(base) [ec2-user@ip-172-31-14-14 ~]$ python
Python 3.11.7 (main, Dec 15 2023, 18:12:31) [GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib
>>> print(matplotlib.__version__)
3.8.0
>>> print(matplotlib.__file__)
/home/ec2-user/anaconda3/lib/python3.11/site-packages/matplotlib/__init__.py
>>> print(matplotlib.get_cachedir())
/home/ec2-user/.cache/matplotlib
>>>

 

# 확인 되었으면 exit() 를 입력하여 인터프린터창에서 나온다.

# 위에서 확인한 자신의 설치 폴더 경로에 맞게 폰트를 복사하고,

# matplotlib의 폰트 캐시를 삭제하여야 한다. (새로 설치한 폰트를 업데이트 해주는 역할)

 

# 폰트 복사 (보라색으로 칠해진 부분이 본인 경로, 잘확인해서 복사해야하고 띄어쓰기 주의해야함)

sudo cp -r /usr/share/fonts/* /home/ec2-user/anaconda3/lib/python3.11/site-packages/matplotlib/mpl-data/fonts/ttf/

 

# 폰트 캐시 삭제

rm -rf /home/ec2-user/.cache/matplotlib/*

 

# 이제 한글 포트가 정상적으로 복사되었는지 확인

# 다시 python 인터프린터로 들어가서 해당 코드를 한줄씩 입력하여 확인

 

import matplotlib.font_manager

 

# 폰트 전체 리스트 확인
[i.fname for i in matplotlib.font_manager.fontManager.ttflist]

 

# 나눔 폰트 설치 확인 (나눔 폰트 안에있는 나눔 고딕체를 사용 예정이고, 본인이 다른 글씨체를 원할경우 List 내에 있는 다른 글씨체를 자유롭게 사용하면됨)
[f.name for f in matplotlib.font_manager.fontManager.ttflist if 'Nanum' in f.name]

 

# 이제 폰트설치는 모두 완료되었다!

# 이제 한글을 출력시킬 streamlit 차트를 코딩한 개발 환경에서 작업 (여기선 VScode 사용)

import platform
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
 
# 리눅스 환경에서 한글 폰트 설정
plt.rcParams['axes.unicode_minus'] = False
if platform.system() == 'Linux':
    rc('font', family='NanumGothic')
 
# 윈도우 환경에서 한글 폰트 설정
elif platform.system() == 'Windows':
    # 한글 폰트 파일 경로 (실제 폴더내에 있는 폰트를 선택해서 수정해서 사용해도됨)
    font_path = "c:\WINDOWS\Fonts\GULIM.TTC"
    font_name = font_manager.FontProperties(fname=font_path).get_name()
    rc('font', family=font_name)

ㄴ import 문 부터 조건문까지 모두 복사해서 붙여넣어주면 된다.

ㄴ Linux 서버에서는 나눔 고딕체를, 윈도우 환경에서는 굴림체를 사용하였다.

ㄴ 아까는 해당 한글들이 깨져서 출력되었었음

 

# 저장후 리눅스 서버에 적용시키려면 커밋 & 풀 동작은 하고나서 혹시 바로 적용이 되지 않는다면 서버를 한번 종료한후에 재실행하면 적용되는것 확인 가능.

# 이전 한글 폰트 확인했던 터미널 창에서 exit()로 파이썬 인터프린터를 나와서 가상환경으로 진입 후 서버 실행

ㄴ 내가 작업한 환경인 st_310 가상환경에서 다시 서버 실행

 

 

 

이제 접속해보면 한글이 정상적으로 출력되는걸 볼수 있다.

반응형