사전캠프 10일차
오늘은 파이어베이스에 대해 간단히 알아보고, 프로젝트 생성 및 연동까지 학습했다.
강의의 파이어베이스 사이트가 지금의 사이트와 달랐지만, 큰 틀은 비슷하여 따라가기에 어려움은 없었다.
✅ 서버와 통신을 하여 데이터를 관리하거나, 로컬 데이터 베이스를 활용하여 데이터를 유지하여 사용자들에게 제공하게 된다. 하지만 서버 개설의 경우 서버 개발이 필요하며, 로컬 데이터 베이스는 앱 또는 캐시를 삭제할 경우 데이터가 없어진다.
서버를 대신할 클라우드 서비스인 파이어 베이스를 이용하게 되면, 일정 부분 무료로 이용이 가능하며 편리해진다.
📚 제공되는 서비스
📕 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)를 확인하기에도 좋다.
✅ 파이어베이스 접속
✅ 프로젝트 시작하기
✅ 프로젝트명 입력
✅ 구글 애널리틱스 사용여부 설정
✅ 프로젝트 생성
✅ 프로젝트 생성 완료
📌 파이어베이스 데이터베이스 설정
✅ 좌측 메뉴 > 빌드 > Firestore Database
✅ 데이터베이스 만들기
✅ 이름 및 데이터베이스 서버 위치 선정
✅ 보안 규칙 선택
✔ 프로덕션 모드의 경우 데이터를 읽고 쓰기를 모두 거부하며, 데이터를 보호한다.
이를 사용하기 위해서는 데이터 보안 규칙을 커스터마이징하여 작성해야 하기 때문에 지금 같이 테스트의 경우 아래 테스트 모드로 만든다.
✅ 컬렉션 추가
✅ 컬렉션명 입력
✅ 자동 ID 생성
✅ 값 입력
✅ 필드 추가
✅ 만들기 완료
생성한 프로젝트와 데이터베이스를 앱 내에서 활용하기 위해 앱 프로젝트와 연동한다. 앱에 연동을 위해서는 안드로이드와 iOS 각각 처리를 해줘야 한다.
✅ 프로젝트 개요 > 앱추가 > android
✅ Android
✅ 프로젝트 파일 > android > app > build.gradle > namespace
✅ 앱 등록
✔ 앱 닉네임은 선택사항으로 생략한다.
또한, 디버그 서명 인증서 SHA-1는 선택사항이지만 로그인을 하기 위해서 필수이다.
하지만 여기서는 로그인을 연동하지 않기 때문에 비워둔다.
✅ 파일 다운로드 > 파일 추가
✅ Groovy 선택
✔ 루트 수준의
id 'com.google.gms.google-services' version '4.4.2' apply false를 복사해 소스 코드의settings.gradle의plugins부분에 붙여넣는다.
✔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 > 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_ID밑string부분을 복사해 붙여 넣어준다.
✔ 안드로이드와 ios는apiKey와apppID가 다르기 때문에Platform을 사용하여 구분한다.
Platform.isAndroid ? '' : '',를 사용하면, 안드로이드일 경우 앞을, 아닐 경우 뒤를 사용한다는 뜻이다.
✅ 패키지 다운로드
✔ Terminal에cd ios,pod install을 차례로 입력한다.
❌ 아래 이 부분은 따로 설명이 없었고, 상단 패키지 다운로드 후 에뮬레이터를 실행하는 것으로 강의가 끝났다.
✅ Firebase SDK 추가
✅ 초기화 코드 추가
✅ 콘솔로 이동
✅ 설정 완료
✔ 우선 임의로 설정을 완료해보았다.
파이어베이스 이론과 실제 프로젝트를 생성하고 연동하기까지 해보았는데, 따라할 때 강의가 예전 버전이라 파이어베이스 사이트가 약간 달랐다.
그리고 맥 환경이 아니라서 중간부터는 직접 따라해볼 수 없어서 불편했다.
또한, 강의가 이대로 끝나버려서 그 후에 파이어베이스 사이트에 남아있는 과정들을 어떻게 해야하는지 설명이 없었다.
다음 시간에는 스레드 앱에 CRUD 실습에 들어간다.
만약 여유가 된다면 API까지 학습하게 될 것인데, 여기까지 완료해야 4주차 강의가 끝난다.
+<img style="display:block" src="" width="90%" height="90%">
오늘은 이미지를 넣을게 많아 마크다운에서 이미지 조정하는 법을 찾아봤다.