๐ฅFirebase ์์ํ๊ธฐ
๐ฅFirebase?
ํ์ด์ด๋ฒ ์ด์ค๋ 2011๋ ํ์ด์ด๋ฒ ์ด์ค(Firebase, Inc)์ฌ๊ฐ ๊ฐ๋ฐํ๊ณ 2014๋ ๊ตฌ๊ธ์ ์ธ์๋ ๋ชจ๋ฐ์ผ ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ํ๋ซํผ์ด๋ค. ์ฑ์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ APIํํ๋ก ์ ๊ณตํ๊ธฐ์ ๊ฐ๋ฐ ๊ธฐ๊ฐ์ ๋จ์ถ์ํค๋ฉฐ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋ค.
0. ์์ํ๊ธฐ
์๋์ ๋งํฌ๋ก ๋ค์ด๊ฐ ์์ํ๊ธฐ ๋ฒํผ์ ๋๋ฅธ๋ค.
1. ์ฑ ๋ฑ๋ก
iOS๋ฅผ ์ ํํ๋ค. ํ๋ก์ ํธ๋ฅผ ํด๋ฆญํ ์ดํ ๋ฒ๋ค ์์ด๋๋ฅผ ๋ณต์ฌํ๊ณ ๋ถ์ฌ๋ฃ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฑ์ ๋ฑ๋กํ๋ค.
2. ๊ตฌ์ฑ ํ์ผ ๋ค์ด๋ก๋
p.list ํ์ผ ๋ค์ด๋ฐ๋๋ค. ์์ ํด๋ ์์ ๋ฃ๊ณ , ํ๋ก์ ํธ์์ ๋ถ๋ฌ์จ๋ค. ๋๋ Info.plist ์์ ๋์๋ค.
3. Firebase SDK ์ถ๊ฐ
Install Firebase with Swift Package Manager
cocoapods๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐ๋ก ์ค์นํ ์ ์๋ค. Xcode์์ File โ Swift Packages โ Add Packages๋ก ๋ค์ด๊ฐ ์๋์ ์ฝ๋๋ฅผ ๋ณต๋ถํ๋ค.
https://github.com/firebase/firebase-ios-sdk.git
์ดํ ์ฌ์ฉํ ํจํค์ง๋ฅผ ์ฒดํฌํ๊ณ ์ค์นํ๋ฉด ๋๋ค. ๋๋ ๋ค์๊ณผ ๊ฐ์ด ์ฒดํฌํ์๋ค. ์ดํ์ ์ถ๊ฐํ ์๋ ์์ผ๋, ๋๋ฌด ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
FirebaseAuth
FirebaseFirestore
FirebaseFunctions
FirebaseStorage
4. ์ด๊ธฐํ ์ฝ๋ ์ถ๊ฐ
SwiftUI ํ์ผ์์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์ด๋ป๊ฒ ์ถ๊ฐํ์ง? ๋ง๋งํ ์๊ฐ์ด ๋ค์์ง๋ง ๋งค์ฐ ๊ฐ๋จํ๋ค. ํ๋ก์ ํธ์ด๋ฆApp.swift ํ์ผ์ ์ฐพ๋๋ค. ํ์ด์ด๋ฒ ์ด์ค๋ฅผ ๋ถ๋ฌ์ init ํจ์ ์์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
import SwiftUI
import Firebase // Firebase ๋ถ๋ฌ์ค๊ธฐ
@main
struct ํ๋ก์ ํธ์ด๋ฆApp: App {
init() {
FirebaseApp.configure() // ์ฝ๋ ์ถ๊ฐ
}
var body: some Scene {
WindowGroup {
MainTabView()
}
}
}
Swift ํ์ผ์ด๋ผ๋ฉด ๊ธฐ๋ณธ AppDelegate ํด๋์ค์ ์๋์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
import UIKit
import Firebase // Firebase ๋ถ๋ฌ์ค๊ธฐ
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FirebaseApp.configure() // ์ฝ๋ ์ถ๊ฐ
return true
}
}
Authentication
๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฉ์ผ/๋น๋ฐ๋ฒํธ ๋ฅผ ํ์ฉํ์๋ค. ๋น๋ฐ๋ฒํธ๊ฐ ์๋ ๋ก๊ทธ์ธ์ ํ์ฉํ๊ณ ์ถ์ง ์๊ธฐ ๋๋ฌธ์ ํค์ง ์์๋ค.
FireStore Database
๋น ๋ฅธ ์ค์ ์ ์ํด ํ ์คํธ ๋ชจ๋์์ ์์ํ์๋ค. ๊ทธ๋ฆฌ๊ณ FireStore ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์น๋ฅผ ์ค์ ํ๋ค. ์ฌ๊ธฐ๋ ํ๊ตญ์ด๋ฏ๋ก asia-northeast3(์์ธ)๋ก ์ค์ ํ์๋ค. ์ด ์์น๋ฅผ ์ค์ ํ ํ์๋ ๋์ค์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก ๋ค์ ํ๋ฒ ์ฒดํฌํ์!๐ง
Storage
์ดํ ์ ์ ์ ํ๋กํ ์ฌ์ง์ ๋ฃ์ ์ ์ฅ์์ด๋ค. ์ถ๊ฐ๋ก Storage โ rules์์ ๋ณด๋ฉด, ์๋์ ๊ฐ์ด ์์ฑ๋์ด ์๋ค. auth๊ฐ ์๋ค๋ฉด read, write๊ฐ ๋ถ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ์ด๋ค. ์์ฃผ ๋ฐ๋์งํ๋ฉฐ, ๋ณ๊ฒฝํ์ง ์๋๋ค.
rules_version = '2';
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read, write: if request.auth != null;
}
}
}
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฅFirebase ์์ํ๊ธฐ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@leeesangheee/ํ์ด์ด๋ฒ ์ด์ค-์์ํ๊ธฐ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค