Firebase는 Google에서 제공하는 앱 개발 플랫폼으로, 다양한 백엔드 서비스를 제공합니다. 여기에는 인증, 실시간 데이터베이스, 클라우드 스토리지, 분석, 푸시 알림 등이 포함됩니다. Firebase를 사용하면 개발자는 서버 인프라를 관리하지 않고도 강력한 앱을 구축할 수 있습니다.
Firebase 주요 서비스 소개
- Firebase Authentication: 사용자의 인증과 관리를 지원합니다.
- Cloud Firestore: NoSQL 클라우드 데이터베이스로, 데이터 동기화 및 오프라인 지원 기능을 제공합니다.
- Firebase Realtime Database: 실시간 데이터베이스로, 데이터 변경 사항을 실시간으로 반영합니다.
- Firebase Cloud Messaging (FCM): 푸시 알림을 전송할 수 있는 서비스입니다.
- Firebase Analytics: 앱 사용 데이터를 분석합니다.
Firebase Authentication
Firebase Authentication을 사용하면 이메일/비밀번호, 소셜 로그인(Google, Facebook, Twitter 등), 전화번호 인증 등을 간편하게 구현할 수 있습니다.
Firebase Authentication 설정
- Firebase 프로젝트를 생성하고, Android 앱을 추가합니다.
google-services.json
파일을 다운로드 받아 프로젝트의app
폴더에 추가합니다.build.gradle
파일에 Firebase 종속성을 추가합니다.
// 프로젝트 수준 build.gradle buildscript { dependencies { classpath 'com.google.gms:google-services:4.3.10' } } // 앱 수준 build.gradle apply plugin: 'com.google.gms.google-services' dependencies { implementation 'com.google.firebase:firebase-auth:21.0.3' }
이메일/비밀번호 인증 예제
import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; public class MainActivity extends AppCompatActivity { private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAuth = FirebaseAuth.getInstance(); // 사용자 등록 mAuth.createUserWithEmailAndPassword("user@example.com", "password") .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { FirebaseUser user = mAuth.getCurrentUser(); // 성공적으로 등록됨 } else { // 등록 실패 } }); // 사용자 로그인 mAuth.signInWithEmailAndPassword("user@example.com", "password") .addOnCompleteListener(this, task -> { if (task.isSuccessful()) { FirebaseUser user = mAuth.getCurrentUser(); // 성공적으로 로그인됨 } else { // 로그인 실패 } }); } }
Cloud Firestore
Cloud Firestore는 확장성이 뛰어난 NoSQL 클라우드 데이터베이스로, 클라이언트 간의 데이터 동기화 및 오프라인 지원 기능을 제공합니다.
Firestore 설정
- Firebase 콘솔에서 Firestore 데이터베이스를 활성화합니다.
build.gradle
파일에 Firestore 종속성을 추가합니다.
dependencies { implementation 'com.google.firebase:firebase-firestore:24.0.0' }
Firestore 데이터 읽기/쓰기 예제
import com.google.firebase.firestore.CollectionReference; import com.google.firebase.firestore.FirebaseFirestore; public class MainActivity extends AppCompatActivity { private FirebaseFirestore db; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); db = FirebaseFirestore.getInstance(); // 데이터 쓰기 Map<String, Object> user = new HashMap<>(); user.put("first", "Ada"); user.put("last", "Lovelace"); user.put("born", 1815); db.collection("users").document("a_lovelace") .set(user) .addOnSuccessListener(aVoid -> { // 성공적으로 작성됨 }) .addOnFailureListener(e -> { // 작성 실패 }); // 데이터 읽기 CollectionReference users = db.collection("users"); users.get() .addOnCompleteListener(task -> { if (task.isSuccessful()) { for (QueryDocumentSnapshot document : task.getResult()) { Log.d("Firestore", document.getId() + " => " + document.getData()); } } else { Log.w("Firestore", "Error getting documents.", task.getException()); } }); } }
Firebase Realtime Database
Firebase Realtime Database는 JSON 형태로 데이터를 저장하며, 데이터 변경 사항을 실시간으로 반영합니다.
Realtime Database 설정
- Firebase 콘솔에서 Realtime Database를 활성화합니다.
build.gradle
파일에 Realtime Database 종속성을 추가합니다.
dependencies { implementation 'com.google.firebase:firebase-database:20.0.3' }
Realtime Database 데이터 읽기/쓰기 예제
import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import com.google.firebase.database.ValueEventListener; public class MainActivity extends AppCompatActivity { private DatabaseReference mDatabase; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDatabase = FirebaseDatabase.getInstance().getReference(); // 데이터 쓰기 mDatabase.child("users").child("user1").setValue("John Doe"); // 데이터 읽기 mDatabase.child("users").child("user1").addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { String value = dataSnapshot.getValue(String.class); Log.d("RealtimeDatabase", "Value is: " + value); } @Override public void onCancelled(DatabaseError error) { // 읽기 실패 Log.w("RealtimeDatabase", "Failed to read value.", error.toException()); } }); } }
Firebase Cloud Messaging (FCM)
FCM을 사용하면 앱에 푸시 알림을 보낼 수 있습니다.
FCM 설정
- Firebase 콘솔에서 클라우드 메시징을 활성화합니다.
build.gradle
파일에 FCM 종속성을 추가합니다.
dependencies { implementation 'com.google.firebase:firebase-messaging:23.0.0' }
FCM 기본 예제
MyFirebaseMessagingService
클래스를 생성하여 메시지를 수신합니다.
import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class MyFirebaseMessagingService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super.onMessageReceived(remoteMessage); // 메시지 처리 if (remoteMessage.getNotification() != null) { Log.d("FCM", "Message Notification Body: " + remoteMessage.getNotification().getBody()); } } }
- AndroidManifest.xml 파일에 서비스를 등록합니다.
<service android:name=".MyFirebaseMessagingService" android:exported="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
- 서버에서 FCM 메시지를 보냅니다. 이는 서버 측 코드로, Firebase Admin SDK를 사용하여 메시지를 보낼 수 있습니다.
종합
Firebase는 다양한 백엔드 서비스를 제공하여 앱 개발을 크게 단순화합니다. Firebase Authentication을 통해 손쉽게 사용자 인증을 처리할 수 있으며, Cloud Firestore와 Realtime Database를 통해 실시간 데이터를 저장하고 동기화할 수 있습니다. Firebase Cloud Messaging을 통해 푸시 알림을 쉽게 구현할 수 있습니다. Firebase를 사용하면 서버 인프라를 직접 관리할 필요 없이 강력한 기능을 구현할 수 있습니다.