Troubleshooting
[Troubleshooting] AWS EC2 & Docker 한글 깨짐
ride-dev
2024. 2. 23. 02:36
1. 오류 원인
이 오류는 서버에서 사용하는 인코딩이 한글을 읽을 수 없어서 생기는 오류입니다.
2. 오류내용
셀레니움을 통해 외부 사이트에서 파일을 다운로드 받아 인코딩하는 도중,
아래 오류를 맞닥뜨렸습니다.
외부 사이트에서 csv파일의 이름을 한글로 다운로드시키기 때문에,
한글을 포함시켰는데, 한글이 깨지는 문제가 발생했습니다.
3.해결책
aws & docker 인코딩 변경(재부팅 필수)
서버가 한글을 인식할 수 있도록 ko_KR.utf8을 설치합니다.
aws만 사용하고 있다면 aws 서버의 설정으로 충분하지만,
docker와 함께 사용하고 있다면, docker를 빌드하면서 컨테이너 서버에 ko_KR.utf8을 설치해야 합니다.
먼저 aws 부터 진행하겠습니다.
서버 언어 확인
echo $LANG
가용한 로케일 확인
locale -a
언어팩 설치
sudo apt-get install language-pack-ko
locale 적용(원하는 방법을 선택)
1. 파일 내용을 수정하여 설정
sudo vim /etc/default/locale
LANG=ko_KR.UTF-8
~
~
2. 명령어를 입력하여 설정
sudo update-locale LANG=ko_KR.UTF-8
3. 대화형 메뉴를 통하여 설정
sudo dpkg-reconfigure locales
재부팅
reboot
반영 여부 확인
이제 Dockerfile 을 통하여 컨테이너의 locale을 설정하겠습니다.
(locale에 관련된 스크립트 위주로 보겠습니다)
# Java 17 JDK를 사용하는 베이스 이미지
FROM openjdk:17-jdk-slim as build
# 필요한 패키지 설치
RUN apt-get update && apt-get install -y \
locales \
&& sed -i '/ko_KR.UTF-8/s/^# //g' /etc/locale.gen \
&& locale-gen \
# 로케일 설정 추가
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR:kr
ENV LC_ALL ko_KR.UTF-8
# 작업 디렉토리 설정
WORKDIR /app
# 최종 실행 이미지
FROM openjdk:17-jdk-slim
WORKDIR /app
RUN apt-get update && apt-get install -y \
locales \
&& sed -i '/ko_KR.UTF-8/s/^# //g' /etc/locale.gen \
&& locale-gen
# 로케일 설정 추가
ENV LANG ko_KR.UTF-8
ENV LANGUAGE ko_KR:kr
ENV LC_ALL ko_KR.UTF-8
ENTRYPOINT ["java","-Dfile.encoding=UTF-8","-jar","app.jar"]
전체적인 흐름은 aws에서 설정했을 때와 비슷합니다.
ENTRYPOINT에 -Dfile.encoding=UTF-8 을 추가하여 애플리케이션을 UTF-8로 실행줍니다.
도커 컨테이너 서버에 접속해서 잘 변경되었는지 확인합니다.
컨테이너 검색
docker ps
docker exec -it $(docker ps | grep 컨테이너이름 | awk '{print $1}') bash
728x90