์๋ ํ์ธ์ Foma ์ ๋๋ค!
์ค๋๋ง์ ํ์ด์ด๋ฒ ์ด์ค ๊ด๋ จํด์ ๊ธ์ ์ฐ๊ฒ ๋์๋ค์.
์ค๋ ์์๋ณผ๊ฑด ํด๋ผ์ฐ๋ ํ์ ์ด๋ผ๋ ๊ฒ์ธ๋ฐ์.
Cloud Function
๋จผ์ ํด๋ผ์ฐ๋ ํ์ ์ด๋?
๊ฐ๋จํ๊ฒ ์ค๋ช ๋๋ฆฌ๋ฉด ์ ๋ฒ์ ์ ํฌ๊ฐ ํ์ด์ด์คํ ์ด์ ๋ํด์ ์์๋ณด์์์์? (ํน์ ๋ชจ๋ฅด์๋ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋จผ์ ๋ณด๊ณ ์์ฃผ์ธ์~)
์ธ์คํ๊ทธ๋จ์ผ๋ก ์๋ฅผ ๋ค์๋ฉด ๋ง์ฝ ํ๋ก์๊ฐ 100๋ง๋ช ์ด ์๊ณ ๊ทธ ํ๋ก์๋ค์ ํฌ์คํธ๋ฅผ ์ ๋ ฌํ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
์ง์ ์ฑ ๋ด์ ์ฝ๋์์ ํ์ด์ด์คํ ์ด ์์ ์๋ฐฑ๋ง๊ฐ์ ๋ฌธ์๋ฅผ ์ฝ๊ณ ๋ฐ์์์ ์ ๋ ฌํด์ผ ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ์๋ชจ๋ ๋๋ฌด ์ฌํด์ง๊ณ ํด๋ผ์ด์ธํธ์์ ๊ด๋ฆฌํ๊ธฐ ๋ถ๋ด์ค๋ฌ์์ง ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ด ํด๋ผ์ฐ๋ ํ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด node.js์์ ์ํ๋ Httpํจ์๋ฅผ ๋ง๋ค์ด๋๊ณ ์ฑ ํด๋ผ์ด์ธํธ์์ ์ด ํจ์๋ฅผ
ํธ์ถํ๊ฒ ๋๋ฉด ํน์ ์ฝ๋๋ฅผ ์คํํด์ ์ํ๋ ๋ฐ์ดํฐ๋ง ๋ฐ์์ฌ ์ ์๊ฒ ๋ฉ๋๋ค!
๊ทธ๋์ ์ค๋ ํด๋ณผ๊ฑด node.js์ ํฌ๋ก์๋๋ผ๋ httpํจ์๋ฅผ ๋ง๋ค๊ณ ์ด ํจ์๋ฅผ iOS์ฑ์์ ์คํ์์ผ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ์์ผ๋ณผ๊ฑฐ์์!
node.js๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด์ javascript์ธ์ด๋ฅผ ์กฐ๊ธ ์์์ผํด์ ใ (์ ๋ ์ ๋ชจ๋ฆ ๋๋ค... ๊ทธ๋ฅ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ก ๋ฐ๋ผํด๋ณด์์ด์. ์ค๋ ํด๋ณผ๊ฑด ํฌ๊ฒ ์๊ด์์ผ๋ ๊ฑฑ์ ์ ใดใด)
์! ๊ฐ์ฅ ๋จผ์ ํด์ผํ ๊ฑด ์ฌ๊ธฐ ์์ node.js๋ฅผ ๋ค์ด๋ก๋ ํด์ฃผ์ธ์.
๊ทธ๋ฆฌ๊ณ npm์ ์ค์นํด์ฃผ์ ์ผํ๋๋ฐ์.
Homebrew๋ผ๋ ๋งฅOS ํจํค์ง ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ํด์ฃผ๋ ๊ฒ์ ์ฌ๊ธฐ์ ๋ค์ด๋ก๋ ํด์ฃผ์๊ณ
๊ฐ๋จํ๊ฒ ํฐ๋ฏธ๋์ ๋ถ์ฌ๋ฃ๊ธฐํ์ ๋ค์
ํฐ๋ฏธ๋์ "brew install node"๋ผ๊ณ ํด์ฃผ์๋ฉด npm์ด ์ค์น๋ฉ๋๋ค!
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์ค์นํด์ฃผ์ ์ผ ํ ๊ฒ์ node.js๋ฅผ ์ฝ๋๋ฅผ ์์ฑํด์ค IDE Visual Studio๋ฅผ ์ฌ๊ธฐ์์ ๋ค์ด๋ก๋ ํด์ค๋๋ค.
์ด์ ์ค์นํ ๊ฒ์ ๋ชจ๋ ๋๋ฌ๊ตฌ์.
ํ์ด์ด๋ฒ ์ด์ค ์ฝ์๋ก ์ฌ๊ธฐ ์ด๋ํ์ ์ ํ์ด์ด๋ฒ ์ด์ค ์๊ธ์ ๋ฅผ ์ ๊ทธ๋ ์ด๋ ํด์ฃผ์ ์ผ ํด๋ผ์ฐ๋ ํ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํด์ง๋๋ค.
๋ณธ๊ฒฉ์ ์ผ๋ก ํด๋ผ์ฐ๋ํ์ ์ ์ค์นํด์ค์๋ค.
ํฐ๋ฏธ๋๋ก ์ด๋ํ์ ์ "npm install -g firebase-tools" ๋ผ๊ณ ์ณ์ฃผ์ธ์.
๋ง์ฝ ์๋์ ๊ฐ์ด ์๋ฌ๊ฐ ๋๋ค๋ฉด "sudo npm install -g firebase-tools" ์ด๋ผ๊ณ ์ณ์ฃผ์ธ์.
๊ทธ๋ฆฌ๊ณ "firebase login"์ด๋ผ๊ณ ์ณ์ฃผ์๊ณ "Allow Firebase to collect CLI usage and error reporting information?" ์ด๋ผ๊ณ ๋ฐ๊ฑด๋ฐ Y๋ฅผ ์ ๋ ฅํด์ฃผ์ธ์.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ํํ์ด์ง๋ก ์๋์ผ๋ก ์ด๋๋ ํ ๋ฐ ๊ณ์ ์ ์ ํํ๋ค Fibase CLI ์ก์ธ์ค๋ฅผ ํ์ฉํด์ฃผ์ธ์.
๊ทธ๋ฆฌ๊ณค Xcode์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํด์ค๋๋ค.
ํฐ๋ฏธ๋์์ ํด๋น ํ๋ก์ ํธ๊ฐ ์๋ ์ฃผ์๋ก ์ด๋ํด์ค๋๋ค. "cd ํ๋ก์ ํธ์ฃผ์"
๊ทธ๋ฆฌ๊ณ "firebase init"์ ํด์ฃผ์๋ฉด ์๋์ ๊ฐ์ด ๋ฐ๊ฑฐ์์.
์๋๋ก ๋ด๋ ค๋ณด์๋ฉด ์๊น์ฒ๋ผ ๋ ๋ฌผ์ด๋ณด๋๊ฒ ์์๊ฑฐ์์. ํ์ด์ด๋ฒ ์ด์ค์ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์ธ๊ฑฐ๋๊ณ ๋ฌผ์ด๋ณด๋๊ฑด๋ฐ ์ํ์๋ ํ๋ก์ ํธ๋ฅผ ๊ณจ๋ผ์ฃผ์ธ์.
๊ทธ ๋ค์ Functions: Configure and deploy Colud Functions๋ฅผ ์คํ์ด์ค๋ฐ๋ก ๋๋ฌ์ฃผ์ธ์
๊ทธ ๋ค์์ผ๋ก ์ด๋ค ์ธ์ด๋ฅผ ์ธ๊ฑฐ๋๊ณ ๋ฌผ์ด๋ณด๋ฉด JavaScript๋ฅผ ์ ํํด์ฃผ์๊ณ ๊ทธ ๋ค์์ ๋ชจ๋ Y๋ฅผ ํด์ฃผ์๋ฉด ์ค์น๊ฐ ๋ ๊ฒ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋น ํ๋ก์ ํธ๋ก ์ด๋ํ์๋ฉด functions๋ ํ์ผ์ด ์๊ฒผ์๊ฑฐ์์.
์ด์ Visual Studio๋ก ์ด๋ํฉ๋๋ค. ์๊น ๋ง๋ค์ด์คฌ๋ Xcode ํ๋ก์ ํธ๋ฅผ ์ด์ด์ฃผ์ธ์.
๊ทธ๋ฌ๋ฉด ์ผ์ชฝ์ ๋ณด์๋ฉด node_modules๋ผ๋๊ฒ ์์๊ฑฐ์์.
๊ฑฐ๊ธธ ๋๋ฌ์ ํ์ฅ์์ผ์ฃผ์๊ณ .gitinnore์ด๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ์ผ์ ์์ฑํด์ค๋๋ค.
.gitignoreํ์ผ์ "node_modules/"๋ผ๊ณ ์ ๋ ฅํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ index.js์ ์ด๋ํ์ ์ ์๋์ ๊ฐ์ด ์์ฑํด์ฃผ์๊ณ ๋ฐ๋์ command + s๋ฅผ ๋๋ฌ์ ํ์ผ์ ์ ์ฅํด์ค๋๋ค.
๊ทธ ๋ค์ ํฐ๋ฏธ๋๋ก ์ด๋ํ์ ์ firebase deploy๋ผ๊ณ ์ ๋ ฅํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ด์ด๋ฒ ์ด์ค ์ฝ์๋ก ์ด๋ํด ํด๋ผ์ฐ๋ ํ์ ์ ๋ค์ด๊ฐ๋ณด๋ฉด ์๋์ ๊ฐ์ด ํจ์ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ ๊ฒ์ ๋ณผ ์ ์์๊ฑฐ์์!.
Pod
์ด์ ์ด๊ฑธ ์ฑ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด์ ๋จผ์ ํด์ฃผ์ ์ผ ํ ๊ฑด pod์ ํด๋น ํ๋ก์ ํธ์ ์ค์นํด์ฃผ์ ์ผํฉ๋๋ค.
ํฐ๋ฏธ๋์์ ํด๋น ํ๋ก์ ํธ์ ์ด๋ํด์ "pod init" ์ ํด์ฃผ์๋ฉด ํ๋ก์ ํธ ํด๋์ podfile์ด ์๊ธธ๊ฒ๋๋ค.
podfile์ ์๋์ ๊ฐ์ด pod 'Firebase/Functions'๋ฅผ ๋ฃ์ด์ฃผ์๊ณ
ํฐ๋ฏธ๋์ pod install์ ํด์ค๋๋ค.
Storyboard
Storyboard์์ Hello World๋ฅผ ๋์ธ ๋ ์ด๋ธ์ ์ฐ๊ฒฐํด์ค๋๋ค.
ViewController
๊ทธ ๋ค์ ViewController๋ก ์ด๋ํด์ "import FirebaseFunctions" ๋ฅผ ํด์ค๋๋ค.
๊ทธ ๋ค์ ์๋์ ๊ฐ์ด ์์ฑํด์ฃผ๊ณ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์คํํด์ค๋๋ค.(์์ค์ฝ๋๋ ์๋์ ์์ต๋๋ค!)
๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ด Hello World!๊ฐ ๋์์ง๊ฒ ๋ฉ๋๋ค!!
Source Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
import UIKit
import FirebaseFunctions
class ViewController: UIViewController {
@IBOutlet weak var label: UILabel!
lazy var functions = Functions.functions()
override func viewDidLoad() {
super.viewDidLoad()
let data = ["text": "Hello World!"]
functions.httpsCallable("helloWorld").call(data) { (result, error) in
print("Function returned")
if let err = error {
print(err)
}
if let res = result {
let resdic = res.data as? [String:Any]
self.label.text = resdic!["message"] as? String
}
}
}
}
|
๋๊ธ