파워쉘 keytool 한글 깨짐(물음표 ???) 해결 - 안드로이드 키스토어 생성 시 인코딩 문제

안드로이드 앱을 출시하려면 keytool로 업로드 키스토어(.jks)를 만들어야 한다. 그런데 윈도우 11 파워쉘에서 keytool을 실행하면 안내 문구가 ? ??? ???? ??:처럼 전부 물음표로 깨져 나와서, 지금 무엇을 입력하라는 것인지 알 수 없는 상황이 생긴다. 이 글은 이 한글 깨짐의 원인과 두 가지 해결 방법, 그리고 함께 마주치게 되는 JKS 포맷 경고까지 정리한 것이다.

왜 물음표로 깨지는가

이것은 글꼴 문제가 아니라 인코딩 불일치 문제다. keytool은 자바(JVM) 프로그램이라 윈도우의 한국어 로케일을 따라 안내문을 한글로 출력하는데, JVM이 내보내는 출력 인코딩과 콘솔이 기대하는 인코딩이 서로 맞지 않으면 한글이 전부 ?로 바뀐다. 깨진 문구의 정체는 "키 저장소 비밀번호 입력:" 같은 평범한 한글 안내문이다.

keytool 한글 출력이 물음표로 깨지는 구조

해결 방향은 두 가지다. 한글 출력 자체를 없애거나(영어로 강제), 인코딩을 UTF-8로 통일하거나. 키스토어 생성처럼 한 번 실행하고 마는 작업이라면 영어 강제 쪽이 훨씬 간단하다.

방법 1 (추천): 안내문을 영어로 강제 출력

keytool에 -J 옵션으로 JVM 언어를 영어로 지정하면 된다. 한글 자체가 나오지 않으니 깨질 일도 없다.

& "C:\Program Files\Android\Android Studio\jbr\bin\keytool.exe" -J-Duser.language=en -J-Duser.country=US -genkey -v -keystore $env:USERPROFILE\my-upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload

이렇게 실행하면 "Enter keystore password:", "What is your first and last name?"처럼 영어로 또박또박 물어봐서 헷갈릴 일이 없다. 안드로이드 스튜디오에 포함된 JBR의 keytool은 보통 PATH에 등록되어 있지 않으므로, 위처럼 전체 경로에 & 호출 연산자를 붙여 실행해야 한다.

방법 2: 한글 그대로 보고 싶다면 UTF-8로 통일

콘솔, 파워쉘, keytool 출력을 모두 UTF-8로 맞추는 방법이다. 명령 실행 전에 아래 두 줄을 먼저 입력한다.

chcp 65001

[Console]::OutputEncoding = [System.Text.Encoding]::UTF8

그다음 keytool에 표준 출력과 표준 에러의 인코딩을 UTF-8로 지정해서 실행한다.

& "C:\Program Files\Android\Android Studio\jbr\bin\keytool.exe" "-J-Dsun.stdout.encoding=UTF-8" "-J-Dsun.stderr.encoding=UTF-8" -genkey -v -keystore $env:USERPROFILE\my-upload-keystore.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias upload

실제로 이 방법을 적용하자 keytool의 한글 안내문이 정상적으로 표시되었다. 다만 설정할 항목이 방법 1보다 많다.

영어 강제 출력과 UTF-8 통일 해결법 비교

두 방법 비교

구분방법 1: 영어 강제방법 2: UTF-8 통일
추가 옵션-J-Duser.language=en -J-Duser.country=USchcp 65001 + 콘솔 인코딩 + sun.stdout.encoding
안내문 언어영어한글 유지
손이 가는 정도옵션 두 개만 추가사전 설정 두 줄 + 옵션 두 개
어울리는 경우한 번 실행하고 마는 작업한글 출력을 계속 봐야 하는 경우

함께 마주치는 것들

JKS 포맷 경고는 무시해도 된다

키스토어를 만들면 "JKS는 구형 포맷이니 PKCS12로 마이그레이션하라"는 경고가 나올 수 있다. 이것은 권장 사항일 뿐이며, JKS 그대로 둬도 안드로이드 업로드 키로 문제없이 작동한다. 신경 쓰인다면 경고문에 안내된 변환 명령을 실행하면 되는데, 원본과 대상이 같은 파일이면 제자리 변환이 되고 keytool이 원본을 .old 파일로 백업해 두므로 안전하다.

& "C:\Program Files\Android\Android Studio\jbr\bin\keytool.exe" -importkeystore -srckeystore 키스토어경로.jks -destkeystore 키스토어경로.jks -deststoretype pkcs12

처음부터 경고 없이 만들고 싶다면 생성 시 -storetype PKCS12를 지정하면 된다.

에러 메시지 복사는 클립보드 직행으로

keytool 에러 메시지는 stderr로 출력되기 때문에 | clip만 붙이면 클립보드에 잡히지 않는다. 에러까지 통째로 복사하려면 다음처럼 실행한다.

keytool 명령 2>&1 | clip

빨간 에러 메시지가 그대로 클립보드에 들어가서 메모장이나 검색창에 바로 붙여넣을 수 있다. 터미널에서 마우스 드래그 복사가 불안정한 환경에서 특히 유용하다.

정리

파워쉘에서 keytool 한글이 물음표로 깨지는 것은 JVM 출력 인코딩과 콘솔 인코딩의 불일치가 원인이다. 키스토어를 한 번 만들고 마는 상황이라면 -J-Duser.language=en -J-Duser.country=US로 영어 출력을 강제하는 것이 가장 간단하고 확실하며, 한글을 유지하고 싶다면 chcp 65001과 UTF-8 인코딩 지정으로 통일하면 된다. JKS 경고는 무시해도 되고, 에러 복사는 2>&1 | clip이 가장 빠르다.

이 시리즈의 다른 글: 윈도우 11 터미널 마우스 드래그 복사가 자꾸 풀릴 때 원인과 해결 방법

※ keytool 옵션과 경로는 2026년 기준(Android Studio JBR 동봉 버전)이며 변경될 수 있습니다.

댓글

이 블로그의 인기 게시물

메일 주소 하나 만들려다 브랜드를 세웠다 — 1인 스튜디오 브랜딩 실전기

클로드 Fable 5와 Opus 4.8 비교 - 차이점, 가격, 무료 기간 종료 후 변화까지 총정리 (7월 최신)

구글 labs-fx - 제미나이 - 클라우드 차이점 알아보기