Android : Firebase - Realtime DB

이번에 Firebase가 필요한 상황이 생기면서 기본적인 기능을 구현해보았다.

작업은 크게 3가지로 나뉜다.

1. Firebase 에 새 프로젝트 추가하고 안드로이드 앱 등록하기

2. 안드로이드에서 Firebase와 연동하기

3. 안드로이드에서 코드로 Firebase에 접근하여 SQL 조회, 수정 등 수행하기

  1. Firebase 홈페이지에서 새 프로젝트 추가

  1. 프로젝트 이름 입력

  1. 구글에서 제공하는 앱 사용 데이터 분석 플랫폼인 Google 애널리틱스인데 필요하면 사용하면 좋겠다.

  1. 여기까지 프로젝트 추가를 해주고 프로젝트 안으로 가서 Realtime Database 클릭

  1. 다음 다음을 눌러서 데이터 베이스를 만들어준다.
    • 자신 어플리케이션 패키지 주소를 정확히 입력해준다.
    • 나머지는 안 해도 된다.

  1. 그러면 구성 파일로 google-services.json 파일을 주는데 안드로이드 스튜디오에서 Project로 보기한 후 app 폴더 안에 넣어준다.
    • 여기까지 외부 작업은 끝났다.

  1. build.gradle 에 다음 코드를 추가한다.
// build.gradle(Project)
dependencies {
	...
	classpath 'com.google.gms:google-services:4.3.10'
}

// build.gradle(Module)
plugin{
	...
	id 'com.google.gms.google-services'
}

dependencies {
		...
		// firebase
    implementation platform('com.google.firebase:firebase-bom:29.0.0')
    implementation 'com.google.firebase:firebase-database-ktx'
}
  1. 안드로이드 Tools에서 Firebase 를 연동해준다. 가끔 연결 안 될 때가 있는데
    • 플러그인에 id 'com.google.gms.google-services' 를 주석 처리하고 sync now
    • 주석을 풀고 sync now 하면 connect가 된다.
    • 다른 경우도 있으니 검색하면 잘 나와 있다.

  1. 여기까지 안드로이드에서 Firebase 연동도 완료되었다. 이제 코드로 데이터베이스에 접근한다.
  • 간단하게 구현하고자 object로 구현하고 필요할 때 불러서 사용하도록 했다.
object FirebaseDB{
	// Firebase DB 객체 생성
	// 이렇게 하면 mDatabase는 Firebase의 내 프로젝트를 가르키게 된다.
	private var mDatabase: DatabaseReference = FirebaseDatabase.getInstance().reference

	fun write(){
		mDatabase.child(하위 객체).setValue(넣을 값)
      .addOnSuccessListener {
				// 저장 성공 시 
      }
      .addOnFailureListener { e ->
				// 저장 실패 시
      }
	}

/**
   * addValueEventListener 경로의 전체 내용에 대한 변경 사항을 읽고 수신 대기한다. - 값이 바뀔 때 마다 onDataChange 호출
   *
   * addListenerForSingleValueEvent : 한 번 호출된 후 다시 호출 되지 않는다. - 1회성
   * 한 번만 호출되고 즉시 삭제되는 콜백이 필요한 경우에 사용한다.
   * 한 번 로드된 후 자주 변경되지 않거나 능동적으로 수신 대기할 필요가 없는 데이터에 유용하다.
   *
   * addChildEventListener : 데이터베이스의 특정한 노드에 대한 변경을 수신 대기하는데 유용하다.
   * 목록을 다루는 앱은 단일 개체에 사용되는 값 이벤트보다는 하위 이벤트를 수신 대기해야한다.
   * 하위 하목에 push() 메소드를 통해 새로 추가되거나 updateChildren() 메소드를 통해 업데이트 되는 경우가 그 예이다.
   *
   * DB 읽기 동작의 오버헤드를 줄이고 성능을 높이기 위해서 용도에 맞게 구현해야한다.
   */
	fun read(){
		mDatabase.addValueEventListener(object : ValueEventListener {
      override fun onDataChange(snapshot: DataSnapshot) {
        // snapshot.children 을 통해 내부 데이터를 확인할 수 있다. 
				// addValueEventListener 을 사용하였기에 데이터가 변경될 때 마다 이곳이 호출된다.
      }

      override fun onCancelled(error: DatabaseError) {
				// onCandelled 시 콜백
      }
    })
	}
}

Firebase Database 데이터 읽기, 3가지 방법

좋은 웹페이지 즐겨찾기