๐ŸŽ Apple/Swift

[Swift] Firestore์—์„œ Document Id๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์–ด์š”..

JINiOS 2024. 1. 22. 17:12
728x90

 

ํ•  ์ผ์ด ์‚ฐ๋”๋ฏธ์˜€๋˜...์–ด๋Š ๋‚ .. ์Šคํ”„๋ฆฐํŠธ ํšŒ๊ณ ๋ฅผ ํ•˜๋Š” ๋‚ ์ด์—ˆ๋‹ค..

ํŒ€์›์ด ๋งํ–ˆ๋‹ค,,"์ „์ฒด ์งˆ๋ฌธ(Data)์„ ํŒŒ์ด์–ด์Šคํ† ์–ด์— ์—…๋ฐ์ดํŠธํ•˜๋Š”๋ฐ, Document Id๊ฐ€ ๋žœ๋ค๊ฐ’์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋์–ด์š”." 

 

๊ธฐ์กด์—๋Š” ๋ฌธ์„œ ์•„์ด๋””๊ฐ€ ๋„ํ๋จผํŠธ ๋‚ด๋ถ€์˜ ๊ฐ’(์ •์ˆ˜)๋กœ ๋˜์–ด์žˆ์–ด์„œ ์ด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ๋’ค Id๋กœ ์ •๋ ฌ์„ ํ•ด์„œ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ํ™”๋ฉด์„ ๊ทธ๋ฆฌ๋Š” ๋กœ์ง์ด ์žˆ์—ˆ๋‹ค. 

 

๋‚˜๋Š” ์ƒ๊ฐํ–ˆ๋‹ค,,, "์—ฅ ๋ถ„๋ช… ์•ฑ์— ๋™์ž‘์•ˆํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์„ํ…๋ฐ,," ํ•˜๊ณ  ๋ฐ”๋กœ ์•ฑ์„ ์ผœ์„œ ํ™•์ธํ•ด๋ณด๋‹ˆ "์ถ”์ฒœ์งˆ๋ฌธ"๊ธฐ๋Šฅ์ด ๋™์ž‘ํ•˜์ง€ ์•Š๊ณ , ๋นˆ ํ™”๋ฉด์œผ๋กœ ๋‚ด๋น„๊ฒŒ์ด์…˜๋˜๋Š” ์ด์“”,,๋ฅผ ํ™•์ธํ–ˆ๋‹ค.

 

ํšŒ๊ณ , ํšŒ์˜๊ฐ€ ๋ชจ๋‘ ๋๋‚˜๊ธฐ ์ „,

์œ ์ €๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ˆ ๋กœ์ง์„ ์ˆ˜์ •ํ•ด ๋น ๋ฅด๊ฒŒ ๋ฆด๋ฆฌ์ฆˆ ํ•˜๊ฑฐ๋‚˜, ํŒŒ์ด์–ด์Šคํ† ์–ด ๋””๋น„๋ฅผ ์ˆ˜์ •ํ•ด์„œ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์–˜๊ธฐํ–ˆ๋‹ค. 

 

์–ด์ฉŒ๋‹ค ๋ณด๋‹ˆ ๋‚ด๊ฐ€ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‚œ ํ•  ์ผ ๋งŽ์‘๋ฐ,,,,,,,,,,,,,,,,,,,,,,,,,

ํšŒ์˜ ๋๋‚˜์ž๋งˆ์ž ์ฐพ์•„๋ณด๊ณ  ํ•ด๊ฒฐํ•œ ๊ณผ์ •์„ ์งง๊ฒŒ ๋‚จ๊ธฐ๋ ค๊ณ  ํ•œ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ค„๋ณด์ง€ ๋ชปํ–ˆ๋˜ ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ด ๊ธ€์„ ๋ณด๊ณ  ์ข€ ๋” ์ผ์ฐ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ - !

 

์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ธ€์„ ์ฝ๋Š”๋‹ค๋ฉด ๊ผญ ํ•œ ๋ฒˆ ์ •๋…ํ•œ ์ดํ›„ ์ ์šฉํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค!

 


 

์ฒ˜์Œ์—” ์–ด๋–ป๊ฒŒ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณค๋Š”์ง€ ํ•œ ๋ฒˆ ๋ฌผ์–ด๋ณธ ๋‹ค์Œ์—, ๊ทธ ๊ณผ์ •์—์„œ ID ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ คํ–ˆ๋‹ค.

๊ทผ๋ฐ ์ด๊ฑด ์ด๋ฏธ ํ•ด๋ดค์„ ๊ฒƒ ๊ฐ™์•„์„œ + ๋ฐค์ด์–ด์„œ ๋‹ต๋ณ€์ด ๋Šฆ์„๊นŒ๋ด + ๋‚ด ์„ ์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•ด ํ˜ผ์ž ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค.

 

๐Ÿ’ฌ  ๋ณ€๊ฒฝ ๋‚ด์šฉ ( AS-IS, TO-BE)

ํŒŒ์ด์–ด์Šคํ† ์–ด๋Š” Document Id๊ฐ€ ๊ณ ์œ  ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์„ฑํ•œ ์ดํ›„์— ํŒŒ์ด์–ด๋ฒ ์ด์Šค์˜ ์ฝ˜์†”์—์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋‹ค..

๋Œ€์‹  Document๋ฅผ ์›ํ•˜๋Š” ์•„์ด๋””๋กœ ๋ณต์ œํ•˜๊ณ , ๊ธฐ์กด Document๋ฅผ ์ง€์›Œ์„œ ์•„์ด๋””๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค...!

 

์ด ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ , ์ด์ „์— ์—ฐ์Šต์‚ผ์•„ ๋งŒ๋“ค์—ˆ๋˜ ๋ฉ”์‹ ์ € ํ”„๋กœ์ ํŠธ์—์„œ ๋จผ์ € ํ…Œ์ŠคํŠธ ํ•ด๋ดค๋‹ค.

user ์ปฌ๋ ‰์…˜์— ์žˆ๋Š” ๋ฌธ์„œ์˜ ์•„์ด๋””๋ฅผ ๋žœ๋ค๊ฐ’์ด ์•„๋‹Œ ํ•ด๋‹น ๋ฌธ์„œ์˜ emailํ•„๋“œ ๊ฐ’์œผ๋กœ ๋ฐ”๊พผ user ์ปฌ๋ ‰์…˜์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•  ๊ฒƒ์ด๋‹ค!

AS-IS

 

TO-BE

 

 

๐Ÿ’ฌ  ์—…๋ฐ์ดํŠธ ์ˆœ์„œ

์—…๋ฐ์ดํŠธ ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰ํ–ˆ๋‹ค.

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ ์‹ค์ œ๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ณ  ์žˆ๋Š” ์ปฌ๋ ‰์…˜ ๋ช…์ด "user"์ผ ๊ฒฝ์šฐ,

 

1. ํ•˜๋‹จ์˜ ๋ฉ”์„œ๋“œ๋กœ "user"์ปฌ๋ ‰์…˜์„ ๋ฐ”ํƒ•์œผ๋กœ "userWithId"๋กœ ์ƒ์„ฑ

2. Firestore ์ฝ˜์†”์—์„œ "userWithId" ์ƒ์„ฑ ํ™•์ธ

2. Firestore ์ฝ˜์†”์—์„œ "user" ์ปฌ๋ ‰์…˜ ์‚ญ์ œ

3. ํ•˜๋‹จ์˜ ๋ฉ”์„œ๋“œ๋กœ "userWithId"์ปฌ๋ ‰์…˜์„ ๋ฐ”ํƒ•์œผ๋กœ "user"๋กœ ์ƒ์„ฑ

 

 

๐Ÿ’ฌ  ํ™œ์šฉํ•œ ๋ฉ”์„œ๋“œ

๋‚˜๋Š” ์•„๋ž˜์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ collectionOld์™€, collectionNew๋ฅผ ์ž˜ ์ ์–ด์ฃผ๊ณ ,

ํ•˜๋‹จ์˜ ๋ฐ์ดํ„ฐ๊ฐ’ ๊ฐ€์ ธ์˜ค๋Š” ๋ถ€๋ถ„์—์„œ ํ•„๋“œ ํƒ€์ž…์„ ์ž˜ ํ™•์ธํ•ด์„œ ์บ์ŠคํŒ…ํ•ด์ฃผ์ž !-!

ํ•„๋“œ ํƒ€์ž…์ด String์ด ์•„๋‹ˆ๋ผ๋ฉด ๊ทธ ์ฝ”๋“œ ํ•˜๋‹จ์˜ ๋„ํ๋จผํŠธ์— Id๋ฅผ ๋ถ€์—ฌํ•  ๋•Œ String์œผ๋กœ ์ž˜ ๋ณ€ํ™˜์‹œ์ผœ์ฃผ์ž!!

 

 func makeNewWithId() {
    FirebaseApp.configure()
    
    // Firestore ์ธ์Šคํ„ด์Šค ๊ฐ€์ ธ์˜ค๊ธฐ
    let db = Firestore.firestore()
    
    // collectionOld์™€ collectionNew์˜ ์ด๋ฆ„ ์ •์˜
    let collectionOld = "user" // ๐Ÿ› ๏ธ ๋ณ€๊ฒฝ ๐Ÿ› ๏ธ
    let collectionNew = "usersWithEmail" // ๐Ÿ› ๏ธ ๋ณ€๊ฒฝ ๐Ÿ› ๏ธ
    
    // collectionOld์—์„œ ๋ฌธ์„œ ๊ฐ€์ ธ์˜ค๊ธฐ
    db.collection(collectionOld).getDocuments { (querySnapshot, error) in
      if let error = error {
        print("Error getting documents: \(error)")
      } else {
        // ๊ฐ ๋ฌธ์„œ์— ๋Œ€ํ•ด ๋ฐ˜๋ณต
        for document in querySnapshot!.documents {
          // ๊ธฐ์กด ๋ฌธ์„œ ๋ฐ์ดํ„ฐ
          let data = document.data()

          // "email" ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ
          if let emailId = data["email"] as? String { // ๐Ÿ› ๏ธ ๋ณ€๊ฒฝ ๐Ÿ› ๏ธ
            // ์ƒˆ๋กœ์šด collectionNew์— ๋ฌธ์„œ ์ถ”๊ฐ€
            db.collection(collectionNew).document(emailId).setData(data) { error in // ๐Ÿ› ๏ธ ๋ณ€๊ฒฝ ๐Ÿ› ๏ธ
              if let error = error {
                print("Error adding document to collectionNew: \(error)")
              } else {
                print("Document added to collectionNew with ID: \(emailId)")
              }
            }
          }
        }
      }
    }
  }

 

 

 

๐Ÿ’ฌ  ์ฃผ์˜์‚ฌํ•ญ

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ด ๋•Œ ํ•„๋“œ์˜ ํƒ€์ž…์„ ํ™•์ธํ•ด์„œ ํƒ€์ž…์„ ์ž˜ ์ ์–ด์ฃผ์–ด์•ผํ•œ๋‹ค!!

์ด ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ๋ณ€๊ฒฝ์ด ์ž˜ ๋ผ์„œ ๋ณธ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๋ คํ–ˆ๋Š”๋ฐ, ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์ด ์ถ”๊ฐ€๊ฐ€ ์•ˆ๋˜์–ด์„œ,, ๋‹นํ™ฉํ–ˆ์—ˆ๋”ฐ,,,

์™œ ์•ˆ๋ ๊นŒ,, ๋””๋ฒ„๊น…ํ•˜๋ฉด์„œ ํ™•์ธํ•ด๋ณด๋Š”๋ฐ,, ์ž˜ ๋“ค์–ด์˜ค๋Š”๋ฐ email ๊ฑธ๋ ค์ง€๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ ,

ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ id๋กœ ํ•˜๋ คํ–ˆ๋˜ ํ•„๋“œ ๊ฐ’์€ String์ด์—ˆ์ง€๋งŒ, ๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ id๋กœ ํ•˜๋ คํ–ˆ๋˜ ํ•„๋“œ ๊ฐ’์€ Int์˜€๋˜ ๊ฒƒ์ด๋‹ค!,,,,,, 

๊ทธ๋ž˜์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์„œ ๋ณธ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ–ˆ๋‹ค!

 if let questionId = data["q_id"] as? Int {
	// ์ƒˆ๋กœ์šด ์ปฌ๋ ‰์…˜์— ๋ฌธ์„œ ์ถ”๊ฐ€
	db.collection(collectionNew).document(String(questionId)).setData(data) { error in
		if let error = error {
			print("Error adding document to collectionNew: \(error)")
		} else {
			print("Document added to collectionNew with ID: \(questionId)")
		}
	}
}

 

์ด์™ธ์— ๊ณ ๋ คํ–ˆ๋˜ ๋ถ€๋ถ„๊ณผ ๋ณ€๊ฒฝ์ด ์ ์šฉ๋˜์ง€ ์•Š๋Š” ์ด์œ , ์ฃผ์˜ํ–ˆ์œผ๋ฉด ํ•˜๋Š” ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค!!

* ๋ณธ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜๊ธฐ ์ „์— ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ์—์„œ ๋จผ์ € ํ•ด๋ณด๊ธธ !

* ํƒ€์ž… ํ™•์ธ ์ž˜ ํ•˜๊ธฐ !

* ํŒŒ์ด์–ด์Šคํ† ์–ด ๊ทœ์น™ ํ™•์ธํ•˜๊ธฐ ! ํ™•์ธํ•ด์„œ ์ง€๊ธˆ ์ƒํ™ฉ์— ์–ด๊ธ‹๋‚˜๋Š” ๊ทœ์น™์—์„œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง„ ์•Š์•˜๋‚˜ ํ™•์ธํ•˜์‹œ๊ธธ--! 

* ํŒŒ์ด์–ด์Šคํ† ์–ด ์ฝ๊ธฐ,์“ฐ๊ธฐ ํ•˜๋ฃจ ์‚ฌ์šฉ๋Ÿ‰ ์ž˜ ํ™•์ธํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ, ์ ์šฉํ•˜๊ธฐ!

 

 


 

 

๋ฌผ๋ก  ์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•(?)์„ ๊นƒํ—™ ์œ„ํ‚ค์— ์˜ฌ๋ ค๋†“๊ธด ํ•˜๊ฒ ์ง€๋งŒ,,

๋‹ค์Œ์— DB ์—…๋ฐ์ดํŠธํ•  ์ƒํ™ฉ์ด ์žˆ์„ ๋•Œ๋Š” ์ถฉ๋ถ„ํžˆ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์‹ค์ œ DB์— ์ ์šฉํ•ด๋‹ฌ๋ผ๊ณ  ๋ถ€ํƒํ•ด์•ผ๊ฒ ๋‹ค,, 

728x90