'추가 지불 경고', '접속불가', '이 리소스를 재생하기에 대역폭이 충분하지 않습니다'

전 세계 스마트폰 사용자들이 흔히 접하는 경고입니다.

수십억 사용자들이 아무 탈없이 사용할 수 있는 제품을 만들려면, 개발자들은 제한적이거나 간헐적인 연결 상태, 기기 호환성, 다양한 화면 크기, 높은 데이터 비용, 수명이 짧은 배터리 등의 문제를 잘 처리해야 합니다. 구글은 최근 developers.google.com/billions 사이트에서 이와 관련되어 개발자분들이 참고할만한 안드로이드와 웹 개발 자료를 공개했습니다. 안드로이드 또는 에 관한 동영상 프레젠테이션을 보실 수 있습니다.

Wi-Fi, 3G,LTE 등등 다양한 연결 방식과 이와 연관된 데이터 요금제에 맞추어 적절한 기능을 제공하고, 이와 동시에 다양한 디바이스를 잘 지원하는 여러 모범 사례들도 함께 공개되어있습니다. 이 모범 사례들을 잘 살펴보시면 새로운 수십억의 사용자들에게 다가가는 데 도움을 받을 수 있습니다. g.co/dev/billions는 다음과 같은 점에서 개발자 여러분께 도움이 될 것입니다.

느린 인터넷 및 오프라인 상태에서 올바르게 동작하기

여러분의 앱을 사용자는 끊임없이 움직입니다. 그리고 이에 따라, 사용자의 네트워크 환경도 계속 바뀔 수 있습니다. 고속 무선 인터넷에서 불완전하거나 값비싼 데이터 요금을 내야하는 네트워크로 갑자기 변경될 수도 있습니다. 데이터 저장, 요청 큐 처리, 이미지 처리 최적화 및 완전 오프라인에서 핵심 기능 수행 등을 통해 이런 전환을 관리하세요.

정확히 상황에 들어맞는 올바른 콘텐츠 제공

상황을 염두에 두세요. 즉, 사용자들이 어디서 어떻게 콘텐츠를 소비하나요? 여러 가지 화면 크기에 잘 조화되는 텍스트와 미디어의 선택, 텍스트를 짤막하게 유지하기(이동 중의 스크롤을 위해), 콘텐츠에 집중하는 데 방해되지 않는 단순한 UI 제공, 불필요한 콘텐츠의 제거 등이 모두 앱의 품질에 대한 사용자의 인식 높이는 한편 데이터 전송 절감 등의 실질적 성능 향상을 가져다 줄 수 있는 방법입니다. 일단 이 같은 일들을 실천한 뒤 현지화 옵션을 제공하면 사용자를 늘리고 그들의 참여율을 높일 수 있습니다.

모바일 하드웨어를 위한 최적화

앱이나 웹 콘텐츠를 목표 시장에서 가상 기기나 실제 기기에서 테스트하여 그 앱이나 웹 콘텐츠가 현재 활발하게 사용되고 있는 모든 OS 버전들을 포괄하면서도 모범 사례들을 따르면서 최대한 폭넓은 시장에 제공되어 잘 작동하도록 하세요. 네이티브 안드로이드 앱은 최소 및 목표 SDK를 설정해야 합니다. 그리고 저가형 휴대폰은 RAM 용량이 적다는 사실을 잊지 마세요. 앱은 이에 맞춰 사용량을 조정하고 백그라운드에서 실행되는 콘텐츠를 최소화해야 합니다. APK 크기 최소화에 대한 심층적인 정보는 Medium 포스트 시리즈에서 확인해 보세요. 웹에서는 JavaScript CPU 사용을 최적화하여 래스터 이미지의 렌더링을 피하고 리소스 요청을 최소화하세요. 여기에 더 자세한 내용이 소개되어 있습니다.

배터리 소모 절감

저가형 휴대폰은 보통 배터리 수명도 짧습니다. 사용자들은 배터리 소모 수준에 민감하며, 배터리가 과도하게 소모되면 앱 제거율이 높아지거나 해당 사이트를 회피하는 결과로 이어질 수 있습니다. 다른 페이지나 앱의 세션과 비교하거나 Battery Historian 같은 도구를 사용하여 배터리 사용량을 벤치마킹하고 장시간 실행되어 배터리를 고갈시키는 프로세스를 피하십시오.

데이터 사용량 절약

서버로 데이터를 요구할 때는 한 번 더 생각해보세요. 상호 작용에 필요한 데이터의 양을 줄이고, 탐색을 간소화하여 사용자가 원하는 결과를 빠르게 얻도록 한다는 세 가지 간단한 단계로 데이터 사용량을 절약할 수 있습니다. "데이터 무제한" 요금제조차도 로밍을 한다거나 예기치 않던 요금이 적용되면 전화 요금이 비싸질 수 있기 때문에, 사용자를 대신해 데이터를 절약해주고 네이티브 앱의 경우 네트워크 사용량을 구성할 수 있는 옵션을 제공하면 데이터에 민감한 사용자들, 특히 선불 요금제 사용자나 데이터 사용량이 제한되어 있는 사용자들을 유지하는 데 도움이 됩니다.

혹시 자신이 개발한 앱이 연결 속도가 느린 환경이나 저가형 기기에서 성공을 거두었거나 새로운 통찰력을 지닌 분 계신가요? G+ 포스트를 통해 저희에게도 알려주세요.



구글은 컴퓨터 시스템이 인간의 언어를 인식하여 스마트한 방식으로 처리할 수 있는 방법을 지속적으로 연구하고 있습니다. 예를 들어, 최근 텍스트의 문법 구조를 최상의 정확성, 속도, 대규모로 분석하는 자연어 모델인 파시 맥파스페이스(Parsey McParseface)를 포함하는 신택스넷(SyntaxNet)을 오픈소스로 공개했습니다.
오픈 베타로 제공되는 새로운 구글 클라우드 자연어 처리 API는 구글의 자연어 인식 연구에 기반하고 있습니다. 클라우드 자연어 처리를 사용하면 텍스트의 구조와 의미를 여러 언어로 간편하게 분석할 수 있으며, 영어, 스페인어, 일본어가 우선 지원됩니다. 자세한 기능은 다음과 같습니다.
  • 감성 분석: 특정 텍스트의 전반적인 분위기와 감정을 이해합니다.
  • 개체 인식: 특정 텍스트에 대해 가장 관련성 높은 개체를 파악하고, 이 개체를 인물, 조직, 위치, 이벤트, 제품, 매체 등의 유형으로 분류합니다.
  • 구문 분석: 문장의 구성 요소들을 파악하고 이들 사이의 관계를 분석하여 파스 트리(parse tree)를 만듦으로써 텍스트의 구조와 의미를 인식합니다.


이 API는 다양한 업계의 개발자 및 기업들이 필요로 하는 규모와 성능을 충족할 수 있도록 최적화되었습니다. 예를 들어, 디지털 마케팅 담당자들은 온라인 제품 리뷰를 분석할 수 있으며, 서비스 센터에서는 고객으로부터 걸려온 전화를 기록하여 통화 내용의 분위기를 파악할 수 있습니다. 또한 영국의 온라인 마켓플레이스기업 오카도 테크놀로지(Ocado Technology)를 비롯한 알파 고객들도 훌륭한 성과를 이루어 내고 있습니다.


클라우드 자연어 처리 API의 작동 방식을 확인하려면, 클라우드 자연어 처리를 사용해 뉴욕타임스의 주요 기사를 분석하는 데모를 참조하세요.


“당사는 구글의 클라우드 자연어 처리 API를 사용하여 자연어 인식 분야의 제품과 서비스를 크게 향상시킬 수 있었습니다. 클라우드 자연어 처리 API는 당사에서 초기 이용 사례를 위해 구축했던 커스텀 모델의 훌륭한 대안이 되고 있습니다.”
- 댄 넬슨(Dan Nelson), 오카도 테크놀로지 데이터 분석 총괄


클라우드 스피치 API는 오픈 베타가 시작되었습니다. 이제 기업 및 개발자들은 앱과 IoT 기기에서 80개 이상의 언어로 음성-텍스트 변환 기능을 이용해 볼 수 있게 됩니다. 클라우드 스피치 API는 구글 검색, 구글 나우와 같은 인기 제품을 지원하는 동일한 음성 인식 기술을 사용합니다.    


ㅇ 5,000여 개 업체에서 음성 API 알파 버전 참여를 신청했습니다.  
  • 200개 이상의 국가에서 5천만 건 이상의 다운로드 수를 기록한 영상 채팅 앱인 하이퍼커넥트(HyperConnect)는 구글의 클라우드 스피치 API와 번역 API를 함께 사용하여 서로 다른 언어를 사용하는 사람들 간 대화를 자동으로 인식해 번역해줍니다.    
  • 음성 분석 서비스 업계 리더인 보이스베이스(VoiceBase)는 스피치 API를 이용해 개발자가 통화 기록 녹음으로부터 인사이트를 얻어내고  결과를 예측할 수 있게 합니다.  


이번 베타 버전에는 알파 버전 사용자의 리뷰를 반영하여 새로운 기능을 추가하게 되었습니다.
  • 워드 힌트(Word hints)는 문맥에 따른 맞춤 단어 및 어구를 API 호출할 때 추가하여 인식 결과의 정확도를  높일 수 있습니다. 이 기능은 명령어를 수반하는 상황(예: 영화 시청 중 스마트 TV에서 ‘되감기’ 또는 ‘빨리 감기’와 같은 음성 명령 인식) 또는 사전에 새로운 단어를 추가(예: 특정 언어에서 흔하지 않은 이름 인식)할 때에 유용합니다.   
  • 비동기식 호출: 새로운 비동기식 호출 기능으로 한층 더 API가 간단해져 음성 인식을 지원하는 앱 개발이 더 쉽고 빨라집니다.  


구글의 최신 머신 러닝 API의 오픈 베타 버전을 사용해보고 싶거나 개인용 컴퓨팅 기기(휴대폰, 태블릿, 노트북, 데스크톱)에서 실행 가능한 소프트웨어 앱에 대한 상세 정보 및 가격을 알아보려면 구글 웹사이트에서 클라우드 자연어 처리클라우드 스피치를 확인해보세요.  


작성자:
Apoorv Saxena, 구글 클라우드 플랫폼 클라우드 자연어 처리 및 번역 API 프로덕트 매니저
Dan Aharon, 구글 클라우드 플랫폼 클라우드 스피치 API 프로덕트 매니저   
Dave Stiver, 구글 클라우드 플랫폼  프로덕트 매니저


별 1개 평점의 Google Play Store 리뷰 분류

앱을 배포하기 전에 이런 문제점들을 찾아 해결하기는 쉽지 않습니다. 특히 Android 생태계가 급속히 성장함에 따라 다양한 사용자, 다양한 디바이스를 모두 고려한 고품질의 앱을 만드는 것은 더욱 힘든 일이 되고 있습니다. 사용자 기반은 점점 넓어지는데, 개발자는 단지 몇 개의 기기 상에서만 앱을 테스트 해볼 수 있습니다. 개발자가 도저히 구할 수 없는 기기에서 발생하는 문제를 확인하는 것은 또다른 어려움입니다. 게다가, 앱 배포전에 테스트를 손쉽게 수행할 수 있도록 테스트 인프라를 구축하는 것은 힘들고, 끊임없는 유지 관리가 필요한 비용과 시간도 매우 많이 드는 과정입니다.

다양한 기기 세트를 포함하는 테스트 인프라 구축

개발자가 간편하게 모바일 애플리케이션을 테스트할 수 있도록, Google은 Google 제품을 테스트할 때 사용하는 것과 같은 도구를 사용해, 테스트를 자동화할 수 있는 플랫폼인 Android용 Firebase Test Lab을 만들고 공개했습니다.. 몇 가지 쉬운 단계만 거치면 Google의 물리적 기기에서 테스트를 시작하여 보다 고품질의 애플리케이션을 만들 수 있습니다.

저희 기기에서 테스트하세요

Android 애플리케이션의 테스트에는 보통 앱과의 상호 작용 스크립트 작성을 위해 실제 기기에서 수행하는 테스트(instrumentation test) 스크립트 작성이 포함됩니다. 이미 Espresso, UI Automator 2.0 또는 Robotium을 사용해서 테스트 스크립트를 작성했다면, 지금이라도 Firebase Test Lab에 의해 호스트되는 기기에서 이런 테스트의 실행을 시작할 수 있습니다.

테스트를 작성하는 게 아니라 기록하는 방식으로 바꿔보세요.

이제 Android Studio 2.2(또는 더 최근 버전)에서 새로운 Espresso Test Recorder 도구를 사용하면 Instrumentation Test를 더 쉽게 작성할 수 있습니다. 개발자 입장에서는 앱을 기록 모드에서 시작하기만 하면 됩니다. 그러면 테스트 레코더가 앱과의 모든 상호 작용을 관찰하고 기억한 다음, 이런 상호 작용을 복제하는 Espresso에서 테스트 코드를 생성하게 됩니다. 그런 다음, Firebase Test Lab에서 이런 테스트를 실행하면 됩니다.

작성해둔 테스트가 없다면 저희 것을 사용하세요.

개발자가 직접 자신의 테스트 스크립트를 작성하지 않더라도 여전히 Firebase Test Lab을 사용할 수 있습니다. 저희에게는 Robo 테스트라는, 완전히 자동화된 지능형 테스트가 있는데, 이것이 여러분이 개발하는 앱의 사용자 인터페이스와 상호 작용하면서 앱을 누비고 다닐 것입니다. 코드를 단 한 줄도 작성하지 않고도 이 자동화 테스트의 이점을 누릴 수 있습니다.

원하는 기기들을 선택해서 대규모로 테스트해보세요.

개발자는 실행하는 각 테스트마다 다양한 제조회사와 모델, Android 버전 및 구성(현재 베타용으로 가상 기기도 사용 가능) 중에서 선택하게 됩니다. 그러면 Firebase Test Lab이 여러 기기에서 동시에 테스트를 실행하여 개발자의 선택을 최대한 신속하게 만족시켜 드립니다. 테스트가 완료되면 개발자의 Firebase 프로젝트에 테스트 결과가 저장됩니다.

테스트는 일찍, 자주 실행하세요

테스트는 앱을 Google Play에 발표하기 직전이 아니라 개발 과정 내내 자주 실시할 때 가장 효과적입니다. Firebase Test Lab은 이 절차를 간소화하기 위해 개발자들이 이미 사용하고 있는 Android StudioFirebase 콘솔 같은 도구 내에서 직접 테스트를 호출할 수 있는 기능을 제공합니다. 이제 명령줄 인터페이스에서 지속적인 통합 설정을 통해 테스트를 실행할 수 있습니다. 그 밖에, Google Play 개발자 콘솔에서 출시 전 보고서 수신을 옵트인한 후 개발자가 알파 또는 베타 채널에 발표하는 앱의 새 버전마다 무료로 5분간의 Robo 테스트를 받게 됩니다. 이런 테스트 결과는 Play Store 개발자 콘솔에서 볼 수 있게 됩니다.

Firebase 콘솔에 표시되는 테스트 결과

가격

Robo 테스트 실행 결과로 생성되는 Play 출시 전 보고서는 현재 무료로 제공됩니다! Firebase Test Lab을 사용한 더욱 다양한 사용자 지정 테스트의 경우, Blaze Billing Plan 고객에게는 테스트를 위한 물리적 기기 한 대에 시간당 5달러의 요금이 부과되고 있으며 2016년 10월 1일 이후에는 가상 기기 하나에 시간당 1달러로 서비스를 제공할 예정입니다. 그 이전까지는 가상 기기를 무료로 이용할 수 있습니다. 자세한 내용은 가격 페이지를 참고하세요.

지금 바로 앱 품질 향상을 시작해 보세요!


Firebase Test Lab에서 처음 테스트를 실행하는 것이라도 전혀 어렵지 않습니다. 최초 테스트 실행에 대해 다양한 시나리오를 통해 안내해주는 단계별 codelab을 하나씩 따르면 됩니다. 전체 문서는 여기에서 참조할 수 있습니다. 질문이 있거나 어떤 문제에 직면한 경우에는 Firebase Google 그룹에서 문의하세요.

즐겁게 테스트해보시길 바랍니다!




이런 기능들이 최신 TensorFlow 배포에 모두 포함되어 있습니다. 모바일 TensorFlow 가이드 페이지를 방문하거나 iOS 샘플Android 샘플에 있는 문서를 읽어보시면 더 자세한 정보를 얻을 수 있습니다. 모바일 샘플에서는 ImageNet Inception v1 분류자를 사용하여 이미지를 분류할 수 있습니다.





이 모바일 샘플들은 단지 시작에 불과합니다. 저희는 여러분의 도움과 기고를 기다리고 있습니다. 저희가 여러분의 프로젝트에 대해 알 수 있도록 소셜 미디어 게시물에 #tensorflow 태그를 지정해 주세요!

TensorFlow 0.9.0 릴리스 노트 전문은 여기에서 보실 수 있습니다.




Firebase, Progressive Web Apps, Android N, TensorFlow, VR 등 구글의 주요 제품들을 주제로 세션이 알차게 구성되었고, 약 1000여명의 국내 개발자 및 개발자를 꿈꾸는 학생분들이 참석해주셨습니다.

참석해 주신 모든 분들께 다시 한번 감사 드리며, 참석하지 못한 분들께서도 행사 내용을 확인하실 수 있도록 발표 영상을 업로드 하였으니 놓치지 말고 업데이트된 내용을 꼭 확인해보시기 바랍니다.


* 좌측 상단의 버튼을 누르시면 전체 목록 확인이 가능합니다.
Share on Twitter Share on Facebook


위치, 날씨, 사용자 액티비티, 근처의 비콘 정보를 포함한 7가지 유형의 상황 정보를 사용해서 사용자의 현재 상황을 보다 잘 이해할 수 있으며, 이 정보를 이용해 사용자에게 최적화된 맞춤형 환경을 제공할 수 있습니다. Awareness API는 앱 내에서 상황 정보 값를 이용할 수 있는 두 가지 방법을 제공합니다.
Awareness API는 사용하기 직관적이며, 사용자의 현재 상황을 예측할 수 있는 다양한 값들을 조합하여 상황에 대해 보다 믿음직한 단서를 제공합니다. 또한, 플랫폼 차원에서 시스템 리소스를 관리하여 배터리 소모량과 CPU 사용량을 최소화합니다. 어떤식으로 사용할 수 있을지에 관해, 구글과 개발 초기부터 협력한 파트너분들이 공유해주신 재미있는 사례들이 있습니다.


온라인 주거용 부동산 사이트인 Trulia 는 Fence API를 사용해서 오픈 하우스를 제안합니다. 날씨가 좋을 때 사용자가 평소에 관심 있던 주택 근처를 걸어하고 있으면 Trulia가 그 집에 들러 구경해보고 가라고 상기시켜 주는 알림을 보냅니다. 이 일종의 맞춤화된 알림은 사용자가 완벽한 타이밍에 오픈 하우스를 둘러보도록 할 수 있습니다.
한편, SuperPlayer Music은 Snapshot API와 Fence API를 사용하여 사용자의 기분에 완벽하게 적합한 음악을 제안합니다. 이 앱의 도우미는 사용자가 막 조깅을 끝내고 스트레칭을 시작할 때, 장거리 운전을 앞두고 출발할 때, 또는 운동하려고 헬스클럽으로 향할 때, 그 상황을 이해하고 적합한 재생목록을 제안해 줍니다.

저희는 이제 막 Awareness API를 시작하려 하고 있습니다. Google Awareness API 개발자 문서부터 읽어봄으로써 여러분이 개발하는 앱 내에 맞춤형 환경을 빌드하는 여정에 동참하시고, Google I/O 세션을 시청하면서 더 자세히 알아보세요.



게시자: Bhavik Singh, 제품 관리자
Share on Twitter Share on Facebook

Charles Tommo라는 사용자는 사람들에게 말라리아 예방법을 가르쳐주는 “Dr Malaria”라는 앱을 만들었습니다.

여러분은 Google이 마련한 교육 과정을 통해 현실 세계의 문제를 해결할 수 있는 앱을 만들 수 있습니다.각자의 페이스에 맞춰 Android Studio(Google의 공식 Android 앱 개발 도구) 사용 방법을 배워 앱의 사용자 인터페이스를 디자인하고, Java 프로그래밍 언어로 사용자 상호 작용을 구현할 수 있습니다.
교육 과정에서는 커피숍의 주문서, 동물 보호소에서 애완동물을 추적하는 앱, 미국 원주민 미오크(Miwok)족 어휘를 가르쳐주는 앱, 그리고 세계 곳곳에서 최근에 발생한 지진에 관한 앱 등을 만드는 방법을 단계별로 설명해 드립니다. 교육 과정이 끝나면 친구와 가족과 공유할 수 있는 완전한 앱 포트폴리오를 갖추게 되실 겁니다.
Android Basic Nanodegree 과정을 마치면, Career-track Android Nanodegree(중급 개발자용)로 승급하여 계속 배울 수 있는 기회가 있습니다. 자세한 정보와 자격 요건은 udacity.com/legal/scholarship에서 알아보세요. 이제 여러분은 기술 사업가가 혹은  자신과 지역사회, 더 나아가 세계를 위해 아주 멋진 Android 앱을 만드는 데 꼭 필요한 기술을 배울 수 있는 기회를 맞이하게 된 것입니다. 개별 과정은 전부 udacity.com/google에서 온라인으로 무료로 수강할 수 있습니다. 그 밖에, Udacity는 서비스 요금을 내고 코치 지도, 프로젝트 지도, 순조로운 진행을 위한 지원, 진로 상담, 수료 후 자격증 받기 등을 포함한 유료 서비스도 제공합니다.

여러분은 다음과 같은 기술을 배우면서 Java 프로그래밍 언어로 입문자를 위한 컴퓨터공학 개념을 접하게 될 것입니다.
Android Basic Nanodegree 프로그램에 등록하려면 여기를 클릭하세요. 강의에서 만나요!

게시자: Shanea King-Roberson, 리드 프로그램 관리자. Twitter: @shaneakr Instagram: @theshanea
Share on Twitter Share on Facebook

혹시 여러분이 데이터를 보호하기 위해, "암호화" 공급자의 SHA1PRNG 알고리즘을 이용해서 키를 파생해 사용하고 있었다면, 이제는 진짜 키 파생 함수를 사용해 데이터를 다시 암호화 할 필요가 있습니다.

Java 암호화 아키텍처(Java Cryptography Architecture, JCA)를 통해 다음과 같은 호출을 사용하여 암호화(cipher)나 유사난수 생성기(Pseudo-Random Number Generator) 클래스 인스턴스를 만들 수 있습니다.
SomeClass.getInstance("SomeAlgorithm", "SomeProvider");

조금 더 간단한 방법도 있습니다.
SomeClass.getInstance("SomeAlgorithm");

예를 들면 다음과 같습니다.
Cipher.getInstance(“AES/CBC/PKCS5PADDING”);
SecureRandom.getInstance(“SHA1PRNG”);


Android에서는 공급자를 지정하지 않는 것이 좋습니다. 일반적으로 특정 공급자를 지정해 API를 호출하는 것은 애플리케이션에 공급자가 포함되어 있거나, ProviderNotFoundException이 발생했을 경우 이를 처리할 필요가 있는 경우에만 수행되어야 합니다. 하지만, 불행히도, 많은 앱들이 지금은 없어진 “암호화” 공급자에 의존해 키를 파생해 사용하고 있습니다.

"암호화" 공급자는 SecureRandom의 인스턴스 생성 시,  “SHA1PRNG” 알고리즘만 지원합니다. 문제는 이 SHA1PRNG이 탄탄한 암호 작성/해독 알고리즘이 아니라는 것입니다. 자세한 내용에 관심이 있는 분은 다음 내용을 참고하시기 바랍니다. On statistical distance based testing of pseudo random sequences and experiments with PHP and Debian OpenSSL(Yongge Want와 Tony Nicol 공저). 위 논문의 8.1단원을 살펴보시면, 바이너리 형식으로 처리되는 "랜덤" 시퀀스가 0을 반환하는 성향이 있으며, 이 같은 성향은 시드에 따라 악화될 수 있다고 설명되어 있습니다.

이에 따라, 저희는 Android N에서 SHA1PRNG 알고리즘과 "암호화" 공급자 사용을 지원하지 않을 예정입니다. 저희는 몇 년 전에 안전한 자격 증명 저장을 위한 암호화 사용에서 키 파생을 위해 SecureRandom을 사용하는 데 따른 문제를 다룬 적이 있습니다. 하지만 SecureRandom이 계속 사용되고 있기에 여기서 다시 되짚어보려고 합니다.

잘못된 방법이지만, 흔하게 볼 수 있는 문제는 암호를 시드 값으로 사용하여 암호화를 위한 키를 파생하는 것입니다. SHA1PRNG의 구현에는 결과 값을 얻기 전에 setSeed()가 호출될 경우 그것을 결정적으로 만드는 버그가 있었습니다. 이 버그는 암호를 시드 값으로 활용해 키를 파생한 다음, "랜덤" 출력 바이트를 키로 사용했습니다(여기서 "랜덤"이란 "예측 가능하고 암호화 측면에서 취약하다"는 의미임). 그 후 이 키 값을 활용해  데이터를 암호화하고 해독하는 데 사용했습니다.

아래에서, 정확하게 키를 파생하는 방법과 안전하지 않은 키로 암호화된 데이터를 복호화 하는 방법을 설명하겠습니다. 보다 자세한 내용이 궁금하신 분은 완전한 예제도 참고하실 수 있습니다. 예제에는 사용이 중단된 SHA1PRNG 기능 없이는 데이터를 복호화 할 수 없는 경우에 사용할 수 있는  헬퍼 클래스가 포함되어 있습니다.

다음과 같은 방법으로 키를 파생할 수 있습니다.
SecretKey key = new SecretKeySpec(keyBytes, "AES");
   /* User types in their password: */  
   String password = "password";  

   /* Store these things on disk used to derive key later: */  
   int iterationCount = 1000;  
   int saltLength = 32; // bytes; should be the same size
              as the output (256 / 8 = 32)  
   int keyLength = 256; // 256-bits for AES-256, 128-bits for AES-128, etc  
   byte[] salt; // Should be of saltLength  

   /* When first creating the key, obtain a salt with this: */  
   SecureRandom random = new SecureRandom();  
   byte[] salt = new byte[saltLength];  
   random.nextBytes(salt);  

   /* Use this to derive the key from the password: */  
   KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt,  
              iterationCount, keyLength);  
   SecretKeyFactory keyFactory = SecretKeyFactory  
              .getInstance("PBKDF2WithHmacSHA1");  
   byte[] keyBytes = keyFactory.generateSecret(keySpec).getEncoded();  
   SecretKey key = new SecretKeySpec(keyBytes, "AES");  

이게 전부입니다. 그 밖에는 아무것도 할 필요가 없습니다.

데이터를 더 쉽게 전환할 수 있도록 하기 위해, 매번 암호로부터 파생되는 불안전한 키로 암호화된 데이터를 가지고 있는 개발자들의 사례를 다루었습니다. 이 예제 앱에서는 키를 파생하기 위해 헬퍼 클래스 InsecureSHA1PRNGKeyDerivator를 사용할 수 있습니다.

 private static SecretKey deriveKeyInsecurely(String password, int
 keySizeInBytes) {  
    byte[] passwordBytes = password.getBytes(StandardCharsets.US_ASCII);  
    return new SecretKeySpec(  
            InsecureSHA1PRNGKeyDerivator.deriveInsecureKey(  
                     passwordBytes, keySizeInBytes),  
            "AES");  
 }  

그런 다음, 위에서 설명한 대로 안전하게 파생된 키로 데이터를 다시 암호화할 수 있습니다.

참고 1: 앱이 계속 작동하도록 하기 위한 임시 방편으로서, 저희는 Marshmallow를 위한 SDK 버전인 SDK 버전 23이나 그 이전 버전을 대상으로 여전히 인스턴스를 만들 수 있도록 하기로 결정했습니다. Android SDK에서 "암호화" 공급자의 존재에 의존하지 마시기 바랍니다. 앞으로 이것을 완전히 삭제할 계획이니까요.

참고 2: 시스템의 상당 부분이 SHA1PRNG 알고리즘이 존재하는 것으로 추정하기 때문에. SHA1PRNG의 인스턴스가 요구되고 공급자가 지정되지 않은 경우, 저희는 OpenSSL에서 파생된 강력한 난수의 원천인 OpenSSLRandom의 인스턴스를 반환합니다.
Share on Twitter Share on Facebook

Chu-Day는 커플들이 가장 소중한 데이트를 절대 잊지 않도록 해주는 앱입니다(Android 및 iOS에서 사용 가능). 이 앱은 캐릭터 중심의 게임화된 라이프스타일 앱을 개발하는 한국 회사 말랑스튜디오에서 만들었습니다.
일반적으로 카운트다운이나 기념일 앱에서는 사용자 로그인이 불필요합니다. 그러나 말랑스튜디오는 Chu-day를 특별하게 만들고 싶었고, 커플들이 특별한 기념일을 함께 카운트다운 할 수 있도록 그들을 연결해주는 기능을 제공함으로써 다른 앱들과 차별화하고 싶었습니다. 이를 위해서는 로그인 기능이 필요했고, Chu-day는 사용자들이 떨어져 나가는 것을 막기 위해 로그인 과정을 간소화해야 했습니다.
말랑스튜디오는 Facebook과 Google 로그인을 사용해서 서버 배포나 데이터베이스 같은 문제를 걱정할 필요 없이, 단 하루 만에 앱의 온보딩 흐름을 통합할 수 있었습니다. 뿐만 아니라, 말랑스튜디오는 로그인 구현의 개발과 테스트는 물론, 사용자 관리를 위해 Firebase의 사용자 관리 콘솔을 활용해 왔습니다.
“Firebase 인증에는 최소한의 구성만 요구되기 때문에 소셜 계정 등록을 구현하는 일이 쉽고 빨랐죠. 콘솔의 사용자 관리 기능은 정말 훌륭해서, 저희가 손쉽게 사용자 인증 시스템을 구현할 수 있었습니다.” - 김영호, CEO / 말랑스튜디오 창립자

Fabulous, Firebase Auth를 사용하여 로그인을 빠르게 구현

Fabulous는 Firebase 인증을 사용해서 로그인 시스템을 작동시킵니다. Fabulous는 듀크대학교(Duke University)의 첨단 연구 센터(Center for Advanced Hindsight)에서 탄생한 연구 기반의 앱입니다. 이 앱의 목표는 사용자들이 건강과 웰빙의 향상이라는 궁극적인 목표를 가지고 나쁜 습관들을 바로잡아 건강한 생활로 바꾸는 여정을 시작하도록 돕는 것입니다.
Fabulous의 개발자들은 사용하기 쉽고, 최소한의 업데이트만 요구되며, 최종 사용자들과의 마찰을 줄일 수 있는 온보딩 흐름을 구현하고자 했습니다. 그들은 사용자들이 등록하기 전에 앱을 사용해볼 수 있는 익명 옵션을 원했습니다. 또한, 여러 가지 로그인 유형을 지원하고 사용자의 로그인 흐름이 앱의 디자인과 일치하도록 하는 옵션도 추가하고 싶었습니다.
“오후 한나절 만에 인증을 구현할 수 있었어요. 공급자들이 API를 변경할 때마다 업데이트해야 하는 솔루션을 만드느라 몇 주일을 보냈던 일이 기억납니다.” - Amine Laadhari, Fabulous CTO.

Firebase 인증에 대해 더 알아보려면, 개발자 사이트에 가서 저희의 I/O 2016 세션, “훌륭한 로그인 환경 모범 사례”를 시청해 보세요.
Share on Twitter Share on Facebook


구글플레이팀에서는 계속해서 앱에 새로운 콘텐츠를 추가하고 업데이트하여 개발자에게 최신 정보를 제공하여 비즈니스 성장에 도움을 드릴 것입니다. 오늘 바로 개발자용 플레이북을 다운로드해보세요. 그리고 여러분의 의견을 들려주세요.

이 앱은 다음 언어로도 지원됩니다. Bahasa Indonesia, Deutsch, español(Latinoamérica), le français, português do Brasil, tiếng Việt, русский язы́к, 한국어, 中文(简体), 中文(繁體), 日本語.


게시자: Dom Elliott, Google Play 팀
Share on Twitter Share on Facebook



Q: 안녕하세요, 본인 소개 좀 간단히 해줄래요?
A:안녕하세요, 저는 컴퓨터를 좋아하고 프로그래머가 꿈인 전성 (14살)이라고 합니다.

Q: Google I/O Extended 는 어떻게 알게 되었어요?
A: 페이스북에 올라온 홍보글을 봤고요, 카카오톡에 있는 안드로이드 Q&A 오픈채팅방에서도 봤어요.


Q: 그랬군요. 그러면 개인적으로 활동하는 커뮤니티가 있는거에요?
A: 아니요, 따로 활동하는 커뮤니티는 없어요. 카카오톡 오픈채팅방에서 대화는 가끔씩 해요.


Q: Google I/O Extended 행사에는 왜 참석한거에요?
A: 음, 휴대폰하고 컴퓨터를 연결하면 로그캣이 생기자나요. 예전에 USB 케이블이 없어서 연결할 방법이 없어 안드로이드 채팅방에 질문을 했다가 우연히 파이어베이스를 알게 되었어요. 그 이후로 파이어베이스에 관심이 생겨서 이번 Extended 행사에 와서 들어보고 싶었어요. 원래는 텐서플로우도 관심이 있었는데 그건 듣다가 너무 복잡해서 포기했어요. :(


Q: Google I/O Extended 행사에 실제로 와보니 어때요?
A: 되게 좋아요! 예전에 다른 GDG 행사에 학생들이 와서 분위기를 안좋게 한적이 있다고 들었어요. 그래서 혹시 학생이 오는것을 반기지 않을까봐 걱정했는데 그렇지 않은것 같아요. 학생인데도 참여할 수 있어서 너무 좋아요.


Q: 프로그래머가 꿈이라고 했는데요, 전성군은 앞으로 어떤것을 해보고 싶어요?
A: 인공지능이요! 어려워서 지금은 포기하긴 했는데 언젠가 다시 해보고 싶어요. 전에 알파고와 이세돌의 경기때문에 인공지능 분야를 알게 되었고 또 구글에서 나온 텐서플로우도 알게 되었어요. 나중에 인공지능으로 무언가를 꼭 만들어보고 싶어요.


Q: 행사장엔 어떻게 왔어요? 혹시 이런 행사 다니는것을 부모님이 걱정 안해요?
A: 집은 양재쪽이고 혼자 전철을 타고 왔어요. 부모님도 제가 개발자 행사 다니는건 좋아하세요. 다만, 혹시나 길을 잃을까봐 조금 걱정은 하세요 :)


Google I/O Extended Seoul 에서 세션을 듣는 전성 학생



Google I/O Extended Incheon 단체사진




Share on Twitter Share on Facebook