구글에서는 Firebase에서 제공하는 다양한 기능을 문서예제로 제공하고 있다.

제공되는 예제를 이해 하면서 Firebase 사용법 뿐만 아니라 Android 개발에 유용한 방법 등을 익힐 수 있다.

여기에서는 Firebase 예제 중에서 realtime database 예제를 쉽게 이해 할 수 있도록 정리하였다.

Firebase realtime database 예제는 데이터 입출력(CRUD) 예제로 일종의 게시판 예제로,

보다 쉽게 이해하기 위해 다음과 같이 3단계로 나누어 정리하였다.


1. Firebase realtime database 실행과 테스트

2. Firebase realtime database 구조와 프로그램 구조

3. Firebase realtime database 코드

4. Firebase realtime database를 Cloud Firestore로


Firebase 실시간 데이터베이스의 기본 개념이나 사용법에 대해서는 따로 정리하지 않는다.

관련된 상세한 설명은 구글의 문서Node.js로 정리한 내용을 참고하면 된다.


먼저, 구글에서 제공하는 예제 소스를 GitHub에서 다운로드 받는다.

CMD 창에서 clone https://github.com/firebase/quickstart-android.git 로 받아도 되고

그림과 같이 Git GUI 도구를 이용해도 된다.

Android studio에서 받아도 되지만,

Android studio로 받는 경우 여러가지 설정과 라이브러리 다운로드 등이 자동으로 진행되면서 시간도 오래 걸리고 제대로 작동하지 않다.


다운받은 예제는 다음 그림과 같이 하나의 예제가 아니고 여러 개의 예제로 구성되어 있다.

각 폴더를 클릭해 보면, 각각의 폴더에 Android 프로젝트에 필요한 파일(gradle등)이 있는 것을 볼 수 있다.

각 폴더가 하나의 예제이다.


이 예제 중에서 database가 실시간 데이터베이스(Realtime database) 예제이므로,

Android studio에서 database 폴더을 연다.



예제를 열면 다음 그림의 하단과 같이 오류가 발생하는 것을 볼 수 있다.

이 오류는 Firebase와 연동하지 못해서 발생하는 오류 (google-services.json 파일이 없음)이다.


상세한 설정 방법은 Firebase 메신저 예제 설정의 중간 내용을 참고 하면 된다.

Firebase를 처음 사용하는 경우에는 Firebse 서버에서 설정이 필요한데,

이 문서의 내용 인증과 실시간 데이터 베이스 관련 설정을 참고하면 된다.


간단하게 정리하면 Tools > Firebase 메뉴를 눌러서 연동한다.


Firebase와 연동후 실행하면 다음 그림과 같이 로그인 화면이 실행된다.

가입된 회원이 없기 때문에 아이디와 비번을 입력한 후에 회원 가입(Sign Up) 버튼을 선택한다.


회원 가입과 동시에 로그인 되고, 다음 그림과 같이 글 리스트 화면이 실행된다.

최신글 (Recent), 내가 작성한 글(My Posts),  내가 작성한 인기 글(My Top Posts)이 TabLayout으로 개발되어 있다.


하단의 플로팅 버튼을 눌러서 다음 그림과 같이 새글을 작성한다.

제목과 게시글 내용을 작성한 뒤에 하단의 플로팅 버튼을 눌러서 저장한다.

글이 저장된 후, 화면이 최신글 리스트로 이동한다.


작성된 글 리스트에서 글 하나를 선택하면,

선택된 글의 상세 내용을 볼 수 있고, 댓글(comment)을 작성할 수 있다.


이상으로 Firebase 실시간 데이터베이스(Realtime database) 예제를 실행시켜 보았다.

제법 많은 기능이 있는 것 같지만 다음과 같이 간단한 게시판 구조로 구현되어 있다.

Fireabse 콘솔로 접근해 보면

사용자(users), 사용자별 글(user-posts), 작성된 글(posts)이 생성되어 데이터가 저장된 것을 볼 수 있다.

사용자별 작성 글(user-posts)과 전체 작성 글(posts)은 동일한 구조와 데이터를 가진다.

사용자별 작성 글(user-posts)은 한 사용자가 작성한 모든 글을 저장하는 스키마이고,

전체 작성 글(posts)은 사용자에 관계없이, 사이트내의 모든 글을 저장하는 스키마이다.

사용자가 하나의 글을 작성하면 사용자별 작성 글(user-posts)과 전체 작성 글(posts)에 저장하고,

사용자별 글(user-posts)은 사용자가 작성한 글이기 때문에 사용자 UID 별로 작성된 글(posts)을 저장한다.

(사용자 UID는 사용자 고유 번호를 의미한다.)

Firebase 실시간 데이터 베이스는 검색 기능이 거의 없기 때문에 이러한 방식으로 데이터를 저장한다.


Android Studio에서 파일을 살펴보면, Espresso 기반의 UI 테스트 파일을 볼 수 있다.


newPostTest 파일을 선택하고, 마우스 오른쪽 버튼을 클릭해서 Run newPostTest을 실행한다.

그림처럼 테스트에 실패하는 경우도 있고, 별 문제없이 테스트가 진행되는 경우도 있다.

위 그림과 같이 실패한 경우에는, 메시지 창(run)에서 오류가 발생한 [newPostTest: 78]을 클릭해서 오류가 발생한 부분으로 이동한다.


해당 코드의 앞에 다음과 같이 2초 정도 후에(Thread.sleep(2000)) 코드가 실행되도록 작성한다.

사용하는 컴퓨터의 사양이 느리면 UI 실행이 느려서 오류가 발생한다.

따라서 2초 정도 지연 시간을 준 것이다.

다시 테스트를 진행하면, 자동으로 랜덤하게 사용자가 생성되고 글이 작성되는 것을 볼 수 있다.


Espresso의 사용법은 쉬우니, 이 동영상을 참고하거나 자료를 찾아보면 된다.

간단하게 정리하면,

Run > Record Espresso Test 메뉴를 실행하고,

해당 앱에서 여러가지 실행을 하면 자동으로 기록해서 테스트 코드(newPostTest)가 작성된다.


테스트 후에 정상적으로 실행하려고 해도 테스트로 실행된다.

Android Studio 우측 상단에 있는 실행 버튼 옆의 선택 상자에서 app을 선택하고 실행하면 제대로 실행이 된다.


이상으로 Firebase 예제 중에서 realtime database 예제를 실행하는 방법을 정리하였다.

다음으로, 예제의 database 구조와 프로그램 구조, 코드 특성 등을 정리한다.

보안(Rule)등과 관련된 내용은 여기에서 정리하지 않으니 Git 예제 설명이나 Firebase 문서를 참고하면 된다.









+ Recent posts