(이 글은 미완성이며 의식의 흐름대로 작성되었음을 알립니다..)
다이어리 기능을 파이어베이스와 연결하여 구현해보려고한다. 사진도 한 장씩 받을 것임으로 코어, 데이터베이스, 스토리지 세 가지 라이브러리를 설치해준다.
// 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를 확인해보면~!
그럼 이제 잘 작동은 하는 것을 확인했으니 데이터를 구조에 맞게 잘 넣어주는 방법을 알아보자
데이터베이스 구조화 - 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