Firebase 사용하기

(이 글은 미완성이며 의식의 흐름대로 작성되었음을 알립니다..)

다이어리 기능을 파이어베이스와 연결하여 구현해보려고한다. 사진도 한 장씩 받을 것임으로 코어, 데이터베이스, 스토리지 세 가지 라이브러리를 설치해준다.

// Podfile
target 'LetsBake' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
        pod 'Firebase/Core'
        pod 'Firebase/Database'
        pod 'Firebase/Storage'
  # Pods for LetsBake

end

// 저장 후 pod install을 이용하여 설치~

Realtime Database

Firebase Realtime Database는 클라우드 호스팅 데이터 베이스다. 모든 데이터는 JSON 형태로 저장되어 연결된 클라이엍느에 실시간으로 동기화 된다.

Configuration

(firebase에 앱 추가하는 부분은 생략)

  • AppDelegate.swift
import UIKit
import Firebase

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure() // 추가
    return true
  }
...
  • 데이터베이스를 연결할 뷰에 다음 코드 작성
var ref: DatabaseReference?

@objc func tapDoneButton(_ sender: UIButton) {
    let title = titleTextField.text
    self.ref = Database.database().reference()
    let itemRef = self.ref?.child("list")
    itemRef?.setValue(title)
  }
  • Firebase realtime database를 확인해보면~!

스크린샷_2022-03-06_21 26 09

그럼 이제 잘 작동은 하는 것을 확인했으니 데이터를 구조에 맞게 잘 넣어주는 방법을 알아보자

데이터베이스 구조화 - JSON tree

다이어리 내에서 저장 될 값들은 다음과 같다.

  • 제목: String
  • 날짜: date
  • 사진: String(파일명)
  • 재료: 구조체 배열
    • 재료명: String
    • 양: Double
    • 단위: String
  • 상세 레시피: String
  • 별점: Int

이걸 이제 JSON으로 표현해보자

{
  "title" : "레몬케이크",
	"date" : "YYYY-MM-DD",
	"photo" : "레몬케이크+YYYY-MM-DD+image.png",
	"ingredients" : 
	[
		{
	    "name" : "밀가루",
			"quantity" : 800,
			"unit" : "g"
		},
		{
	    "name" : "레몬즙",
			"quantity" : 30,
			"unit" : "g"
		}
	],
		"receipe" : "준비한다. 어쩌구 저쩌구.",
		"rating" : "4"
}
import Foundation

// MARK: - Welcome
struct Diary: Codable {
    let title, date, photo: String
    let ingredients: [Ingredient]
    let receipe, rating: String
}

// MARK: - Ingredient
struct Ingredient: Codable {
    let name: String
    let quantity: Int
    let unit: String
}

모 요로케 되지 않을까..

그럼 데이터를 구조에 맞게 넣어볼건데, 데이터 저장에 사용되는 메소드는 4가지가 있다.

  • setValue(): 정의된 경로에 데이터를 쓰거나 대체
  • childByAutoId(): 데이터 목록에 추가하며 이 메소드가 호출될 때마다 Firebase에서는 고유 key값 생성
  • updateChildValues: 정의된 경로 내의 일부 키를 업데이트
  • runTransactionBlock: 동시 업데이트에 의한 손상 위험이 존재하는 복잡한 데이터 업데이트

(오늘은 여기까지..)

References

iOS ) 왕초보를 위한 Firebase사용법!/오류 해결 iOS) Firebase 를 이용한 회원가입과 프로필 사진 등록 Firebase Auth, Firebase Database, Firebase Storage [iOS] How to use Firebase Database in iOS