Mac 시에라에서 한글 로케일 문제 해결하기

by Minho Lee — on  , 

cover-image

Mac Sierra


사실 이전부터 맥 시에라에서 이런저런 문제가 많이 생긴다는 소리는 듣고 있었다. 심지어 회사에서 쓰는 프로그램들과도 충돌이 많이 나는 편이었다. 굳이 그런 귀찮음을 감수하고서까지 버전업을 할 생각은 없었기 때문에 시에라에서만 등장하는 에러들은 정말 안중에도 없었다. (심지어 집에서 쓰던 개인용 맥북은 아직도 요세미티..) 그런데 마침 괜찮은 맥북에어 중고를 발견하여 질렀더니 판매자께서 친절하게 시에라로 세팅을 해주셨다. 그 때부터 고난(귀찮음)이 시작되었다.



2019-03-04 일자로 해결 방법 수정해두었습니다. 글의 맨 마지막 부분을 확인해주세요.



R error


R과 R-Studio를 설치하고 실행을 해보니 다음과 같은 에러가 발생했다.

During startup - Warning messages:
1: Setting LC_CTYPE failed, using "C"
2: Setting LC_COLLATE failed, using "C"
3: Setting LC_TIME failed, using "C"
4: Setting LC_MESSAGES failed, using "C"
5: Setting LC_MONETARY failed, using "C"

이게 뭔가 싶어서 로케일 설정을 확인해보니 전부 C로 설정되어 있는 것을 확인할 수 있었다.

Sys.getlocale()
[1] "C"

이게 무슨 문젠가 싶겠지만, 다음의 간단한 한 줄 짜리 코드를 실행시켜보자.

print('안녕')
[1] "\354\225\210\353\205\225"

로케일이 제대로 설정되어있지 않기 때문에 한글을 제대로 표현하지 못한다. 맥에서 R을 사용하는 사람들이 흔히들 겪은 인코딩 문제와는 다른 로케일의 문제다. 개발자가 아닌지라 로케일과 인코딩에 차이에 대해서 정확하게 설명할 수는 없을 것 같아서 Quora에 올라온 질문 에 대한 답변을 대신 달아놓았다. 말하자면 로케일은 문자, 날짜, 정렬 방식 등 해당 지역/언어를 바탕으로 한 맥락을 설정한다. 그리고 인코딩은 특정 문자들이 어떤 bit로 구성되어 있는지를 정의한다. (이 부분에 대해서는 잘못된 부분이 있다면 설명 좀 부탁드립니다 ㅜㅜ)

로케일 설정이 문제라면 강제로 R에서 로케일을 변경해보면 어떨까? 원래 문제가 생기지 않았다면 ko_KR.UTF-8 로 설정이 되어있어야 한다. Sys.setlocale 함수를 이용해서 강제로 로케일을 바꿔보자.

Sys.setlocale('LC_ALL', 'ko_KR.UTF-8')
[1] "ko_KR.UTF-8/ko_KR.UTF-8/ko_KR.UTF-8/C/ko_KR.UTF-8/C"

print('안녕')
[1] "안녕"

로케일을 바꿔보니 일단 한글이 출력은 되는 것을 확인할 수 있었다. 나중에는 또 무슨 문제가 생길지 알 수 없지만 일단 이 정도 수준에서 마음을 놓기로 했다.



Setting Rprofile.site


문제를 근본적으로 해결하지는 못했지만, 우회할 가능성을 찾은 것 같다. 하지만 매번 실행시킬 때마다 로케일을 변경하는 것은 매우 귀찮은 작업이다. 그러니 R이 실행될 때 자동으로 로케일을 변경하도록 설정해보자.

맥 시에라에서 일반적인 방법으로 R을 설치했다면 /Library/Frameworks/R.framework/Resources/etc 위치에 Rprofile.site 라는 파일을 생성하면 된다. vi를 쓰든 서브라임텍스트를 쓰든 그냥 텍스트 편집 가능한 툴로 파일을 만들고 그 안에다가 Sys.setlocale('LC_ALL', 'ko_KR.UTF-8') 한 줄을 입력해서 저장한다. 이제 Restart R로 R을 다시 시작해보면 오류는 여전히 발생하지만 R 시작과 동시에 로케일을 변경해버리는 것을 확인할 수 있다.



결론


Rprofile.site 세팅을 통해 사전에 동작할 함수들을 등록하는 방식으로 문제를 피해보았다. 하지만 이런 임시방편말고 근본적인 해결책을 찾으신 분이 계시다면 꼭 공유해주셨으면 한다. ㅜㅜ 참고로 위 세팅을 이용하면 매번 쓰는 라이브러리나 함수들을 자동으로 등록시켜버릴 수 있으니 활용하면 좋다.



내용추가

2019-03-04 추가.

아래 댓글에 추가해주신 것과 같이 R의 기본 로케일 설정을 변경해주면 문제의 원인을 해결할 수 있다. 하지만 개인적으로 ko_KR 대신 en_US 로 설정할 것을 권한다. 기본 로케일을 en_US.UTF-8 로 설정할 경우, 한글을 출력할 수는 있으면서 에러 메세지는 여전히 영문으로 출력된다. 에러 메세지를 stackoverflow를 통해 검색해보기 위해서는 영문 에러 메세지를 받는 편이 여러모로 편리하다. 따라서 터미널에서 다음과 같이 명령어를 입력한다.

# (권장) 옵션1. 모든 R 메세지가 영어로 표시됨 + 한글 출력 가능
defaults write org.R-project.R force.LANG en_US.UTF-8

# 옵션2. 모든 R 메세지가 한글로 표시됨 (에러 메세지도)
defaults write org.R-project.R force.LANG ko_KR.UTF-8

참고로 RStudio가 켜져 있는 상태에서는 로케일 변경이 적용되지 않을 수 있다. R과 RStudio 종료시킨 후, 터미널에서 명령어를 입력하고 다시 R을 실행시켜서 확인해보자.

Comments