실시간 데이터베이스는 4년 전 Firebase용으로 츨시한 첫 번째 기능입니다. 그 당시에는 클라우드에서 호스트되는 JSON 데이터베이스가 다소 생소한 개념이어서 즉시 세간의 주목을 받았습니다. Firebase 데이터베이스가 다른 것들과 차별화되는 점은, 단 하나의 사용하기 쉬운 API로 서로 다른 클라이언트 사이에 즉각적으로 데이터를 동기화할 수 았는 기능이었습니다.
실시간 데이터베이스는 애플리케이션 개발의 복잡한 작업 중 하나를 일관된 프로그래밍 인터페이스 뒤에 숨겨줍니다. 실시간 협업 애플리케이션을 손쉽게 만들 수 있도록 해주었습니다.
실시간 데이터베이스란?
실시간 데이터베이스는 사실상 실시간으로 관리하는 하나의 커다란 JSON 객체입니다. 즉, 실제로는 수많은 값들로 구성된 하나의 트리입니다.
따라서 단순하고 유연한 데이터 모델링이 가능합니다. 이 데이터베이스에는 스키마가 없습니다. 즉, 고정된 구조를 최초에 결정해 고정 할 필요가 없습니다. 데이터 유효성 검사가 걱정된다면, 데이터베이스에 입력되는 각 데이터의 구조에 대한 유효성 검사를 할 수 있게 해주는, 서버 측 규칙 언어를 사용할 수 있습니다.
Firebase 데이터베이스의 독특한 특징은 실시간 동기화 기능입니다. 종래의 데이터베이스에서는 대부분 요청/응답 모델로 작업하게 되어 있습니다. 쿼리를 작성한 다음 데이터베이스에게 그 쿼리의 결과를 달라고 요청하는 식이죠. 결과가 다시 필요하거나 그 결과에 대한 업데이트 정보가 있는지 확인하고 싶을 경우에는 쿼리를 다시 실행해야 합니다.
그러나 Firebase 데이터베이스는 다릅니다. 변경 사항이 발생하면 데이터베이스가 그 사실을 알려줍니다. 여러분은 데이터베이스에게 '트리의 이 위치에서 뭔가 변경되면 알려주세요'라고 하면 됩니다. 그러므로 변경 사항을 간단히 모니터링하고 모든 사용자들이 그 변경된 내용을 동기화된 상태로 유지할 수 있습니다.
실시간 이벤트
Firebase 데이터베이스는 하나의 API로 데이터의 현재 값과 해당 데이터에 대한 업데이트를 모두 앱에 제공합니다.
iOS
refHandle = postRef.observeEventType(FIRDataEventType.Value, withBlock: { (snapshot) in
let postDict = snapshot.value as! [String : AnyObject]
// …
})
Web
firebase.database().ref('posts/' + postId).on('value', function(snapshot) {
var post = snapshot.val();
// …
});
Android
mPostReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Get Post object and use the values to update the UI
Post post = dataSnapshot.getValue(Post.class);
// …
}
@Override
public void onCancelled(DatabaseError databaseError) {
// Getting Post failed, log a message
Log.w(TAG, "loadPost:onCancelled", databaseError.toException());
// …
}
});
이 후, 사용자 인터페이스에 데이터를 표시하고, 사용자가 그 데이터를 변경 할 수 있도록 할 수도 있습니다. 간단하죠.
오프라인 상태에서 일어나는 일
네트워크 연결이 끊기는 순간 반응하지 않는 앱을 사용해 보셨나요? 대부분의 개발자들은 네트워크 상태에 상관없이 앱이 작동하도록 만들고 싶어 합니다. 그래서 Firebase 데이터베이스는 앱에 표시되는 모든 데이터의 내부 캐시를 유지합니다. 네트워크 연결이 일시적으로 끊어지더라도 앱은 캐시에서 데이터를 읽어올 수 있습니다. 연결이 끊긴 상태에서, Firebase 데이터 클라이언트는 로컬 쓰기 작업의 큐를 유지합니다. 앱은 계속 작동하고, 이를 위해 따로 추가 코드를 쓸 필요가 없습니다.
Firebase 플랫폼의 힘은 모든 기능들을 통합하는 데서 나옵니다. 저희는 더 많은 통합을 추가하고 있지만, 개발자가 이미 사용할 수 있도록 준비된 통합의 예가 몇 가지 있습니다. 사용자들이 앱에 로그인할 수 있도록 허용한 다음, 자신의 ID를 바탕으로 자신의 데이터에 접근하도록 보장하세요. 사용자의 파일을 Firebase 저장소에 저장한 다음, 실시간 데이터베이스를 사용해서 다른 모든 앱 사용자들에 대해 상태와 가용성을 동기화하세요. Firebase Analytics로 어떤 파일들이 가장 인기 있는지 추적하고 해당 파일에 대한 협업을 위해 다른 사용자들을 초대하세요.
일반적으로 Chrome 확장 프로그램을 만드는 것은 다른 웹 앱을 만드는 것과 매우 유사합니다. 여러분은 HTML, JavaScript 및 CSS를 사용하고 계실 겁니다. 다만, 몇 가지 차이점이 있습니다. 특히, Firebase와 같은 별도의 호스팅 라이브러리와 서비스를 활성화하고 사용하려면 특별한 설정이 필요합니다. 또한, chrome.identity API와 같은 특수 API가 Chrome 확장 프로그램에 사용될 수 있으며, 이를 잘 활용하면 보다 나은 사용자 경험을 제공할 수 있습니다. 그럼 어떻게, Chrome 확장 프로그램에서 Firebase를 활성화할 수 있는지 단계별로 살펴보겠습니다.
Firebase 초기화
개발 가이드를 살펴보시면, Firebase SDK를 개발자의 main.html 파일로 가져와서 사용하도록 안내합니다. 그러나 Chrome 확장 프로그램에서는 콘텐츠 보안 정책 때문에 인라인 스크립트를 피하는 것이 최선입니다. 결과적으로, 여러분은 HTML 대신에 JS 파일에 Firebase SDK 초기화 코드를 추가해야 합니다. 다음과 같은 코드를 확장 프로그램의 JS 파일에 추가합니다.
또한, 스크립트가 호스팅되는 도메인(즉, www.gstatic.com)은 허용 목록에 추가해야 합니다. 또한, 실시간 데이터베이스 및 Firebase 저장소에 의해 사용되는 *.firebaseio.com 및 www.googleapis.com도 허용 목록에 추가해야 합니다. 이들 도메인에 대한 액세스를 허용하려면 manifest.json에 다음 스크립트를 추가합니다.
ID 팀은, 사용자가 자신의 구글 계정을 이용해, 다양한 애플리케이션에 쉽고 안전하게 로그인하고, 그리고 달력 또는 연락처 등의 정보를 다른 앱과 공유할 수 있도록 노력하고 있습니다.
이러한 상호 작용은 OAuth 요청을 통해 이루어지며, 구글은 개발자가 구글과 자신의 서비스 사이에 OAuth 흐름을 구현할 수 있는 다양한 방법들을 수년간 지원해왔습니다. 저희는 더 나은 보안과 사용성을 염두에 두고서 이런 방법 중 하나를 곧 종료할 예정입니다. 향후 몇 개월 내에 저희는 “웹 뷰”라고 하는 임베디드 브라우저에서 구글에 대한 OAuth 요청을 더 이상 허용하지 않을 것입니다.(예: 안드로이드의 웹뷰 UI 요소, iOS의 UIWebView/WKWebView, Windows 및 OS X의 해당 요소).
임베디드 웹 뷰 대신에 OAuth 요청을 위해 기기 브라우저를 사용할 경우, 앱의 사용성이 상당히 개선됩니다. 사용자는 기기당 한 번만 구글에 로그인하면 됩니다. 여러분의 앱의 로그인 전환율이 개선됩니다. 일부 운영 체제에서 사용 가능한 최신 “인앱 브라우저 탭” 패턴(예: 안드로이드의 크롬 커스텀 탭, iOS의 SFSafariViewController)을 활용하면, 보다 자연스러운 UX 환경을 제공할 수 있습니다.
이와 반대로, OAuth를 위해 임베디드 브라우저를 사용하는 방법은 사용자가 기존의 로그인된 세션을 사용하는 대신, 매번 구글에 로그인해야 합니다. 또한, 웹뷰를 사용할 때와는 달리, 개별 앱은 기기 브라우저에 표시되는 컨텐츠의 내용을 분석하거나 변경할 수 없음으로 보안이 향상됩니다.
여러분의 마이그레이션을 돕기 위해, 저희는 여러분이 이용할 수 있는 다음과 같은 라이브러리와 샘플을 제공합니다.
구글 계정으로 로그인 및 OAuth를 위해 저희가 권장하는 SDK인 안드로이드 및 iOS용 Google Sign-In.
iOS에서 구글 로그인의 버전이 3.0 이전인 경우에는 인앱 브라우저 탭의 최신 모범 사례를 지원하지 않으며, 따라서 지원이 중단되었습니다. 구글 로그인을 사용하는 경우, 보안 및 사용성에 관련된 모든 최신 정보를 얻으려면 최신 버전으로 업데이트하세요. 현재 이 정책에서 iOS 8 상에서 웹뷰 지원을 제거하는 것은 아니지만, 보안을 더욱 강화하기 위해 사용자가 자신의 기기를 업그레이드하도록 알려주는 알림을 저희가 표시할 수도 있습니다.
구글에 대한 OAuth 요청 시에 웹 뷰의 지원 중단을 위한 출시 일정은 다음과 같습니다. 2016년 10월 20일부터 가능한 대안이 있는 플랫폼 상에서 새 OAuth 클라이언트가 웹 뷰를 사용하지 못하게 차단할 것이며, 기존 OAuth 클라이언트의 경우는 사용자에게 직접 노출되는 알림을 단계적으로 표시할 것입니다. 2017년 4월 20일에 저희는 가능한 대안이 존재하는 플랫폼 상에서 모든 OAuth 클라이언트에 대해 웹 뷰를 사용하는 OAuth 요청을 차단하기 시작할 것입니다.
마이그레이션에 대한 질문이 있으신 경우, “google-oauth”라는 태그가 붙은 Stack Overflow에 게시물을 올려주세요.
2016년 8월 23일부터 일부 넥서스 기기를 대상으로 안드로이드 7.0 누가 OTA가 사용자에게 배포되기 시작했습니다. 이와 동시에 저희는 안드로이드 7.0 소스 코드를 AOSP(Android Open Source Project)에 푸시하는 중이며, 이 최신 버전의 안드로이드를 더 많은 사용자분들이 사용할 수 있도록 노력하고 있습니다.
저희는 지난 몇 달 동안 여러분과 협력하여 이번 릴리스에 대한 개발자 여러분의 다양한 피드백을 받았습니다. 또한, 안드로이드 7.0 기기에서 여러분의 앱이 잘 동작할 수 있도록 준비할 수 있도록, 5번에 걸쳐 개발자 프리뷰 버전을 공개했습니다.
안드로이드 7.0 누가의 기능
Android Nougat는 여러분을 포함하여 전 세계수천 명의 개발자와 팬들이 보내온 의견을 반영하여 기능을 추가하였습니다. 안드로이드 누가에는 새로운 VR 모드를 비롯한 250개의 주요 기능이 추가되었습니다. 저희는 가장 아랫단부터 최상단 UI까지, 모든 영역의 안드로이드 스택에서 개선 작업을 수행했습니다(예: 운영 체제가 센서 데이터를 판독하는 방법부터 픽셀을 디스플레이로 보내는 방법까지). 이를 통해 고품질의 모바일 VR 환경을 제공할 수 있습니다.
게다가, 누가는 안드로이드를 더욱 강력하고 생산적이며 안전하게 만드는 데 도움이 되는 여러 가지 새로운 기능을 제공합니다. 누가는 새로운 JIT/AOT 컴파일러를 제공하여 소프트웨어 성능을 개선하고, 앱 설치를 빠르게 하면서도 저장소 공간은 덜 차지합니다. 고성능 3D 그래픽을 구현하기 위한 낮은 오버헤드의 크로스 플랫폼 API인 Vulkan도 지원합니다. 다중 창 지원에서는 사용자가 동시에 두 개의 앱을 실행할 수 있으며, 직접 회신기능을 활용해, 사용자가 앱을 열지 않고도 알림에 직접 회신할 수 있습니다. 언제나처럼, 안드로이드는 강력한 보안 및 암호화 계층을 기반으로 구축되어 여러분의 개인 데이터를 안전하게 지켜주며, 특히, 파일 기반 암호화, 빈틈없는 업데이트 및 직접 부팅과 같은 새로운 기능을 제공합니다.
동작 변경 사항에 대한 자세한 내용과 여러분의 앱에서 사용 가능한 새로운 기능을 비롯한 모든 누가 개발자 리소스는 여기에서 찾으실 수 있습니다. 새로운 개발자용 기능에 대한 개요는 여기에서 볼 수 있으며, 누가의 모든 새로운 사용자 기능은 여기에서 둘러보실 수 있습니다.
Android Nougat의 다중 창 모드
새로운 사용자의 유입
오늘부터 시작해 향후 몇 주 동안의 출시 과정에서 넥서스 6, 넥서스 5X, 넥서스 6P, 넥서스 9, 넥서스 플레이어, Pixel C 및 General Mobile 4G(Android One)는 안드로이드 7.0 누가 OTA(무선 소프트웨어 업데이트)를 받게 됩니다. 또한, 안드로이드 베타 프로그램에 등록된 기기도 이 최종 버전을 받을 것입니다.
그리고 저희 파트너들은 안드로이드 누가가 실행되는 멋진 기기들을 생산하고 있습니다(예: 곧 출시되는 LG V20 포함). 이 스마트폰은 안드로이드 누가가 탑재되는 최초의 신형 스마트폰이 될 것입니다.
이 모든 신형 기기들에서 누가가 실행되기 시작하는 바로 지금이 여러분의 앱 업데이트를 Google Play에 게시할 때입니다. API 24를 대상으로 컴파일하는 것이 바람직합니다. 아직도 몇 가지 최종 변경 사항을 테스트 중이라면, Google Play의 베타 테스트 기능을 사용해서 안드로이드 7.0 누가 관련된 내용을 소규모의 사용자 그룹으로부터 일찍 피드백을 받으세요. 그 후, 업데이트된 앱을 모든 단계별로 사용자에게 업데이트 된 앱을 릴리즈 할 수 있습니다.
누가의 다음 단계는?
저희는 앞으로 다가올 몇 분기에 걸쳐 누가에 대한 새로운 정기적 유지 관리 일정으로 옮겨갈 것입니다. 실제로 저희는 최초의 누가 유지 관리 릴리스를 위한 작업을 이미 시작했으며, 이 작업을 지속적으로 개선하고 가다듬어 올 가을에 개발자 프리뷰로 여러분에게 제공해 드릴 것입니다. 계속 지켜봐 주세요!
개발자 프리뷰 빌드에 관해 기록된 버그는 저희가 곧 마무리할 예정이지만, 피드백은 계속해서 보내 주세요! 프리뷰 추적기에 제출한 문제가 아직도 나타난다면, AOSP 문제 추적기에서 안드로이드 7.0에 관한 새 문제를 제출해 주세요.
프리뷰에 참여해 주셔서 감사합니다. 올해 초 저희는 모든 사람에게 기회를 주기 위해 이 프리뷰를 공유했으며, 이를 통해 안드로이드의 향후 릴리스를 더욱 강화할 수 있었습니다. 여러분의 지속적인 피드백은 사용자뿐 아니라 전체 안드로이드 생태계에 있어서 이번 최종 릴리스를 더욱 완벽하게 가다듬는 데 엄청난 도움이 되었습니다.
파이어베이스를 사용해, 개발자는 보다 수월하게 최적의 사용자 경험을 제공할 수 있게 되었습니다. 파이어베이스는 다양한 앱에서 공통적으로 요구되는 기능을 포함하고 있으며, 개발자 여러분은 사용자 로그인등 꼭 필요하지만 구현하기 복잡한 기능을 쉽게 추가하고 앱의 핵심 기능을 개발하는데 더욱 집중할 수 있습니다. 어떻게 가능한지 영상을 통해 확인해 보세요.
아일랜드 더블린 소재의 StoryToys는 아이들을 위한 인터렉션북 및 게임 출판업체입니다. 대부분의 아동용 앱 개발업체들과 마찬가지로, 이 회사도 알맞은 대상 사용자들이 자사의 콘텐츠를 찾아내도록 하기 위해 고심하고 있었습니다. Google Play에 '가족' 섹션이 생긴 이래 StoryToys는 놀랍게 성장하여 수익이 270%, 다운로드 횟수가 1,300%나 증가했습니다.
이 회사의 최고 제품 책임자 Hear Emmet O’Neill 씨와 총괄 영업 책임자 Gavin Barrett 씨가 '키즈' 섹션이 새 콘텐츠를 찾는 가족들에게 얼마나 신뢰할 수 있고 창조적인 공간을 제공하고 있는지 말해줍니다. 또한 베타 테스트, 각 지역 실정에 맞춰 책정한 가격 등을 이용해, StoryToy의 대표적인 앱인 My Very Hungry Caterpillar (내 굶주린 애벌레)가 사용자 수와 수익을 현저히 늘리는 데 어떻게 도움이 되었는지도 들어보세요. Designed for Families에 대해 더 자세히 알아보고 Playbook for Developers 앱을 설치하여 항상 더욱 다양한 기능을 접하고 Google Play에서 성공적으로 비즈니스를 성장시키는 데 도움이 될 모범 사례를 살펴보세요.
Google I/O에서 모바일 웹 세계의 현황과 AMP(Accelerated Mobile Pages) 및 PWA(Progressive Web Apps) 같은 새로운 기술을 활용하여 최고의 모바일 환경을 제공하는 방법에 대해 소개하였습니다. 블로그를 참고해 영상을 시청해 보세요.
High performance web user interfaces
이번 세션에서는 몇몇 UI 컴퍼넌트를 자세히 들여다 보고,어떻게 사용자가 만족할만한 고성능 사용자 인터페이스를 만들 수 있는지 그 방법에 대해 알아봅니다.
Angular2 and Progressive Web Apps
앵귤러 팀은 항상 앵귤러를 최고의 모바일 앱 개발용 프레임워크가 되도록 노력하고 있습니다. 이번 세션에서는 완벽하게 변신한 앵귤러2 프레임웍과 프로그레시브 웹 앱을 쉽게 개발할 수 있는 새로운 방법을 소개합니다.
지난 Google I/O 2016 에서 발표된 내용 중 안드로이드와 관련된 주요 세션을 골라 한글 자막과 함께 제공해 드립니다. 아직 Google I/O 2016 세션을 보지 못하신 분들이나, 다시 한번 확인하고 싶은 분들께서는 한글 자막과 함께 시청해 보시기 바랍니다.
Google I/O 2016 에서 안드로이드 스튜디오 2.2. 프리뷰 버전이 공개되었습니다. I/O 이후 여러번에 걸쳐 프리뷰가 업데이트 되었지만, 핵심 기능은 I/O 버전과 크게 다르지 않습니다. 약 25분 동안의 라이브 데모와 주요 기능들에 대한 자세한 설명이 포함되어있습니다. 포스팅과 함께 다시 한번 확인해 보시기 바랍니다.
많은 개발자분들이 관심갖고 계신 내용이죠? Google I/O 2016 에서는 사용자가 안드로이드 앱을 설치하지 않아도 즉시 실행될 수 있는 안드로이드 인스턴트 앱을 발표했습니다. 안드로이드 앱 경험을 바꿀 수 있는 이 프로젝트에 대해 짧은 영상과 포스팅을 통해 확인해 보세요.
Google Cast & 안드로이드 TV
Google Cast와 안드로이드 TV는 사용자들이 좋아하는 예능, 영화 그리고 스포츠 등의 엔터테인먼트 컨텐츠를 우리집의 가장 큰 화면과 가장 좋은 스피커를 통해 경험할 수 있도록 도와줍니다. 자세한 내용을 영상으로 확인해 보세요.
Google Developers 팀에서는 구글 제품을 사용한 다양한 프로젝트를 전시하고 체험해볼 수 있는 Google HackFair 를 일년에 한번씩 개최해오고 있습니다. 2015년에도 많은 지원팀 중 총 25개의 팀이 최종 선발되어 구글의 다양한 기술들을 활용한 독창적인 프로젝트들을 선보인 바 있습니다.
<Google HackFair 2015 스케치 영상>
이번 Google HackFair 2016은 여러분의 프로젝트를 더 많은 분들이 체험해볼 수 있도록 국내 최대의 메이커 축제 메이커 페어 서울과 함께 하게 되었습니다!
그동안 상상만 했던 아이디어가 있으신가요? 그렇다면 이번 Google HackFair 2016 은 여러분이 주인공이 되어 보세요! 나와 같은 열정을 가진 팀을 꾸리고, 아이디어를 현실로 만들어 많은 사람들에게 공유해 보세요! 저희가 여러분의 아이디어를 열렬히 응원하겠습니다!
Google HackFair 참가 신청
- 참가를 희망하는 분이나 팀은 8월 19일(금) 18시까지 참가 신청을 완료해주시기 바랍니다.
- 프로젝트 데모 영상을 9월 18일(일) 자정까지 제출하신 팀들 중 최종 참가 팀을 선정합니다. (데모 영상 접수 방법은 참가 신청을 해주신 팀에게 별도로 안내해 드릴 예정입니다.)
- 최종 참가팀 발표는 9월 20일(화) 에 진행될 예정입니다. (일정은 변경될 수 있습니다.)
Google HackFair 참가자 특전
- 최종 선정된 참가팀원 모두에게 구글에서 제작한 노트북 가방과 후드티, 티셔츠를 선물로 드립니다.
- 행사 기간 동안의 식사 일체 및 간식을 제공하며, 1일차 저녁에 진행되는 메이커 파티에도 참석하실 수 있습니다.
- 서울/경기도 이외의 지역에 계시는 분들께는 행사 기간 동안의 교통/숙박을 모두 지원해 드립니다.
- 최종 참가팀에 선정되지 않더라도 프로젝트 데모 영상을 제출해 주신 모든 분들께 소정의 기념품과 행사 초대권을 보내 드립니다.
프로젝트 선정시 우대 사항
- TensorFlow 를 활용하여 머신러닝 기술을 적용한 경우
- 생활에 실용적으로 사용할 수 있거나 재미있는 프로젝트인 경우
- 두 개 이상의 구글 기술을 프로젝트에 사용한 경우
- 프로젝트 홈페이지나 소셜 채널을 만들고 지속적으로 운영하는 경우(공식 해쉬태그: #ghackfair)
- 소스코드를 오픈소스로 공개한 경우
Google HackFair 유의 사항
- 10월 15일(토)과 16일(일) 행사 당일 최소 1명 이상의 팀원이 행사장에 상주해 계셔야 합니다.
- 팀당 인원 수는 최대 3명입니다.
- 개인이 아니라 회사나 단체의 프로젝트도 참가 가능합니다. 단, 등록 가능한 팀 인원 수는 3명으로 동일하게 제한합니다.
- 다른 공모전이나 대회에 참가했던 프로젝트도 참가 가능합니다.
- 프로젝트 결과물의 저작권/소유권 등 모든 관련 권리는 모두 프로젝트에 참가하신 분들에게 있습니다.
- 이 신청서는 추후 프로젝트 참가 신청팀에게 안내를 드리기 위한 용도로 사용되며, 제출하신 아이디어만으로 참가가 결정되지는 않으니 지금 가지고 계신 아이디어를 자유롭게 적어 주시기 바랍니다.
- 최종 참가팀은 9월 18일 (일) 자정까지 제출하신 프로젝트 데모 영상을 통해 결정되며 데모 영상 접수 방법은 별도로 안내해 드릴 예정입니다.
올 늦여름으로 예정된 안드로이드 7.0 누가 출시가 얼마 남지 않았습니다. 그리고 마침내, 개발자 프리뷰의 마지막 중요 이정표인 개발자 프리뷰 5가 공개되었습니다. 지난6월의 개발자 프리뷰에는 7.0을 위한 확정된 최종 API들이 포함되었습니다. 이번 버전에는 프리뷰를 지원하는 모든 기기들을 위해 최종버전과 매우 유사한 시스템 업데이트를 제공합니다. 개발자 여러분은 앱 사용자들을 위해 앱을 충분히 테스트해볼 수 있습니다.
개발자 프리뷰 5로 앱을 테스트한 후에는 Google Play에 업데이트된 버전을 올릴 수 있습니다. API 24을 타겟으로 혹은 선택적으로 API 24를 대상으로 컴파일한 다음 Google Play 개발자 콘솔에서 알파나 베타, 또는 프로덕션 채널에 앱을 올릴 수 있습니다. 생각치 못한 문제점이 발견될 수 있으니, Google Play의 베타 테스트 기능을 사용해서 개발자 프리뷰 사용자를 포함하는 소규모의 사용자 그룹으로부터 일찍 피드백을 받은 다음, 업데이트된 앱을 모든 사용자에게 릴리스하는 것을 추천합니다.
개발자 프리뷰 5를 설치하는 방법
이미 안드로이드 베타 프로그램에 등록하셨다면, 기기에 개발자 프리뷰 5 업데이트를 즉시 받을 수 있습니다. 아직 안드로이드 베타에 등록하지 않은 경우, android.com/beta를 방문하여 프리뷰를 지원하는 안드로이드 스마트폰이나 태블릿을 선택하여 등록할 수 있습니다. 그러면 곧 최신 프리뷰 업데이트를 무선으로 받을 수 있습니다. 언제나처럼, 업데이트를 다운로드한 후 수동으로 플래시할 수도 있습니다. 누가 개발자 프리뷰는 넥서스 6, 넥서스 5X, 넥서스 6P, 넥서스 9, 픽셀 C 기기는 물론이고, 안드로이드 원 기기에서도 사용할 수 있습니다.
디벨로퍼 어드보케 Firebase는열렬히React를 지지합니다. Firebase로 애플리케이션 상태를 동기화하고, React로 상태 변경을 바탕으로 애플리케이션 UI를 다시 그립니다. 아주 이상적인 조합이죠.
그리고 React Native를 사용하면서 JavaScript 개발자들의 앱 개발이 한결 더 쉬워졌습니다. React Native를 사용하면 JavaScript만으로 진정한 네이티브 앱을 빌드할 수 있습니다. 정말 대단하지 않나요? 우리는 미래에 살고 있습니다. 그럼 시작해봅시다.
설정
곧장 코드를 들여다보고 싶다면 최종 GitHub 리포지토리를 보세요. 그렇지 않은 분들을 위해 단계별로 살펴보도록 하겠습니다. React Native는 꽤나 쉽게 시작할 수 있지만, 반드시 알아두어야 할 점이 몇 가지 있습니다. React Native을 이미 설정했다면 이 섹션을 건너뛰어도 됩니다.
react-native init GroceryApp # or whatever you want
즐겨 쓰는 편집기에서 메인 폴더를 여세요.
atom GroceryApp # if you’re into Atom
빌드와 실행
React Native 프로젝트를 빌드하려면 다음 명령을 실행하세요.
react-native run-ios
그러면 시뮬레이터가 시작되고 상용구가 표시된 화면이 나타날 것입니다.
React Native에는 핫 리로딩이 기본으로 설정되어 있으므로, index.ios.js 코드를 편집한 다음 Cmd+R을 누르면 변경 사항이 즉시 업데이트되는 것을 확인할 수 있습니다. iOS 개발자든 다른 종류의 개발자든, 개발자라면 이것이 얼마나 근사한 기능인지 잘 알 것입니다.
빌드를 위한 준비가 끝났으면 Firebase를 시작해서 실행합니다.
Firebase 설정
React Native는 npm을 통해 종속성을 관리합니다. Firebase를 설치하려면 프로젝트의 루트에서 다음 명령을 실행하세요.
const란 무엇일까요?const는 값을 다시 할당 할 수 없는 읽기 전용 참조로서, Firebase의 값은 다시 재정의하지 않을 것이므로 const를 사용합니다. Node 4.0 이상을 사용 중이므로 이 키워드를 사용할 수 있습니다. 편집기에 이 점에 대해 무슨 내용이 표시되든, 그것은 거짓말입니다.
또한, 여기서는 React.createClass() 대신 클래스를 사용해 컴포넌트를 정의하겠습니다.
ES2015 (ES6) 컴포넌트
React는 컴포넌트를 기반으로 합니다. 즉, 앱은 루트 컴포넌트를 시작으로 여러개의 컴포넌트로 이루어진 트리 구조를 갖습니다. React 0.14부터 ES2015 클래스를 사용해서 React 컴포넌트를 정의할 수 있습니다.
index.ios.js에서 React.createClass() 대신 클래스를 사용하도록 컴포넌트를 변경하세요.
여기서 핵심은 각 컴포넌트가 상태를 저장하지 않는다는 것입니다. 각 컴포넌트 속성은 루트 구성 요소 GroceryApp에 의해 설정됩니다. React를 이해하려면 컴포넌트 state를 올바르게 관리할 수 있어야 합니다.
State
State란 간단히 말하자면 변경할 수 있는 데이터입니다. 이 데이터가 애플리케이션의 "상태"를 대변하기 때문에 state라고 부릅니다. 이 데이터가 변경되면 애플리케이션이 다르게 보일 수 있고, 따라서 다른 "상태"에 놓이게 됩니다. State는 대개 해야 할 일 목록이나 활성화/비활성화된 버튼과 같은 것들입니다.
루트 컴포넌트가 state의 소유자 역할을 하게 됩니다. State 변경은 루트 컴포넌트에서 시작되는데, 이 루트 컴포넌트가 그 하위 컴포넌트 속성의 업데이트를 책임집니다.
컴포넌트 속성은 불변으로, 수정할 수 없습니다. 속성을 수정할 수 없다면, 도대체 속성은 어떻게 변경되는 걸까요?componentDidMount()에서 본 것처럼, setState()를 호출하여 애플리케이션을 다시 렌더링하면 됩니다.
setState()는 호출될 때마다 앱 전체를 다시 렌더링하려고 하기 때문에 특수한 함수입니다. 이는 만일 하위 속성이 마지막 state와 다를 경우 새 값으로 다시 렌더링된다는 뜻입니다.
이것이 React가 완벽하게 Firebase에 들어맞는 부분입니다. Firebase 데이터베이스는 다수의 기기에 걸쳐 애플리케이션 상태를 동기화하고, React는 애플리케이션 상태 변경을 효율적으로 다시 렌더링하기 때문입니다.
실시간 데이터베이스 리스너
생성자에서 속성으로서 실시간 데이터베이스 참조를 만듭니다.
this.itemsRef = firebaseApp.database().ref();
GroceryApp 구성 요소에 다음 함수를 추가합니다.
listenForItems(itemsRef) {
itemsRef.on('value', (snap) => {
// get children as an array
var items = [];
snap.forEach((child) => {
items.push({
title: child.val().title,
_key: child.key
});
});
this.setState({
dataSource: this.state.dataSource.cloneWithRows(items)
});
});
}
모든 식료품 품목의 값의 변경을 확인할 수 있는 리스너를 만듭니다. 품목이 추가되거나 변경되거나 제거될 때마다 Firebase SDK로부터 DataSnapshot으로 전체 결과 집합을 다시 받게 됩니다. DataSnapshot을 사용해서 모든 하위 구성 요소들을 반복헤서 배열에 식료품 목록 항목으로 추가하는 forEach(child)를 호출합니다. 이 .forEach 함수에서 _key 속성이 DataSnapshot의 .key() 값으로부터 생성된다는 점에 유의하세요. 이것은 나중에 데이터 작업을 한결 용이하게 할 수 있도록 해줍니다.
배열이 채워지면 dataSource.cloneWithRows(items)를 사용해 state에 대한 dataSource 속성을 업데이트합니다. cloneWithRows() 함수는 앞서 정의한 것과 같은 DataSource를 바탕으로 새 ListView.DataSource를 만들기 위한 편리한 메서드일 뿐입니다.
이 AlertIOS API는 사용자에게 표시되는 경고 메시지를 만들 때 사용하기 좋습니다. 처음 두 개의 매개변수는 간단히 경고 상자의 제목과 선택적 메시지일 뿐입니다. 세 번재 매개변수가 이 API에서 가장 중요한 부분입니다. 여기서 사용자들이 이용할 수 있는 버튼을 지정하는 배열을 만듭니다. 각 버튼마다 text, style, onPress 콜백 함수가 있을 수 있습니다. 마지막 매개변수는 입력 유형을 나타내는 것으로, plain-text 또는 secure-text입니다.
항목을 추가하려면 버튼 배열에서 객체를 새로 만듭니다. 이 객체는 onPress 콜백에 항목을 추가할 수 있습니다. 이 콜백은 사용자가 입력한 텍스트를 반환합니다. 이 텍스트를 사용하여 새 하위 항목을 /items 위치로 .push()합니다.
다음으로, ActionButton의 onPress 속성을 할당하기 위해 render()를 업데이트해야 합니다.
<ActionButton title="Add" >
</ActionButton>
코드를 빌드한 후 실행합니다. 추가를 탭하고 항목 제목을 입력하면 목록에서 업데이트되는 것을 볼 수 있을 것입니다.
훌륭하긴 하지만, 항목을 완성할 수 없는 식료품 목록이라면 무슨 소용일까요?
항목 완성
사용자는 항목을 탭해서 경고 상자를 열어 항목을 완성할 수 있습니다. "Complete" 옵션을 누르면 목록에서 해당 항목을 삭제할 수 있습니다.
다음과 같이 _renderItem(item)을 수정하여 onPress 콜백이 포함되도록 하세요.
항목을 "완성"하려면 Firebase 데이터베이스에서 해당 항목을 삭제해야 합니다. .child(key)를 사용하면 목록에서 특정 항목을 드릴다운할 수 있습니다. onPress 콜백은 클로저이므로 item 매개변수가 포함된 외부 환경에 접근할 수 있습니다. 이것이 바로 _key 속성이 유용하게 쓰이는 부분입니다.
"Complete" 옵션을 탭하면 item에 _key 속성을 사용해 특정 하위 항목을 찾을 수 있습니다. 그러면 .remove()를 호출하여 Firebase 데이터베이스에서 그 항목을 삭제할 수 있습니다.
다시 한 번 빌드해서 실행하세요. 아무 ListItem이나 탭하고 "Complete"를 탭하면 그 항목이 목록에서 제거되어 있을 것입니다.
코드를 받고 별점을 주세요
Github에서 완성된 앱을 확인해 보세요. 그리고 너그러운 마음으로 높은 별점을 주시면 고맙겠습니다. 주저하지 마시고 이 리포지토리를 복사해서 마음껏 실험해보세요. 원하시면 PR로 보내주셔도 됩니다.
아직도 뭔가 잘 안풀리나요?
문제가 발생하면 기탄없이 Stackoverflow에서 질문하세요. 저희는 Firebase 태그를 면밀히 모니터링합니다. 아니면 저희 커뮤니티 Slack Team에 간단히 질문을 남겨주셔도 됩니다.
소프트웨어 엔지니어 여러분의 지속적인 피드백에 힘입어 이제 Firebase JavaScript SDK가 버전 3.1.0으로 업데이트 되었습니다. 이제 React Native를 잘 지원합니다. 그리고 그게 전부가 아닙니다. 새로운 버전에는 인증 없이 Node.js SDK에 접근할 수 있는 기능도 포함되는데, 덕분에, 서비스 계정이 없어도 앱을 초기화할 수 있습니다. 이 모든 것들이 무엇을 의미할까요? 자세히 살펴보도록 하죠.
React Native 지원
Google I/O에서 Firebase 3.x SDK가 릴리스되었을 때, 이 SDK의 인증 부분이 더 이상 React Native와 호환되지 않았습니다. 3.1.0 릴리스는 브라우저별 API의 사용법을 바꾸어 Firebase가 다시 한 번 React Native와 함께 작동할 수 있게 해줍니다. 그 외에도 이 릴리스에서는 앱이 다시 시작되면서 인증 상태가 계속 지속되는 문제를 비롯해, React Native에서 Firebase 사용할 때 발생하는 고질적인 문제점이 수정되었습니다. 따라서 Firebase 프로젝트를 다른 모든 JavaScript 앱에서처럼 초기화 하면 됩니다.
3.1.0 SDK에서 업데이트가 이루어지면서, 이제 거의 모든 JavaScript SDK의 기능이 React Native에서도 원활하게 작동합니다. 그러나 여기에는 두 가지 주의할 점이 있습니다.
signInWithPopup(), signInWithRedirect(), linkWithPopup(), linkWithRedirect() 등의 "숱한" 인증 방법이 React Native(또는 Cordova)에서는 동작하지 않습니다. 그래도 여전히 signInWithCredential()을 여러분이 선택한 프로바이더의 OAuth 토큰과 함께 사용하여 로그인하거나 페더레이션 프로바이더와 연결할 수 있습니다.
React Native는 File 및 Blob 유형을 지원하지 않으므로, 이 환경에서는 Firebase 저장소 업로드가 되지 않을 것입니다. 하지만 파일 다운로드는 작동됩니다.
인증 없이 접근
3.1.0 릴리스의 또 한 가지 특징은 인증 없이 Node.js SDK에 접근할 수 있다는 것입니다. 이전에는 Node.js SDK를 사용하려면 서비스 계정이 있어야 했습니다. 따라서 Firebase 콘솔에서 서비스 계정 키를 만들어 서버에 다운로드하고, 코드에서 그 파일을 참조하여 인증해야 했습니다. 토큰을 만들고 확인하는 데는 여전히 서비스 계정이 필요하지만, 모든 Node.js 사용 사례에 필수적인 것은 아닙니다. 최신 SDK의 사용으로 이 요건을 완화했으므로, 이제 데이터베이스 URL만으로 앱을 초기화할 수 있게 되었습니다.
import firebase from "firebase";
firebase.initializeApp({
databaseURL: "<YOUR-DATABASE-URL>",
});
서비스 계정이 없이는 다른 인증되지 않은 클라이언트와 마찬가지로 실시간 데이터베이스에 대한 접근이 제한됩니다.
여러분의 의견을 들려주십시오
그 동안 기다려 주시고 저희 Slack 팀에서, Google Group에서, 그리고 그 밖의 지원 채널을 통해 의견을 들려주신 모든 분들께 감사드립니다. 새 SDK에서 어떤 문제에 부딪치는 경우에는, 저희에게 연락해주세요. React Native와 Firebase가 정말 기대되나요? 아래에 코멘트를 남겨주세요.