Flutter ์•ฑ ๊ฐœ๋ฐœ์—์„œ Firebase๋Š” ๋ฐ์ดํ„ฐ ์ €์žฅ, ์‚ฌ์šฉ์ž ์ธ์ฆ, ์•Œ๋ฆผ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” Firebase CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Flutter ํ”„๋กœ์ ํŠธ์— Firebase๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

Firebase CLI ์„ค์น˜ ๋ฐ ๋กœ๊ทธ์ธ

Firebase CLI๋Š” Firebase ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  Cloud Firestore, Cloud Functions ๋“ฑ์˜ ์„œ๋น„์Šค๋ฅผ ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์„ค์น˜๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ„ฐ๋ฏธ๋„์— ์ž…๋ ฅํ•˜์—ฌ Firebase CLI๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:์„ค์น˜ ๊ณผ์ •์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  2. curl -sL https://firebase.tools | bash
  3. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, firebase login ๋ช…๋ น์–ด๋กœ Firebase์— ๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ ๋กœ๊ทธ์ธ๋œ ๊ณ„์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด firebase login --reauth ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  4. Firebase CLI ์„ค์น˜ ํ™”๋ฉด
![Firebase CLI ๋กœ๊ทธ์ธ ํ™”๋ฉด](https://blog.kakaocdn.net/dn/uOdS8/btryPTl2v2G/eq6EtkjXgiuBJHHiOjGdHk/img.png)



![Firebase CLI ๋กœ๊ทธ์ธ ์™„๋ฃŒ ํ™”๋ฉด](https://blog.kakaocdn.net/dn/9Ls5L/btryOT1g4iL/UwWmMABqcdzT2wq44ALyrK/img.png)

Flutter ํ”„๋กœ์ ํŠธ Firebase ์„ค์ • ๋ฐ ์—ฐ๊ฒฐ

Flutter ํ”„๋กœ์ ํŠธ์— Firebase๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ๋จผ์ €, FlutterFire CLI๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

  2. FlutterFire CLI ํ™œ์„ฑํ™” ํ™”๋ฉด

  3. dart pub global activate flutterfire_cli

  4. PATH ํ™˜๊ฒฝ๋ณ€์ˆ˜์— FlutterFire CLI ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค:

  5. export PATH="$PATH":"$HOME/.pub-cache/bin"

  6. flutterfire configure ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Flutter ํ”„๋กœ์ ํŠธ์— Firebase๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐํ•˜๊ฑฐ๋‚˜ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ฒŒ๋˜๋ฉด android ํ”„๋กœ์ ํŠธ๋Š” ์ž๋™์œผ๋กœ firebase ์„ค์ •์ด ๋˜๋Š”๋ฐ ios์˜ ๊ฒฝ์šฐ bundle id ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ธฐ๋•Œ๋ฌธ์— ์ง์ ‘ ์ž…๋ ฅํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.
  • ios/Runner.xcodeproj/project.pbxproj ํŒŒ์ผ์—์„œ PRODUCT_BUNDLE_IDENTIFIER ๋ฅผ ์ฐพ์œผ๋ฉด(cmd + f) bundle id๊ฐ€ ์ ํ˜€์žˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด firebase ํ”„๋กœ์ ํŠธ์— android ์™€ ios ๋ชจ๋‘ ๊ธฐ๋ณธ ์„ค์ •์ด ์™„๋ฃŒ๋œ๋‹ค.

์ฐธ๊ณ 

'flutterfire: line 8: dart: command not found' ๋ผ๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ํ•ด๋‹น ์—๋Ÿฌ๋Š” dart๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•„์„œ ๋ฐœ์ƒํ–ˆ์œผ๋ฏ€๋กœ

dart๋ฅผ ์„ค์น˜ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

brew tap dart-lang/dart
brew install dart

Flutter ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ์—์„œ firebase initialize

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
  runApp(const MyApp());
}

์œ„ ์ฝ”๋“œ๋ฅผ main์— ์ž…๋ ฅํ•˜๋ฉด firebase๊ฐ€ ํ”Œ๋žซํผ๋ณ„ ์ดˆ๊ธฐํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ๋œ๋‹ค.

I/FirebaseApp(29667): Device unlocked: initializing all Firebase APIs for app [DEFAULT]

์„ค์น˜๊ฐ€ ์ž˜ ์ง„ํ–‰๋˜์—ˆ๋‹ค๋ฉด ์•ฑ์„ ์‹คํ–‰ ์‹œ ์œ„์™€๊ฐ™์€ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.