본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android/안드로이드] 어플리케이션 싸인하기 ( Sign Application ) - 개념

by 돼지왕 왕돼지 2012. 2. 8.
반응형

안녕하세요 돼지왕왕돼지입니다.
마켓에 앱을 올리기 위해서는 싸인이 꼭 필요합니다.
이 앱에 싸인을 한다는 것이 무엇인지 알아보겠습니다.



싸인이 뭐하는 녀석인지 알려주세요. ( Sign )

 
- 안드로이드 시스템에서 이 싸인을 보고 제작자를 식별앱간의 신뢰 관계 확립의 수단으로 사용합니다.
 
- 모든 앱은 싸인되어야 합니다. 시스템은 싸인되지 않은 앱을 설치하지 않습니다.

- 자체적으로 싸인한 인증서( Sign Key )를 사용할 수 있습니다.

- 디폴트 키( Debug Sign Key )로 사인된 앱은 배포할 수 없습니다.

- 시스템은 설치 시점에만 인증서 만료 날짜를 테스트. 설치 이후에는 만료되도 앱은 정상적으로 동작합니다.

- Keytool, Jarsinger 등의 표준 툴을 사용하여 싸인합니다.

- 사인 후, 최종 APK package 최적화를 위해 zipalign 툴을 사용합니다.
 
- 사인방법은 커맨드라인에서 keytool과 jarsigner를 사용하는 방법과 ADT Export 위저드를 사용하는 방법이 있습니다.
 
- 추가적 최적화를 위해 zipalign 실행을 잊으면 안됩니다.
 


사인은 어떤 용도로 쓰이는가 알려주세요.


- 앱 업그레이드 시 배포자가 같은 지 맞춰볼 때.

- 앱 모듈성 ( 같은 인증서( Sign Key )를 가진 앱들은 같은 프로세스에서 돌리도록 할 수 있음 )

- 퍼미션을 통한 코드/데이터 공유 ( 인증서 같은 앱끼리 공유 가능 )
 


Market에 올리려면 키를 생성해야 하는데, 뭐 조건이 있나요?


- 25년 이상의 유효 기간 권장.
- 마켓 배포 예정이면 2033년 10월 22일 이후의 유효 기간을 가져야만 합니다. ( 물론 더 미래의 날짜면 더 좋겠죠. )



Default Sign Key ( debug.keystore ) 는 뭐예요?

 
- 디버그 키스토어는 Eclipse 에서 기본으로 생성하고 있는 녀석으로 다음과 같은 특징을 갖습니다.

 keystore name :  debug.keystore
 keysrore pwd   :  android
 key alias         :  androiddebugkey
 key pwd          :  android



위의 설명만 보고 무슨 말인지 감이 잘 안 와요.

 
예. 쭉~ 풀어서 한번 설명해 드리겠습니다.

Eclipse 를 이용해서 개발만 쭈욱~ 해오셨다면 이 싸인키에 대한 감각이 거의 없을 것입니다.
왜냐면 Eclipse 에서는 빌드 할 때, Debug Sign Key ( 디폴트 키 )로 앱을 자동으로 싸인 하는 작업을 하기 때문입니다.
마켓에 Debug Sign Key 로 빌드한 녀석을 올리려 하면, 제대로 싸인이 되지 않았다면서 거부됩니다.

즉, Debug용 혹은 개발용인  Default Sign Key ( debug.keystore ) 로 싸인된 앱은 배포를 할 수 없다는 뜻이죠.
여기서 배포란, 마켓을 통한 배포입니다. 그냥 apk 를 copy 해서 하는 배포는 가능합니다.
마켓에 배포를 하고자 한다면, debug key 가 아닌 새로운 키를 생성하여 싸인을 해주어야만 가능합니다.
이 때 싸인키는 싸인되는 날짜 기준 최소 25년 후까지 valid 하는 것을 권장하며, 만료일은 반드시 2033년 10월 22일 이후여야 합니다.

싸인을 하는 방법에는 Keytool 또는 Jarsigner 라는 실행파일을 이용하여 Command Line 에 옵션을 주어 직접 사인하는 방법이 있고,
Eclipse 에서 지원하는 Sign 방법을 이용하는 것도 있습니다.
이클립스는 zipalign 이라는, 싸인 후 apk pack 최적화작업을 알아서 해주지만, Command Line 을 이용한 경우는 zipalign 도 추가로 실행해줘야 합니다.

싸인키는 제작자가 누구인지를 판별하는 데도 사용될 수 있지만, 주된 목적은 앱간의 신뢰도와 보안이라고 볼 수 있습니다.
같은 싸인키로 서명되었을 때 다른 앱이더라도 같은 process 에서 돌도록 할 수도 있고, Data 교환도 가능합니다.
그리고 앱을 update 하는데, SignKey 가 다르다면, 업데이트가 실패됩니다. 
User 가 기존에 있던 앱을 삭제하지 않는 한, 업데이트가 되지 않죠. 바이러스성 말웨어가 기존 앱을 덮어씌울 수 없다는 의미가 되겠지요.
 
한가지 좀 아이러니 한 것은, 설치시에는 Sign Key 의 만료일을 체크하지만, 설치후에는 아무 제한이 없다는 것이 조~금 의아합니다.
User 입장에서는 오히려 좋은 현상이지만, '개발자 입장에서는 User가 언제까지만 사용할 수 있도록 하고싶다..' 라는 목적으로는
Sign Key 를 사용할 수가 없는 것이죠. 


직접 Sign 을 하는 방법에 대해서는 따로 Posting 하도록 하겠습니다.
그럼 이만~ 
  
 
로그인 없이 추천 가능합니다. 손가락 꾸욱~

반응형

댓글