[25.06.10 TIL] 4주차 강의(파이어베이스)

김영민·2025년 6월 10일

[Flutter 7기] 사전캠프

목록 보기
10/13

사전캠프 10일차
오늘은 파이어베이스에 대해 간단히 알아보고, 프로젝트 생성 및 연동까지 학습했다.
강의의 파이어베이스 사이트가 지금의 사이트와 달랐지만, 큰 틀은 비슷하여 따라가기에 어려움은 없었다.


4주차 강의(파이어베이스)

1. 파이어베이스

1-1 파이어베이스

✅ 서버와 통신을 하여 데이터를 관리하거나, 로컬 데이터 베이스를 활용하여 데이터를 유지하여 사용자들에게 제공하게 된다. 하지만 서버 개설의 경우 서버 개발이 필요하며, 로컬 데이터 베이스는 앱 또는 캐시를 삭제할 경우 데이터가 없어진다.

서버를 대신할 클라우드 서비스인 파이어 베이스를 이용하게 되면, 일정 부분 무료로 이용이 가능하며 편리해진다.


1-2 파이어베이스 서비스

📚 제공되는 서비스

📕 Authentication
✔ 여러개의 인증 로그인 서비스를 만들어준다.
SNS 로그인과 ID/PASSWARD를 이용한 회원가입 방법, 메일링 서비스를 제공하기 때문에 비밀번호 재설정과 같이 메일로 발송해주는 등 다양한 서비스를 제공한다.

📙 Cloud Firestore
✔ 실시간 데이터 베이스로 개발자가 여러 장치 및 플랫폼에서 데이터를 저장하고 동기화할 수 있는 확장 가능한 실시간 NoSQL 클라우드 데이터베이스를 제공한다.

📒 Functions(유료)
✔ 서버를 대신하는데, 서버는 API를 제공한다.
HTTP 통신을 통해서 클라이언트에서 요청한 것을 받아 비즈니스 로직을 수행하고, 데이터 베이스를 확인해서 그 데이터를 내려주는 역할을 쉽게 할 수 있도록 한다.

📗 Storage
✔ 이미지, 오디오 및 비디오 파일과 같은 사용자 생성 콘텐츠를 저장하고 제공하는 클라우드 기반 저장소 서비스이다.

📘 A/B Testing
✔ A와 B를 두고 어떤 것이 이점이 있는지 등 쉽게 테스트할 수 있도록 지원하는 서비스이다.

📔 Analytics
✔ 사용자들의 행동 패턴이나 접속 상태 등 쉽게 볼 수 있고, 분석할 수 있게 제공하는 서비스이다.

📓 Cloud Messaging
✔ 앱을 이용하는 사용자에게 혹은 개인과 개인 이벤트를 통해 메세지를 보내는 푸시 메세지 서비스이다.

📃 Crashlytics
✔ 앱의 성능을 저하시키는 오류 상태를 트래킹해서 제공하는 서비스로 개발자가 애플리케이션의 안정성 문제를 식별하고 수정할 수 있도록 자세한 충돌 보고 및 분석을 제공한다.

📜 Dynamic Links
✔ 딥 링크로 잠재 사용자를 앱 내부의 적절한 위치로 안내한다.

📄 Remote Config
✔ 앱을 배포하지 않고도 저장되어 있는 설정값을 가져다 앱에서 바로 활용할 수 있도록 설정값을 저장해둔다.
개발자는 사용자가 업데이트를 하지 않고도 앱의 기능 또는 구성을 업데이트할 수 있다.


📚 Flutter 프로젝트에 Firebase가 적합한 이유

📕 개발 프로세스 가속화

📙 앱 기능 향상
✔ Firebase 서비스는 개발자에게 애플리케이션에 고급 기능을 추가할 수 있는 강력한 도구를 제공한다.

📒 앱 성능 및 안정성 향상
✔ Firebase의 실시간 데이터 동기화, 비정상 종료 보고 및 성능 모니터링을 통해 개발자는 안정적이고 반응이 빠른 애플리케이션을 만들 수 있다.

📗 사용자 인증 간소화
✔ Firebase 인증은 다중 로그인 방법을 지원하므로 개발자가 사용자 계정을 보다 쉽게 관리하고 애플리케이션을 보호할 수 있다.

📘 손쉬운 확장
✔ Firebase의 인프라는 자동으로 확장되도록 설계되어 애플리케이션이 수동 개입 없이 대량의 데이터와 트래픽을 처리할 수 있다.

💡 특히 밴처 회사나 팀 프로젝트 혹은 개인 프로젝트 등에 탁월하며, 대규모 프로젝트에서도 MVP (Minimum Viable Product)를 확인하기에도 좋다.

1-3 프로젝트 생성

파이어베이스 접속


프로젝트 시작하기


프로젝트명 입력


구글 애널리틱스 사용여부 설정


프로젝트 생성


프로젝트 생성 완료


📌 파이어베이스 데이터베이스 설정

좌측 메뉴 > 빌드 > Firestore Database


데이터베이스 만들기


이름 및 데이터베이스 서버 위치 선정


보안 규칙 선택
✔ 프로덕션 모드의 경우 데이터를 읽고 쓰기를 모두 거부하며, 데이터를 보호한다.
이를 사용하기 위해서는 데이터 보안 규칙을 커스터마이징하여 작성해야 하기 때문에 지금 같이 테스트의 경우 아래 테스트 모드로 만든다.


컬렉션 추가


컬렉션명 입력


자동 ID 생성


값 입력


필드 추가


만들기 완료


1-4 프로젝트 연동

생성한 프로젝트와 데이터베이스를 앱 내에서 활용하기 위해 앱 프로젝트와 연동한다. 앱에 연동을 위해서는 안드로이드와 iOS 각각 처리를 해줘야 한다.

📌 android 연동

프로젝트 개요 > 앱추가 > android


Android


프로젝트 파일 > android > app > build.gradle > namespace


앱 등록
✔ 앱 닉네임은 선택사항으로 생략한다.
또한, 디버그 서명 인증서 SHA-1는 선택사항이지만 로그인을 하기 위해서 필수이다.
하지만 여기서는 로그인을 연동하지 않기 때문에 비워둔다.


파일 다운로드 > 파일 추가


Groovy 선택


✔ 루트 수준의 id 'com.google.gms.google-services' version '4.4.2' apply false를 복사해 소스 코드의 settings.gradleplugins 부분에 붙여넣는다.

id 'com.google.gms.google-services' 를 복사하여, app > build.gradle 의 plugins 에 붙여넣는다.

implementation platform('com.google.firebase:firebase-bom:33.15.0') 를 복사하여, dependencies에 붙여 넣는다. 없다면 만들어서 넣어준다.

dependencies{
    implementation platform('com.google.firebase:firebase-bom:33.15.0')
}

콘솔로 이동


설정 완료


📌 파이어베이스 데이터베이스 접근 라이브러리 설치

firebase_core: ^2.24.2
cloud_firestore: ^4.3.2

💡 firebase라이브러리의 경우 버전 충돌이 엄청 많이 발생된다.
원활한 진행을 위해서 pubspec.yaml 파일에 다음과 같이 버전을 잡아준다.

✅ 설치가 완료 됐다면 Terminal에 flutter clean을 입력하고, 다시 flutter pub get을 설치해준다.


📌 WidgetsFlutterBinding.ensureInitialized()

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

💡 WidgetsFlutterBinding.ensureInitialized()의 역할
WidgetsFlutterBinding.ensureInitialized()는 WidgetsBinding 인스턴스를 초기화하고, Flutter 프레임워크가 완전히 초기화되었음을 보장한다.
파이어 베이스의 경우 플러터 프레임워크가 완전히 초기화되고 나서 사용이 가능하기 때문에 반드시 WidgetsFlutterBinding.ensureInitialized()를 사용하고 나서 사용해야 한다.


📌 파이어베이스 초기화

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: FirebaseOptions(
      apiKey: apiKey,
      appId: appId,
      messagingSenderId: messagingSenderId,
      projectId: projectId,
    ),
  );
  runApp(const MyApp());
}

📌 파이어베이스 초기화 데이터 적용

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: FirebaseOptions(
      apiKey: 'AIzaSyA_gor7plIWf52QN6EsTin8J32qvdOEiZ69s',
      appId: '1:628293678606:android:5fe07fsee8445e03c169ae5f',
      messagingSenderId: '6282936786066128293678606',
      projectId: 'thread-sample-app',
    ),
  );
  runApp(const MyApp());
}

google-services.json 파일을 확인하여, 위 apikey, appID, messagingSenderId = project_number, project_id를 채운다.


📌 main.dart 파일의 MyApp build 함수에 파이어베이스 데이터베이스 데이터 로드

FirebaseFirestore.instance.collection('feeds').get().then((value) {
  print(value.docs.length);
});
  • 앱을 실행하여 print로 1이 찍힌다면 정상적으로 설치가 된 것이다.

📌 ios 연동

프로젝트 개요 > 앱추가 > ios


ios


프로젝트 파일 > ios > Runner.xcodeproj > project.pbxproj > PRODUCT_BUNDLE_IDENTIFIER


앱 등록


파일 다운로드 > 파일 추가
✔ Mac의 경우 ios 우클릭 > Open in Xcode > Runner > Runner에 파일 추가 > copy items if needed 클릭
여기까지 완료하면 ios 초기화를 해야 되는데 하게 되면, 앞의 안드로이드까지 apiKey 등 다 다시 해줘야하기 때문에 생략한다.

✖ Mac 환경에서만 세팅이 가능하기 때문에 윈도우의 경우 생략한다.


코드 추가

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
    options: FirebaseOptions(
      apiKey:
         Platform.isAndroid
          ? 'AIzaSyCajGwzx1GM7PMysE5wv4g-sNiEQ8mhN6w'
          : 'AIzaSyCy30QgCYF4EXqOibwMETigD9lqbaLOarU',
      appId: 
        Platform.isAndroid
          ? '1:1054753874478:android:bc31ea50b926c651ed35bf'
          : '1:1054753874478:ios:342c6a159270752fed35bf',
      messagingSenderId: '1054753874478',
      projectId: 'thread-sample-app-5d2bb',
      iosBundleId: 'com.example.threadAppSample',
    ),
  );
  runApp(const MyApp());
}

✔ 안드로이드 projectID 하단에 iosBundleID를 넣고, 파일에서 BUNDLE_IDstring 부분을 복사해 붙여 넣어준다.
✔ 안드로이드와 ios는 apiKeyapppID 가 다르기 때문에 Platform을 사용하여 구분한다.
Platform.isAndroid ? '' : '',를 사용하면, 안드로이드일 경우 앞을, 아닐 경우 뒤를 사용한다는 뜻이다.


패키지 다운로드
✔ Terminal에 cd ios, pod install을 차례로 입력한다.


아래 이 부분은 따로 설명이 없었고, 상단 패키지 다운로드 후 에뮬레이터를 실행하는 것으로 강의가 끝났다.

Firebase SDK 추가


초기화 코드 추가


콘솔로 이동


설정 완료

✔ 우선 임의로 설정을 완료해보았다.


파이어베이스 이론과 실제 프로젝트를 생성하고 연동하기까지 해보았는데, 따라할 때 강의가 예전 버전이라 파이어베이스 사이트가 약간 달랐다.
그리고 맥 환경이 아니라서 중간부터는 직접 따라해볼 수 없어서 불편했다.
또한, 강의가 이대로 끝나버려서 그 후에 파이어베이스 사이트에 남아있는 과정들을 어떻게 해야하는지 설명이 없었다.

다음 시간에는 스레드 앱에 CRUD 실습에 들어간다.
만약 여유가 된다면 API까지 학습하게 될 것인데, 여기까지 완료해야 4주차 강의가 끝난다.


+<img style="display:block" src="" width="90%" height="90%">
오늘은 이미지를 넣을게 많아 마크다운에서 이미지 조정하는 법을 찾아봤다.

profile
💻 [25.05.26~] Flutter 공부중⏳

0개의 댓글