안드로이드 앱 사이닝하기

프로그래밍/Android 관련2018. 3. 25. 12:37

안녕하세요. 개발자 드리머즈입니다.


개발 중인 안드로이드 어플을 플레이 스토어에 올리기 위해서는 디버그 빌드가 아닌 릴리즈 빌드여야 합니다. 릴리즈 빌드를 하기 위해서는 안드로이드 스튜디오에서 디버그 빌드 시 기본적으로 사용되는 디버깅 키가 아닌 개발자가 직접 만든 키가 필요합니다. 이 키를 이용해서 사이닝(Signing)을 해야합니다. 이를 app signing이라고 하는데 아래의 안드로이드 디벨로퍼 사이트에 자세한 설명이 있습니다.


https://developer.android.com/studio/publish/app-signing.html


한국 페이지는 번역이 좀 이상해서 영어 페이지를 직접 번역하면서 개념공부를 해보려고 합니다.



앱 사이닝하기

안드로이드에서 인증서로 디지털 사이닝이 된 apk만 설치가 가능합니다. 이 페이지에서 안드로이드 스튜디오에서 어떻게 앱을 사이닝하는지 뿐만 아니라 인증서 생성과 저장하는 방법, 다른 인증서를 사용한 다른 빌드 설정으로 사이닝하는 법 그리고 앱 사이닝을 자동으로 하기 위해 빌드 프로세스를 수정하는 법을 배울 수 있습니다.


인증서와 키스토어(keystore)

공개용 키 인증서(public-key certificate)는 디지털 인증서 또는 신원(identity) 인증서로 알려져있는데 공개키/개인키 쌍 중에서 공개키(public key)를 포함합니다. 또한 키 소유자 파악할 수 있는 이름과 지역 등의 메타데이터도 포함합니다. 인증서의 소유자는 대응되는 개인키(private key)를 가지고 있습니다.


apk를 사이닝할 때, 사이닝 툴은 공개용-키 인증서를 apk에 포함시킵니다. 이 공개용-키 인증서는 apk와 관련된 소유자 그리고 대응되는 개인용 키를 유일하게 만듭니다. (왜냐하면 apk에 포함된 공개용 키와 대응되는 개인용 키는 1개 뿐이므로 소유자가 아닌 다른 사람의 개인용 키는 사용할 수 없기 때문) 이로 인해 안드로이드는 다른 사람에 의해 apk가 업데이트 되는 것을 막고 진짜 소유자에 의해서만 업데이트되도록 합니다. 이 인증서를 만들기 위해 사용된 키를 앱 사이닝 키(app signing key)라고 부릅니다.


keystore 파일은 하나 이상의 개인용 키(private key)를 가지고 있는 바이너리 파일입니다.


모든 app은 사용자가 app 업데이트를 통해 새 버전을 설치할 수 있도록 업데이트 버전에서도 반드시 동일한 인증서를 사용해야 합니다. 계속 동일한 인증서를 사용하는 것의 장점에 대해 알고 싶으면 아래의 Signing Considerations(사이닝 고려사항)를 보세요.


디버그 빌드 사이닝하기

안드로이드 스튜디오에서 프로젝트를 실행하고 디버깅할 때, 안드로이드 스튜디오는 Android SDK tool에 의해 생성된 디버그 인증서로 apk를 자동 사이닝합니다. 안드로이드 스튜디오에서 프로젝트를 처음 실행하거나 디버깅할 때, 안드로이드 스튜디오는 자동으로 $HOME/.android/debug.keystore경로에 디버그 keystore와 디버그 인증서를 생성하고 keysore와 key password를 설정합니다.

디버그 인증서는 빌드 툴에 의해 생성되고 구조적으로 안전하지 않으므로, Google Play Store를 포함한 대부분의 앱 스토어는 디버그 인증서로 사이닝 된 apk는 받지 않아 출시할 수 없습니다.

안드로이드 스튜디오는 자동으로 디버그 사이닝 정보를 사이닝 설정에 저장합니다. 그래서 매번 디버그할 때 디버그 사이닝 정보를 입력할 필요가 없습니다. 사이닝 설정은keystore 위치, keystore 비밀번호, key 이름, key 비밀번호 등과 같은 apk를 사이닝하기 위한 모든 정보를 담고있습니다. 우리는 디버그 사이닝 설정을 직접 수정할 수 없지만, 릴리즈 빌드를 사이닝하는 방법을 설정할 수 있습니다.

디버깅을 위한 앱을 어떻게 실행하는지에 대해 더 알고 싶으면 Build and Run Your App을 보세요.


디버그 인증서의 만료

디버깅 apk에 사용된 스스로 사인된 인증서는 생성날로부터 1년의 유효기간을 가지고 있습니다. 인증서가 만료되면 빌드 에러가 발생합니다.


이를 고치기 위해서 간단히  debug.keystore 파일을 삭제하세요. 이 파일은 아래의 경로에 있습니다.


  • OS X 와 Linux : ~/.android/
  • Windows XP : C:\Documents and Settings\<user>\.android\
  • Windows Vista 와 Windows 7, 8, 10 : C:\Users\<user>\.android\


삭제 후에 디버그 빌드 타입을 빌드하고 실행하면, 빌드 툴은 새로운 keystore와 debug key를 생성할 것입니다. app을 실행하지 않고 빌드만 하면 keystore와 debug key가 생성되지 않기에 반드시 app을 실행해야 합니다.


키 관리

앱 사이닝 키는 개발자의 신원을 확인하기 위해, 사용자를 위한 흠 없고 안전한 업데이트를 보장하기 위해 사용되기 때문에 키를 관리하고 이를 안전하게 보관하는 것은 개발자와 유저 모두에게 매우 중요합니다. 구글의 인프라스트럭쳐를 이용해 앱 사이닝 키를 안전하게 관리하고 저장하기 위해 구글 플레이 앱 사이닝을 선택하거나 스스로 keystore와 앱 사이닝 키를 안전하게 관리할 수 있습니다. 


구글 플레이 앱 사이닝 이용하기

구글 플레이 앱 사이닝에는 앱 사이닝 키업로드 키가 있습니다. 구글이 앱 사이닝 키를 관리하고 보호하며, 당신은 업로드 키를 보관하여 구글 플레이 스토어에 업로드 하기 위해 업로드 키로 사이닝하면 됩니다.


구글 플레이 앱 사이닝을 선택하면, 구글 플레이에 의해 제공되는 Play Encrypt Private Key tool을 이용하여 앱 사이닝 키를 가져와 암호화하게 됩니다. 그리고 나서 이를 구글의 인프라스트럭쳐에 업로드합니다. 이후에 당신은 분리된 업로드 키를 만들고 구글에 등록합니다. 앱을 출시할 준비가 되면, 업로드 키로 앱을 사이닝하고 구글 플레이에 업로드 합니다. 그러면 구글은 업로드 인증서로 당신의 신원을 파악하고 배포를 위해 그림1과 같이 앱 사이닝 키로 다시 사이닝을 하게 됩니다. (만약 앱 사이닝 키가 미리 준비되어있지 않다면, 사이닝 과정에서 앱 사이닝 키를 만들 수 있습니다.)


그림1. 구글 플레이 앱 사이닝을 이용한 앱 사이닝


구글 플레이 앱 사이닝을 이용할 때, 업로드 키를 잃어버리거나 문제가 생기면, 구글에 연락해 이전의 업로드 키를 폐지하고 새로운 업로드 키를 만들 수 있습니다. 당신의 앱 사이닝 키는 구글에 의해 보호되기 때문에, 당신이 업로드 키를 변경하여도 당신은 기존 앱에 대한 새 버전의 앱을 계속 업로드할 수 있습니다.


구글 플레이 앱 사이닝 사용하는 방법에 대한 정보를 더 알고 싶으면 Manage your app signing keys를 참고하세요.



직접 키와 keystore 관리하기

구글 플레이 앱 사이닝을 이용하는 대신에, 당신의 앱 사이닝 키와 keystore를 직접 관리하는 것을 선택할 수 있습니다. 당신의 앱 사이닝 키와 keystore를 관리하는 것을 선택한다면 당신은 앱 사이닝 키와 keystore의 보안에 책임이 있습니다. keystore에 강력한 비밀번호를 사용해야 하며, keystore에 저장된 개별 key에 대해 서로 다른 강력한 비밀번호를 사용해야 합니다. 당신은 keystore를 반드시 안전한 장소에 보관해야 합니다. 앱 사이닝 키의 비밀번호를 잃어버리거나 키에 문제가 생기면, 구글은 앱 사이닝 키를 되찾아올 수 없고, 기존 버전을 업데이트하는 새 버전의 앱을 출시할 수 없습니다. 더 자세한 정보는 아래의 Secure your key를 참고하세요.


당신이 앱 사이닝 키와 keystore를 관리한다면 아래의 그림 2처럼 앱을 사이닝할 때 앱 사이닝 키를 이용하여 직접 사이닝을 하고, 사이닝 된 apk를 직접 구글 플레이 스토어에 업로드하게 됩니다.


그림2. 직접 앱 사이닝 키를 관리하여 앱 사이닝 하기





앱 사이닝하기

키와 keystore를 어떻게 관리하든지 상관없이 당신은 (업로드 키나 앱 사이닝 키를 이용해) 안드로이드 스튜디오로 APK를 사이닝 할 수 있습니다. 수동으로 사이닝 하거나 빌드 프로세스를 수정하여 자동으로 APK가 사이닝되게 할 수 있습니다.


당신이 직접 앱 사이닝 키와 keystore를 관리하는 것을 선택했다면 당신은 앱 사이닝 키를 이용하여 앱을 사이닝할 것입니다. 만약 구글 플레이 앱 사이닝을 이용하여 앱 사이닝 키와 keystore를 관리한다면, 당신은 업로드 키를 이용하여 APK를 사이닝할 것입니다.


키와 keystore 생성하기

다음의 절차를 통해 안드로이드 스튜디오에서 앱 사이닝 키 혹은 업로드 키를 생성할 수 있습니다.


1. 메뉴바에서 Build > Generate Signed APK를 클릭합니다.

2. 새로운 key와 keystore를 생성하기 위해 Create new를 클릭합니다.

3. New Key Store창에서 그림3과 같이 다음의 keystore와 key에 대한 정보를 입력합니다.


그림3. 안드로이드 스튜디오에서 새로운 key store 만들기


Keystore

Key store path : keystore가 저장될 경로를 선택하세요.

Password : keystore에 사용될 패스워드를 입력하세요.


Key

Alias : 당신의 key를 구별하기 위한 별명을 입력하세요.

Password : key에 사용될 패스워드를 입력하세요. 이 비밀번호는 keystore의 비밀번호와 달라야 합니다.(권장사항)

Validity (years) : 당신의 키가 유효할 기간 연도를 선택하세요. 당신의 키는 최소한 25년 동안 유효할 것이므로 당신은 동일한 키를 이용해 앱을 사이닝할 수 있습니다.

Certificate : 당신에 대한 자격으로 당신에 대한 정보를 입력하세요. 이 정보는 app에서 보여지진 않지만, 당신에 대한 증명으로 APK 내부에 포함됩니다.


양식을 다 채우면 OK 버튼을 클릭합니다.


5. 새로 생성된 키로 사이닝 된 APK를 만들기 위해서는 수동으로 APK 사이닝하기를 계속 진행해주세요. 단지 키와 keystore만 생성하고 싶었고 APK를 사이닝하고 싶지 않다면 Cancel을 클릭해주세요.


6. 구글 플레이 앱 사이닝을 사용하고 싶다면, Manage your app signing keys를 진행해 구글 플레이 앱 사이닝 설정을 위한 가이드를 따라주세요.


수동으로 APK 사이닝하기

안드로이드 스튜디오에서 수동으로 APK를 사이닝할 수 있습니다. 한 번에 하나를 APK를 사이닝 할 수 있고 혹은 한 번에 여러 빌드 variant를 위한?? . 수동으로 APK를 사이닝하는 대신에 빌드 과정 중에 자동으로 사이닝이 처리되도록 Gradle 빌드 설정을 변경할 수 있습니다. 이 섹션에선 수동으로 사이닝하는 과정을 설명합니다. 빌드 과정 중 앱 사이닝에 대한 자세한 정보는 Configure the build process to automatically sign your APK를 참고 바랍니다.


안드로이드 스튜디오에서 APK 출시를 위해 수동으로 사이닝하려면 다음의 절차를 따르면 됩니다.


1. Generate Signed APK 창을 열기위해 Build > Generate Sign APK를 클릭합니다. (위에서 설명한대로 키와 keystore를 생성만 했다면, 이 창은 이미 열려있을 것입니다.)


2. Generate Sign APK 창에서 keystore, private key를 선택하고 각각에 대한 비밀번호를 입력합니다. (만약 이전 섹션에서 keystore를 만들기만 했다면, 이 필드들은 이미 선택되어져 있을 겁니다.) 그리고나서 Next를 클릭합니다.


주의 : 만약 당신이 구글 플레이 앱 사이닝을 이용하고 있다면 여기서 업로드 키를 선택해야 합니다. 그게 아니라 당신이 직접 앱 사이닝 키와 keystore를 관리한다면 앱 사이닝 키를 선택해야 합니다. 보다 자세한 정보를 위의 키 관리를 참고하세요.


그림4. 안드로이드 스튜디오에서 개인 키 선택하기


3. 다음 창에서, 사이닝 된 APK(들)가 생성될 경로를 지정하고, (가능하다면) 빌드 타입을 설정하고, Product flavor를 선택한 다음에 Finish를 클릭합니다.


그림5. 선택된 product flavor에 대한 사이닝 된 APK 생성하기


주의 : 만약 당신의 프로젝트가 product flavor를 사용한다면, 윈도우/리눅스에선 콘트롤 키를 누른 채로, 맥 OSX에선 Command 키를 누른 채로 복수의 product flavor를 선택할 수 있습니다. 안드로이드 스튜디오는 각각의 product flavor에 대한 서로 다른 APK를 생성할 것입니다.

(ex: 동일한 앱의 무료 버전과 유료 버전에 대한 각각의 apk를 생성함)


이 과정이 완료되면, 위에서 지정한 경로에서 사이닝된 APK를 찾을 수 있습니다. 이제 당신은 사이닝 된 APK를 구글 플레이 스토어와 같은 마켓 플레이스를 통해 혹은 당신이 원하는 방식으로 배포해도 됩니다. 구글 플레이 스토어에 사이닝 APK를 출시하는 것에 대한 자세한 정보는 Get Started with Publishing을 참고 바랍니다. 다른 배포 옵션에 대해 배우고 싶으면 Alternative Distribution Options를 읽어보세요.


사용자가 성공적으로 app을 업데이트 하기 위해서 당신은 apk를 동일한 인증서로 계속 사이닝해야 합니다. 이에 대한 정보와 같은 키로 사이닝 하는 것에 대한 장점에 대한 자세한 정보는 아래의 Signing Considerations를 참고 바랍니다. 개인키와 keystore의 보안에 대한 자세한 정보는 아래의 Secure your key를 참고 바랍니다.


--너무 길어서 일단 여기까지만 번역 함--

작성자

Posted by 드리머즈

관련 글

댓글 영역