개요
PostgreSQL 에서는 Ctype 이 ko_KR.UTF-8 이어야 한글이 깨지지 않는다.
하지만 이를 적용하기 위해서는 기반이 되는 OS 에 Locale 이 먼저 적용되어 있어야 한다.
특히나 Kubernetes(K8s) 나 Docker 를 이용하는 유저라면, Locale 이 적용된 이미지가 필요하다. 이를 위해 직접 만들어 보도록 하자.
그 전에 PostgreSQL 는 주로 Ubuntu 기반이나 Alpine 기반의 이미지를 많이 사용한다.
하나씩 알아보도록 한다.
Alpine 기반의 이미지 만들기
제일 쉬운 방법은 공식 이미지의 코드를 보고 직접 수정하는 방법이 있다.
여기서는 조금 더 쉬운 방법을 소개하겠다.
Dockerfile 을 작성해서 빌드하는 방법이다.
그리고 Locale 설정은
alpine-package-glivc
를 이용하는 것이다.다음과 같이 Dockerfile 을 작성한다.
FROM postgres:14.5-alpine # 시간을 서울로 변경 처리 ENV TZ=Asia/Seoul RUN apk add --no-cache tzdata && \ cp /usr/share/zoneinfo/$TZ /etc/localtime && \ echo $TZ > /etc/timezone # Install language pack ENV GLIBC_VERSION=2.35-r0 RUN apk --no-cache add ca-certificates wget && \ wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-${GLIBC_VERSION}.apk && \ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-bin-${GLIBC_VERSION}.apk && \ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${GLIBC_VERSION}/glibc-i18n-${GLIBC_VERSION}.apk && \ apk add glibc-bin-${GLIBC_VERSION}.apk glibc-i18n-${GLIBC_VERSION}.apk glibc-${GLIBC_VERSION}.apk # install ko_KR locale # Note that locale -a is not available in alpine linux, use `/usr/glibc-compat/bin/locale -a` instead RUN /usr/glibc-compat/bin/localedef -i ko_KR -f UTF-8 ko_KR.UTF-8 RUN /usr/glibc-compat/bin/localedef -i ko_KR -f UTF-8 ko_KR.UTF-8 && \ echo "export LANG='ko_KR.UTF-8'" >> /etc/profile && \ echo "export LC_ALL='ko_KR.UTF-8'" >> /etc/profile && \ echo "export LANGUAGE='ko_KR.UTF-8'" >> /etc/profile # Set the lang ENV LANG=ko_KR.UTF-8 \ LC_ALL=ko_KR.UTF-8 \ LANGUAGE=ko_KR.UTF-8
그리고 이미지를 빌드한다.
docker build -t postgres-ko:14.5-alpine .
빌드된 이미지를 바로 사용할 수 있다.
Ubuntu 기반의 이미지 만들기
조금 더 대중적인 Ubuntu OS 기반이다.
역시나 공식 이미지 코드를 보고 조금 수정해도 무방하다.
하지만 이것도 더 간단하게 만들어 보자.
Dockerfile 을 작성한다.
FROM postgres:14.5 # 시간을 서울로 변경 처리 & ko_KT.UTF-8 로케일 생성 ENV TZ=Asia/Seoul RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && \ sed -i 's/# ko_KR.UTF-8 UTF-8/ko_KR.UTF-8 UTF-8/' /etc/locale.gen && \ locale-gen # 환경변수 설정 ENV LANG=ko_KR.UTF-8 \ LANGUAGE=ko_KR.UTF-8 \ LC_ALL=ko_KR.UTF-8 \ POSTGRES_INITDB_ARGS=--data-checksums
그리고 이미지를 빌드한다.
docker build -t postgres-ko:14.5 .
빌드된 이미지를 바로 사용할 수 있다.
마무리
이제 한글이 제대로 적용된 PostgreSQL 을 사용할 수 있게 되었다.
하지만 PostgreSQL 버전이 업데이트 될때마다 매번 해당 이미지를 빌드해야 하는 번거로움이 있다. 이때는 CI/CD 자동화 도구를 이용하면 좋다.