Getting Started with the Firebase Realtime Database on Android – Firecasts

안녕하세요? 파이어베이스팀의 데이비드입니다 파이어베이스의 새로운 시즌에 오신 것을 환영합니다 완전히 새로운 파이어베이스를 보실 겁니다 오늘 에피소드에서는 안드로이드에서 실시간 데이터베이스를 설정하는 방법을 알아볼 것입니다 이것이 정말로 쉽기 때문에 실제 앱을 만들면서 실시간 데이터베이스의 기본적인 부분들을 다뤄볼 것입니다 몇 분만에 이걸 사용하는데 필요한 기본적인 모든 부분들을 알게 되실 겁니다 그럼 시작해보겠습니다 그래들 파일을 엽니다 먼저, 구글 플레이 서비스를 포함시켜야 합니다 종속성에는 구글 플레이 서비스 30의 클래스 경로를 설정합니다 그리고 app build

gradle 파일을 엽니다 종속성 섹션에 파이어베이스 코어와 실시간 데이터베이스 종속성을 입력합니다 이는 comgooglefirebase 그리고 firebase-database와 firebase-core입니다 마지막으로 구글 플레이 서비스에 플러그인을 적용합니다 이제 됐습니다 이렇게 간단합니다 이제 다 준비되었으니 앱을 만들겠습니다 제가 만들 앱은 소셜, 로컬 그리고 모바일, 크라우드 소스 날씨 앱으로, 샌프란시스코의 날씨가 화창한지 안개가 있는지 알려줄 것입니다 매우 단순한 앱이지만 실시간으로 데이터를 저장하고 동기화하는 기본적인 부분을 다룹니다 그러니 어떻게 작동되는지 보여드리겠습니다 다 준비가 되었으니 UI를 만들어 보겠습니다 메인 액티비티 레이아웃을 엽니다 저장된 텍스트뷰를 지우고 큰 텍스트뷰를 스크린에 추가합니다 텍스트는 상태라고 설정하고 아이디는 텍스트뷰상태라고 입력합니다 그리고 화창한 날씨와 안개 낀 날씨 버튼을 추가합니다 하단에 버튼을 추가합니다 텍스트를 화창한 날씨로 입력하고 아이디를 화창한 날씨 버튼이라고 입력합니다 다른 버튼을 드래그해서 텍스트는 안개 낀 날씨로 아이디는 안개 낀 버튼으로 입력합니다 좋습니다 UI는 완성되었습니다 이러한 요소들을 메인 액티비티에 연결해야 합니다 메인 액티비티를 열어서 요소들을 속성으로 추가합니다 그리고 파인드뷰 바이 아이디를 사용하여 onCreate에 연결합니다 이제 실시간 데이터베이스에 작업을 하겠습니다 먼저, 연결이 되어야 합니다 이를 위해서, 데이터베이스 참조를 생성합니다 속성으로 데이터베이스 참조를 m루트 참조에 입력합니다 이것은 Firebasedatabase getinstance()getreference()입니다 루트Ref라고 이름을 붙인 이유는 참조를 가지게 될 때 참조를 파이어베이스 제이슨 트리의 루트로 얻기 때문입니다 그 다음으로 실시간 변경을 알리도록 하겠습니다 데이터베이스의 상태가 바뀌면 텍스트뷰의 텍스트 속성이 업데이트 되도록 하는 겁니다 이러한 변경을 알 수 있도록 온스타트 라이프 사이클 메소드에 벨류 리스너를 생성합니다 온스타트를 생성합니다 온스타트에서 다시 차일드 참조를 생성합니다 이것을 상태 참조라고 하겠습니다 이것은 루트 참조와 동등한 것으로

차일드를 호출하고 문자열 상태를 입력합니다 루트에 차일드를 호출하여 루트 아래에서 상태의 위치를 생성합니다 그리고 값을 설정합니다 화창한 날씨 또는 안개 낀 날씨 둘 중의 하나입니다 이걸 여기에서 복사하고 루트 ref 아래에 붙여놓습니다 그리고 mConditionRef라고 입력합니다 이제 상태 위치에 접근할 수 있으므로 리스너를 생성하겠습니다 온스타트가 있으므로 에드 밸류 이벤트 리스너 메소드를 호출하겠습니다 에드 밸류 이벤트 리스너를 mConditionRef에서 호출한 것을 기억하시길 바랍니다 이걸 상태의 위치에 붙이는 것입니다 이 안에 새로운 에드 밸류 이벤트 리스너를 입력합니다 이것은 익명의 이너 클래스 내부에 있는 두 개의 메소드입니다 첫 번째는 온데이터체인지입니다 이것은 실시간 데이터베이스에서 상태 값이 바뀌는 순간마다 작동됩니다 온캔슬드는 에러가 날 때 작동됩니다 온데이터체인지 안에서 데이터 스냅샷으로 데이터를 다시 받습니다 이 속에는 데이터와 다른 유용한 메소드가 있습니다 이 스냅샷을 이용하여 텍스트 뷰에 동기화하겠습니다 먼저, 데이터를 문자열로 다시 받겠습니다 dataSnapshotgetValue 를 호출합니다 문자열로 만들기 위해 Stringclass를 입력합니다 이게 문자열인지 확인되었으니 텍스트뷰로 가서 텍스트에 입력하여 설정 텍스트를 호출합니다 여기에는 앱이 작동되고 있습니다 그리고 여기에는 실시간 데이터베이스 뷰어가 있습니다 아직은 데이터가 없습니다 상태 위치를 추가하겠습니다 플러스를 클릭하고, 상태라고 입력합니다 초기값을 느낌표가 있는 화창한 날씨로 설정합니다 아무 변화가 없네요 왜 그럴까요? 보안 룰은 기본적으로 인증된 사용자만 데이터에 접근 가능하기 때문입니다 규칙 탭을 누르고 이러한 룰이 있는 걸 볼 수 있습니다 읽기와 쓰기가 있습니다 둘 다 널에 동등하지 않은 오프 값을 가지고 있습니다 오직 인증된 사용자만이 데이터베이스에서 읽고 쓸 수 있다고 적혀있습니다 지금은 개발하는 단계이므로 이러한 규칙으로 막을 필요가 없습니다 전체에 대해 읽기 쓰기를 가능하게 합니다 하지만, 배포할 앱을 만들 때는 누구나 다 사용할 수 있으므로 이렇게 하지 마시길 바랍니다 이게 좋은 게 아니라는 건 아실 겁니다 읽기에는 참으로 입력하고 쓰기도 참으로 입력한 다음에 변경사항을 적용하여 배포합니다 다시 데이터 탭으로 가서 앱을 재시동하겠습니다 보시다시피 화창한 날씨의 값이 있습니다 이를 확인하기 위해 값을 바꿔 보겠습니다 느낌표를 지워보겠습니다 그리고, 짜잔 실시간으로 업데이트 됩니다 잘 작동됩니다 하지만 버튼을 클릭했을 때 상태는 바뀌지 않으므로 텍스트뷰를 업데이트 해야 합니다 수정해보겠습니다 안드로이드 스튜디오에서 이 두 버튼에 클릭 리스너를 설정해야 합니다 mButtonSunny

setOnclicListener 를 입력하고 onClickLister를 넣습니다 클릭 리스너 내부에서는 mConditionRefsetValue를 호출합니다 여기서 상태 Ref는 이것을 /condition 위치로 연결합니다 이 지점에서 설정값을 호출하면 현재 있는 것을 대체합니다 이 경우는 화창한 날씨입니다 화창한 날씨 버튼을 누를 때마다 값은 화창한 날씨가 되도록 할 것입니다 화창한 날씨 문자열을 입력합니다 안개 낀 날씨의 경우에도 똑같이 복사합니다 이 절차를 이해하는 것은 매우 중요합니다 두 개의 클릭 리스너에서 설정값을 호출합니다 텍스트뷰를 직접적으로 업데이트하는 것도 아니고 내부의 데이터 소스를 직접적으로 업데이트하는 것도 아니며 실시간 데이터베이스를 업데이트하는 겁니다 실시간 데이터베이스가 업데이트 되면 onDataChange 메소드가 작동하여 텍스트뷰를 업데이트합니다 여기서 알 수 있는 사실은 로컬 상태를 변경하지 않는 것입니다 모든 것은 실시간 리스너에서 나옵니다 버튼을 누르면 실시간으로 데이터베이스가 업데이트되고 텍스트뷰가 바뀝니다 됐습니다 불과 몇 분만에 실시간 데이터베이스를 배웠습니다 오늘은 여기까지입니다 질문은 댓글로 남겨 주시고 트위터나 G+에서는 #AskFirebase 로 만납시다 며칠에 하나씩 파이어캐스트 영상을 올릴 예정입니다 그러니 구독 버튼 눌러 주시길 바랍니다 데이비드 이스트입니다 시청해 주셔서 감사합니다

Database client behavior on Android and open sourcing your app with Doug Stevenson – #AskFirebase

반짝이는 불빛을 응시하면 그게 메인 카메라입니다 Ask Firebase 테이크 원 여러분 안녕하세요 #AskFirebase에 오신 것을 환영합니다 저희 아직도 해시태그 쓰나요? 좋습니다 더그 스티븐슨 입니다 Firebase팀의 개발 대변인이죠 에피소드에 앞서 곧 열릴 이벤트를 간단히 소개해 드릴게요 Firebase 회담이 베를린에서 11월 7일 열립니다 모든 행사 대담은 Youtube로 올릴 예정이니 기대하세요 여기서 보시고 싶다면 필히 구독 버튼을 눌러주세요 이제 질문 좀 답해볼까요? 몸 좀 풀게요 네, 방금 들어온 질문 Youtube에서 비니스 님이 물어보셨네요 안드로이드에서 디버그 애널리틱스와 릴리즈 애널리틱스를 구분하는 방법이 있나요? 이 부분은 애널리틱스 뿐 아니라 오류 보고에 대한 내용이기도 하니 좋은 질문이네요 디버그에서 오류보고와 애널리틱스 자료가 뒤섞이는 일이 있으면 안 되겠죠 따로 관리하고 싶을 겁니다 가장 쉬운 방법은 하나의 프로젝트에 두 개의 다른 앱을 세팅하는 거죠 하나는 디버그를 위해, 그리고 제작을 위해 두 개의 앱 ID로 두 개의 앱을 만드실 수 있어요 그러면 안드로이드 빌드에서 두 개의 빌드로 나눌 수 있습니다 2개의 애플리케이션 ID로 하나는 디버그, 다른 건 릴리즈 일은 디버그 버전에서만 하시고 릴리즈 버전만 퍼블리싱 하면 됩니다 더 자세한 사항은 제가 최근에 작성한 블로그 포스팅이 있으니 블로그를 방문해주세요 여기 링크 남겨요 거기서 보실 수 있을 겁니다 하나의 프로젝트에서 두 개의 앱을 만들든 두 개의 다른 프로젝트를 만들든 블로그를 읽어보시면 뭐가 좋을지 알 수 있어요 좋은 질문이었어요 감사합니다 자, 다음 질문 받아볼까요? 다음은 Youtube의 아징캬 님이 보내주셨어요 두 개의 안드로이드 앱에서 하나의 데이터베이스를 공유할 수 있나요? 좋은 질문입니다 하나의 안드로이드 앱안에서 다른 두 개의 프로젝트 데이터베이스에 접근할 필요가 있죠 그러기 위해선 추가로 짜넣어야 하는 코드가 있어요 보통 프로젝트 설정할 때 추가 코딩을 하진 않죠 그건 안드로이드 플러그인에서 이뤄지니까요 하나의 앱 안에서 두 개의 프로젝트를 사용하신다면 Firebase옵션 오브젝트를 생성하셔야 합니다 그 옵션 오브젝트는 API키나 애플리케이션 ID같은 몇 가지 설정을 필요로 해요 이런 값이 주어졌다면 Firebase옵션 오브젝트를 만들어서 FirebaseApp에 넣습니다 그러면 새로운 버전이 구성돼서 다른 프로젝트의 데이터베이스에 접근할 수 있게 됩니다 실제 코딩을 보고 싶으시다면 Stack overflow 포스팅을 작성했으니 한 번 보세요 그 포스팅은 여기 하단의 링크를 방문하시면 됩니다 금방 하나의 앱에서 두 개의 데이터베이스를 갖도록 설정하실 겁니다 감사합니다, 아징캬님 훌륭한 질문이었어요 다음 질문이 들어왔네요 Youtube에서 텔모님께서 물어봐 주셨네요 안드로이드 앱이 종료되면 이벤트에 어떤 일이 생기나요? 안드로이드 앱은 백그라운드로 넘어가도 종료되는 것이 아니기 때문에 흥미로운 질문이네요 백그라운드로 가게 돼도 계속 실행되다가 시간이 지나서야 종료됩니다 그러니 안드로이드에서 데이터베이스 수신자가 등록되어있다면 백그라운드에 가도 수신자들은 그대로 등록된 상태로 남아 있게 됩니다 데이터베이스 이벤트가 발생하면 반응합니다 하지만 안드로이드 단에서 메모리 복구를 이유로 앱이 종료되면 이벤트는 전해지지 않게 되죠 수신자도 바로 끊깁니다 과정 자체가 종료돼서 재수신할 수 없어요 하지만 다음에 앱을 실행하면 다시 등록할 수 있습니다 다시 이벤트를 보내게 되죠 개발하실 때, 백그라운드로 가도 수신자가 종료되지 않는 점을 알아두세요 안드로이드가 앱을 종료시키면 없어진다는 것도요 훌륭합니다 감사합니다 다음 질문 다음 질문이라고 할 때 이렇게 해도 되나요? 다음 질문은 Youtube에서 다리안토 님이 주셨어요 안드로이드에서의 Firebase 저장소에 대한 스크린캐스트가 있나요? 네, 훌륭한 질문인 게, 제가 방금 녹화하고 왔어요 있습니다 여기 Youtube Firebase 채널에서 보실 수 있습니다 아래 링크를 따라가 주세요 그 영상에서 저는 어떻게 이미지를 업로드하고 어떻게 Firebase 저장소서 이미지를 가져오는지 설명하죠 괜찮습니다 가셔서 보세요 좋습니다 다음 질문으로 넘어갈게요 콘스탄틴님께서 문의하셨어요 안드로이드서 수신자 없이 쿼리를 돌릴 수 있나요? Firebase DB는 안드로이드에서 수신자를 통해서 모든 일을 수행합니다 수신하는 모든 것, 데이터들은 전부 수신자를 통하죠 그러니 그것없이 쿼리를 돌려봤자 돌아오는 반응이 없겠죠 그렇게 되진 않습니다 모두 수신자를 통하셔야 합니다 만일 한 번의 결과만 보자고 쿼리를 돌리신다면 AddListener SingleEvent 으로 반복하지 않고 한 번만의 수신으로 결과를 보실 수있습니다 좀 길죠? 그건 수신자로하여금 한 번만 수신하게 만들어서 등록하고 삭제하는 과정을 알아서 합니다 약간의 꼼수지만 제법 유용합니다 좋은 질문이네요 감사합니다 자, 다음 질문을 한 번 볼게요 퀴오라님께서 보내셨네요 Firebase에서 Git 저장소를 호스팅되나요? Firebase 프로젝트에서 코드 호스팅이 중요 기능은 아니지만, 가능합니다 Firebase 프로젝트는 기본적으로 Google 클라우드 프로젝트입니다 Google 클라우드 프로젝트에서 가능하다면 Firebase 프로젝트에서 가능하죠 Google 클라우드 프로젝트에는 클라우드 저장소라는 기능이 있어요 클라우드 저장소에서는 프로젝트에서 Git를 통해 코드를 호스팅할 수 있습니다 그러니 Firebase 프로젝트에서도 클라우드 저장소를 기능으로 사용해서 호스팅을 할 수 있죠 가서 확인해보세요 꽤 유용합니다 질문 감사드려요 아, 질문이 들어왔네요 같은 분께서 이어서 질문을 주셨어요 Firebase 안드로이드 프로젝트 소스를 오픈해도 되나요? 물론이죠 당연히 하셔도 됩니다 하지만 꼭 알아두셔야 하는 것은 콘솔에서 다운받으신 JSON 파일은 소스 제어에 넣지 말고 git무시 항목에 넣어두셔야 한다는 것입니다 소스 제어에서 특정 파일을 제외하기 위함이죠 그러셔야 하는 이유는 거기에는 프로젝트에 대한 중요한 정보들이 있어서 공유하는 것이 바람직하지 않아서죠 누군가 소스를 퍼갈 경우 자신들만의 Google 서비스 JSON파일을 콘솔에서 가져와야 합니다 readme 문서에 적어두셔서 사람들에게 미리 공지해두세요 어떤 소스를 오픈하실지 벌써 기대되네요 감사합니다 오늘도 여러분들의 다양한 질문들을 받아봤네요 다른 문의사항이 있다면 #AskFirebase 해시태그를 사용하셔서 SNS에서 물어봐 주세요 베를린에서 Firebase 회담하는 것도 잊지 마시고요 저도 갑니다 거기서 뵈었으면 좋겠네요 못rk신다면 여기 채널에도 관련 영상들이 올라갈 예정이니 기다려주세요 오늘도 함께해주셔서 감사합니다 Ask Firebase에 다시 오셔서 감사합니다 오늘 집중적으로 알아보실 몸을 풀자, 예! 해시태그!