Focus On Develop ๐ŸคŸ๐ŸคŸ

[Swift] Cloud Firestore(1) ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ณธ๋ฌธ

iOS [Swift]/๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํžˆ!

[Swift] Cloud Firestore(1) ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

๋ˆ„๋ฆฌ๋‹ฌ์ดํ‹€ 2021. 2. 8. 23:30

์˜ค๋Š˜์€ Google Firebase Cloud Firestore์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค!

์š”๊ธฐ ๋“ค์–ด๊ฐ€์„œ ๊ตฌ๊ธ€๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๊ณ  ๋‘˜๋Ÿฌ๋ณด์‹œ๊ธธ!! ใ…Žใ…Žใ…Ž

console.firebase.google.com/

 

๋กœ๊ทธ์ธ - Google ๊ณ„์ •

ํ•˜๋‚˜์˜ ๊ณ„์ •์œผ๋กœ ๋ชจ๋“  Google ์„œ๋น„์Šค๋ฅผ Google ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

accounts.google.com

์šฐ๋ฆฌ๊ฐ€ ์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๋กœ์ปฌ ์ €์žฅ์†Œ์ธ UserDefault, CoreData๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์ œ์™ธํ•˜๊ณ , ๋ถ„๋ช…ํžˆ ์›๊ฒฉ Database๊ฐ€ ํ•„์š”ํ•˜๊ฒ ์ฃ ?

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์นด์นด์˜คํ†ก ์ฑ„ํŒ…์ด๋‚˜, ๊ณต์œ ๋ฌธ์„œํ•จ ๋“ฑ์„ ์‚ฌ์šฉ์ž A์™€ B๊ฐ€ ์„œ๋กœ ๋™๊ธฐํ™”๋˜๋Š” ์•ฑํ™”๋ฉด์„ ๋ด์•ผํ•œ๋‹ค๋ฉด, ๋กœ์ปฌ ์ €์žฅ์†Œ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋ถ„๋ช…ํžˆ ๋ถ€์กฑํ•˜๊ฒ ์ฃ ! A๊ฐ€ ์ฑ„ํŒ…์„ ๋ณด๋‚ด๋ฉด ์–ด๋”˜๊ฐ€ Database์— ๋‚ด์šฉ์ด ์ €์žฅ๋˜๊ณ , ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์„œ B๋Š” A๊ฐ€๋ณด๋‚ธ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์šฐ๋ฆฌ๋Š” ์„œ๋ฒ„์˜ Database๋ฅผ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๋ฐ... ๐Ÿ˜ ๋ˆ„๊ตฐ๊ฐ€๋Š” ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ๋ˆ„๊ตฐ๊ฐ€๋Š” DB๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ๋˜ ๋ˆ„๊ตฐ๊ฐ€๋Š” API๊ฐ™์€ WebService๋ฅผ ๊ฐœ๋ฐœํ•ด์ค˜์•ผ, ์•ฑ์—์„œ๋Š” WebService์˜ End-point๋ฅผ ํ˜ธ์ถœํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ์š”~!

์–ธ์ œ ํ•„์š”ํ•œ Backend ๊ธฐ์ˆ ์Šคํƒ์„ ๋ชจ๋‘ ์ตํ˜€์„œ ๊ตฌ์„ฑํ•˜๊ณ  ์•ฑ์„ ๋งŒ๋“ค๊ฒ ์–ด์š” ใ… ใ…  

๊ทธ๋Ÿฐ๋ฐ! ์ด B/E์˜ ๋ชจ๋“ ๊ฑธ ์ œ๊ณตํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๊ฐ€ ๋ฐ”๋กœ๋ฐ”๋กœ Firebase์ž…๋‹ˆ๋‹ค!! 

 

์ €๋Š” ์˜ˆ์ „์— Firebase๋ฅผ ํ†ตํ•ด Realtime Database๋ฅผ ์‚ฌ์šฉํ•ด์„œ Demo Project๋ฅผ ์—ฐ์Šตํ•ด๋ณธ์ ์ด ์žˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ์ด์ œ๋Š” Cloud ์‹œ๋Œ€์ธ๋งŒํผ!! ใ…‹ใ…‹ใ…‹ ์‹œ๋Œ€์— ๋งž๊ฒŒ Cloud๊ธฐ๋ฐ˜์˜ Database์ธ Firestore์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋†“๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์„œ ํ•œ๋ฒˆ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜‡


Firestore ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์ด๋‚˜ cocoapods ์„ค์น˜ํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค๋ฃจ์ง€ ์•Š์„๊บผ์—์šง ๐Ÿ˜ 

cocoapods ์‹œ์ž‘ํ•˜๊ธฐ ๐Ÿ‘‰  guides.cocoapods.org/using/getting-started.html

firestore ์‹œ์ž‘ํ•˜๊ธฐ ๐Ÿ‘‰  firebase.google.com/docs/firestore/quickstart

 

 

Firestore Data ๊ตฌ์กฐ

Firestore๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ณดํ†ต ์•Œ๊ณ  ์žˆ๋˜ DB์™€ ์•ฝ๊ฐ„ ์ €์žฅ๋˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ํŠน์ดํ•ด์š”.

๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์„ Collection์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , Collection ์•ˆ์—๋Š” Document ๋˜๋Š” Sub Collection์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์š”. Documet ์•ˆ์—๋Š” field, value ํ˜•ํƒœ๋กœ ์šฐ๋ฆฌ๊ฐ€ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ์‹ค์ œ๋กœ ์ €์žฅ๋˜๊ฒŒ ๋œ๋‹ต๋‹ˆ๋‹ค!

ํ•˜๋‚˜์˜ Collection์—์„œ Document์ด๋ฆ„์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ, Collection์ด ๋‹ค๋ฅด๋ฉด Document ์ด๋ฆ„์ด ์ค‘๋ณต๋˜๋„ ์ƒ๊ด€์—†์–ด์š”. ์ €์žฅ๋  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ์•„๋ž˜์ฒ˜๋Ÿผ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์›ฌ๋งŒํ•œ Type์€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DocumentA์— String ํƒ€์ž…์˜ nickname, Map ํƒ€์ž…์˜ name์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ์„ฑ๋ ๊ฑฐ์—์š”.

์ž ๊น ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋Š”๋ฐ, Document ํ•˜์œ„์— Collection์ด ๋งŒ๋“ค์–ด์ง€๋ฉด ์ด๊ฑธ Sub Collection์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด DocumentA ์•ˆ์— Collection X, Y๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ Collection > Document > Collection ... ์˜ ๊นŠ์ด๋Š” 100Depth๊นŒ์ง€๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! (๊ตณ์ด ์“ธ ์ผ์ด ์žˆ์„์ง€๋Š”.. ์ง€๊ธˆ์œผ๋กœ์จ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋„ค์š” ๐Ÿ˜‚๐Ÿ˜‚)

 

 

Firestore Console์—์„œ ๋ฐ์ดํ„ฐ ํ•œ๋ฒˆ ๋„ฃ์–ด๋ณด๊ธฐ!

์œ„์—์„œ ์ด๋ก ์ ์œผ๋กœ Collection, Document ๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ–ˆ๋Š”๋ฐ, ์•„๋ฌด๋ž˜๋„ ์ง์ ‘ ํ•ด๋ณด๋ฉด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด๋ณด๋Š”๊ฒŒ ์ดํ•ด๊ฐ€ ๋น ๋ฅด๊ฒ ์ฃ !! ์ด๋ ‡๊ฒŒ Firestore๋ฅผ ๋งŒ๋“ค๊ณ , Collection๊ณผ Document, Data๋ฅผ ๋„ฃ์–ด๋ดค์–ด์š”! Collection b > document a > sub collection or data๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ฃ ~~? ๐Ÿ‘๐Ÿ‘ ์—ฌ๊ธฐ์„œ ์‹ ๊ธฐํ•œ ์ ์€, array๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์„ž์—ฌ๋„ ์ƒ๊ด€์—†๋‹ต๋‹ˆ๋‹ค~!

์ด๋ ‡๊ฒŒ list๋ผ๋Š” array๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ์•ˆ์— string, number, map ํƒ€์ž… ๋ฐ์ดํ„ฐ๋„ ๋„ฃ์–ด๋ดค์–ด์š”. ์‹ ๊ธฐํ•œ๊ฒŒ array ์•ˆ์— ๋ฐ”๋กœ array๋ฅผ ๋„ฃ๋Š” ๊ฑด ๋ถˆ๊ฐ€๋Šฅํ•œ๋ฐ, map์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— array๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ€๋Šฅํ•˜๋”๋ผ๊ตฌ์š” ๐Ÿ˜์ด๋ ‡๊ฒŒ Firestore๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์–ธ์  ๊ฐ€ Database๋„ ์„ค๊ณ„ํ•˜๋Š” ์ˆœ๊ฐ„์ด ์˜ฌํ…๋ฐ, ์ฐธ๊ณ ํ•ด๋‘๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”~~

 

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ์‹ค์ œ๋กœ Firestore๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ๊ฐ„๋‹จํžˆ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š”์ง€ ๊ตฌ์กฐ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค~!

์ด์ œ ์‹ค์ œ๋กœ XCode์—์„œ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ CRUDํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ•œ๋ฒˆ ์•Œ์•„๋ณผ๊ฒŒ์š”!! ๐Ÿ‘๐Ÿ‘

 

๐Ÿ‘‰  2021/02/10 - [๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ] - [Swift] Cloud Firestore(2) ์‹ค์Šตํ•ด๋ณด๊ธฐ

 

 

'iOS [Swift] > ๊ธฐ์ดˆ๋ฅผ ํƒ„ํƒ„ํžˆ!' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] CodingKey  (0) 2021.02.26
[Swift] Cloud Firestore(2) ์‹ค์Šตํ•ด๋ณด๊ธฐ  (0) 2021.02.10
[Swift] ScrollView + PageControl  (0) 2021.02.05
[Swift] CGRect, CGSize, CGPoint  (0) 2021.02.05
[Swift] Storyboard vs Programmatic UI  (0) 2021.02.05
Comments