Android

Android - Firebase로 실시간 데이터베이스와 인증 기능 구현하기

임베디드 친구 2024. 12. 1. 16:57
반응형

Firebase는 안드로이드 애플리케이션 개발에 있어 실시간 데이터베이스와 인증 기능을 손쉽게 추가할 수 있는 훌륭한 도구입니다. 이번 포스팅에서는 Firebase Realtime Database와 Authentication을 사용해 실시간 데이터베이스와 사용자 인증 기능을 구현하는 방법을 단계별로 알아보겠습니다. 예제 코드는 Kotlin으로 작성되었습니다.

1. Firebase 프로젝트 생성 및 설정

먼저 Firebase 프로젝트를 생성하고 Android 애플리케이션에 Firebase를 설정해야 합니다.

1.1 Firebase 프로젝트 생성

  1. Firebase 콘솔에 접속합니다.
  2. 새 프로젝트를 생성합니다. 프로젝트 이름을 정하고, 사용 약관에 동의한 후 프로젝트를 생성합니다.

1.2 Android 프로젝트에 Firebase 설정 추가

  1. Android 프로젝트의 build.gradle 파일에 Firebase 종속성을 추가해야 합니다.

  2. 프로젝트 수준 build.gradle 파일에 다음과 같은 코드가 있는지 확인하세요.

     classpath 'com.google.gms:google-services:4.3.10'
  3. 앱 수준 build.gradle 파일에도 필요한 플러그인과 의존성을 추가합니다.

     plugins {
         id 'com.android.application'
         id 'kotlin-android'
         id 'com.google.gms.google-services'
     }
    
     dependencies {
         implementation platform('com.google.firebase:firebase-bom:31.0.2')
         implementation 'com.google.firebase:firebase-auth'
         implementation 'com.google.firebase:firebase-database'
     }
  4. Firebase Console에서 Android 앱을 추가하고 패키지 이름을 입력한 뒤 google-services.json 파일을 다운받아 앱의 app 디렉토리에 추가합니다.

  5. app/build.gradle 파일의 맨 아래에 다음을 추가합니다:

     apply plugin: 'com.google.gms.google-services'

2. Firebase Authentication 구현

Firebase 인증 기능을 사용해 사용자 로그인 및 회원가입 기능을 구현해 보겠습니다.

2.1 Firebase 인증 객체 초기화

import com.google.firebase.auth.FirebaseAuth

class MainActivity : AppCompatActivity() {
    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Firebase 인증 객체 초기화
        auth = FirebaseAuth.getInstance()
    }
}

2.2 회원가입 기능 구현

회원가입을 위해 이메일과 비밀번호를 사용하여 새로운 사용자를 등록합니다.

private fun signUpUser(email: String, password: String) {
    auth.createUserWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // 회원가입 성공
                val user = auth.currentUser
                Toast.makeText(baseContext, "회원가입 성공: ${user?.email}", Toast.LENGTH_SHORT).show()
            } else {
                // 회원가입 실패
                Toast.makeText(baseContext, "회원가입 실패: ${task.exception?.message}", Toast.LENGTH_SHORT).show()
            }
        }
}

2.3 로그인 기능 구현

로그인을 통해 사용자가 앱에 접근할 수 있도록 합니다.

private fun signInUser(email: String, password: String) {
    auth.signInWithEmailAndPassword(email, password)
        .addOnCompleteListener(this) { task ->
            if (task.isSuccessful) {
                // 로그인 성공
                val user = auth.currentUser
                Toast.makeText(baseContext, "로그인 성공: ${user?.email}", Toast.LENGTH_SHORT).show()
            } else {
                // 로그인 실패
                Toast.makeText(baseContext, "로그인 실패: ${task.exception?.message}", Toast.LENGTH_SHORT).show()
            }
        }
}

3. Firebase Realtime Database 구현

Firebase Realtime Database를 사용해 데이터를 저장하고 읽어오는 기능을 구현해 보겠습니다.

3.1 데이터베이스 참조 가져오기

import com.google.firebase.database.DatabaseReference
import com.google.firebase.database.FirebaseDatabase

class MainActivity : AppCompatActivity() {
    private lateinit var database: DatabaseReference

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Firebase Realtime Database 참조 가져오기
        database = FirebaseDatabase.getInstance().reference
    }
}

3.2 데이터 쓰기

사용자 정보를 실시간 데이터베이스에 저장하는 예제입니다.

private fun writeUser(userId: String, name: String, email: String) {
    val user = User(name, email)
    database.child("users").child(userId).setValue(user)
        .addOnCompleteListener { task ->
            if (task.isSuccessful) {
                Toast.makeText(baseContext, "데이터 저장 성공", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(baseContext, "데이터 저장 실패: ${task.exception?.message}", Toast.LENGTH_SHORT).show()
            }
        }
}

// 사용자 데이터를 저장하기 위한 데이터 클래스
data class User(val name: String, val email: String)

3.3 데이터 읽기

저장된 데이터를 읽어오는 기능을 구현합니다.

private fun readUser(userId: String) {
    database.child("users").child(userId).get()
        .addOnSuccessListener { dataSnapshot ->
            if (dataSnapshot.exists()) {
                val user = dataSnapshot.getValue(User::class.java)
                Toast.makeText(baseContext, "데이터 읽기 성공: ${user?.name}, ${user?.email}", Toast.LENGTH_SHORT).show()
            } else {
                Toast.makeText(baseContext, "사용자를 찾을 수 없습니다.", Toast.LENGTH_SHORT).show()
            }
        }
        .addOnFailureListener { exception ->
            Toast.makeText(baseContext, "데이터 읽기 실패: ${exception.message}", Toast.LENGTH_SHORT).show()
        }
}

4. 마무리

이제 Firebase를 사용해 실시간 데이터베이스와 사용자 인증 기능을 구현하는 기본적인 방법을 학습했습니다. Firebase를 활용하면 복잡한 서버 구축 없이도 실시간 데이터 처리와 사용자 인증을 간단히 추가할 수 있습니다. 이 예제를 기반으로 다양한 기능을 추가해 나만의 멋진 앱을 만들어 보세요!

참고 자료

Firebase의 다양한 기능을 응용하여 더 발전된 애플리케이션을 개발해 보세요.

반응형