ํ”„๋กœ์ ํŠธ ๐Ÿ› ๏ธ/ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

Firebase RESTAPI๋กœ ๋ฐ์ดํ„ฐ 20๊ฐœ ์ด์ƒ ๋ฐ›์•„์˜ค๊ธฐ

WonderPark 2023. 6. 10. 02:25

 

๋ฌธ์ œ ์ƒํ™ฉ

Firestore SDK ๋ฅผ ๋ฒ„๋ฆฌ๊ณ  RestAPI ๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์— ์„ฑ๊ณตํ–ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ๋”๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์—ฌ๊ฐ€๋‹ˆ๊นŒ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋”ฐ.

 

์–ด๋–ค ๋ฌธ์ œ์˜€๋ƒ๋ฉด,

๋ฐ์ดํ„ฐ๊ฐ€ 20๊ฐœ ์ด์ƒ ํ•œ๋ฒˆ์— ๋ถˆ๋Ÿฌ์™€์ง€์ง€ ์•Š์•˜๋‹ค. ์ด๊ฒŒ ๋ฌด์Šจ,,,,?

 

์œผ์•™ ์ด๊ฒŒ ๋ชจ๊ผฌ ํ•˜๊ณ  get ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์•˜๋‹ค.

 

๋จผ์ € ๋ชจ๋“  ์œ ์ €์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์š”์ฒญ์„ ๋ณด๋‚ด๋ณด์•˜๋‹ค.

 

 

์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ๋Š”

 

 

์—„์ฒญ๋‚˜๊ฒŒ ๊ธด json ๋ฐ์ดํ„ฐ๋“ค๊ณผ ํ•จ๊ป˜ ๋งจ ๋งˆ์ง€๋ง‰์—

“nextPageToken” ์„ ๋ณด๋‚ด์ฃผ์—ˆ๋‹ค.

 

์›์ธ

๊ทธ๋ž˜์„œ ์—ด์‹œ๋ฏธ ๊ตฌ๊ธ€๋งํ•ด๋ณธ ๊ฒฐ๊ณผ

firebase RESTAPI ๋ฅผ ์‚ฌ์šฉํ• ๋•Œ 20๊ฐœ๊ฐ€ ๋„˜์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ๋Š”

get ์š”์ฒญ URL ์— ํŒŒ๋ผ๋ฏธํ„ฐ์— nextPageToken์„ ํ•จ๊ป˜ ๋„˜๊ฒจ์ฃผ๋ฉด ๋œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ get ์š”์ฒญ์„ ๋ณด๋‚ผ๋•Œ๋งˆ๋‹ค nextPageToken์ด ์ƒˆ๋กœ ๋ฐœ๊ธ‰๋˜๊ธฐ ๋•Œ๋ฌธ์—

๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ ์ฆ‰์‹œ ๋ฐ”๋กœ ๋‹ค์‹œ nextPageToken์„ ์‹ค์–ด์„œ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ ์š”์ฒญ์„ ๋ณด๋‚ด์•ผํ•œ๋‹ค.

 

๋งŒ์•ฝ์— ๋ฐ์ดํ„ฐ๊ฐ€ 60๊ฐœ๋ผ๋ฉด 20๊ฐœ → 20๊ฐœ → 20๊ฐœ ๋ฐ›์•„์˜ค๋Š” ์‹์œผ๋กœ ์ด 3๋ฒˆ์˜ ์š”์ฒญ์„ ๋‹ค๋‹ค๋‹ฅ ๋ณด๋‚ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜ํ•˜

 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๊ทธ๋Ÿผ ๋จผ์ € ๊ตฌํ˜„๋œ ์ฝ”๋“œ๋ฅผ ํ•œ๋ฒˆ ๋ณด์ž

 

func fetchUser(nextPageToken: String) {
        UserService.getUser(nextPageToken: nextPageToken)
            .receive(on: DispatchQueue.main)
            .sink { (completion: Subscribers.Completion<Error>) in
            } receiveValue: { (data: UserResponse) in
                self.userTemp.append(contentsOf: data.documents)
                if !(data.nextPageToken == nil) {
                    var nextPageToken : String = ""
                    nextPageToken = data.nextPageToken!
                    self.fetchUser(nextPageToken: nextPageToken)
                }else{
                    self.users = self.userTemp
                    self.userTemp.removeAll()
                    self.fetchUsersSuccess.send(data.documents)
                }
            }.store(in: &subscription)
    }

 

 

๋จผ์ € ์ด ์ฝ”๋“œ๋Š”

์œ„์˜ fetchUser ๋ฉ”์†Œ๋“œ๋Š” ๋ชจ๋“  ์œ ์ € ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค.

๋ทฐ์—์„œ ๋ชจ๋“  ์œ ์ €์˜ ์ •๋ณด ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ• ๋•Œ ์ฃผ๋กœ onAppear์—์„œ fetchUser ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

๊ทธ๋Ÿผ ์ด์ œ ์ด ์ฝ”๋“œ์˜ ๋กœ์ง์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

๋งŒ์•ฝ ์œ„์—์„œ ์ด์•ผ๊ธฐ ํ•œ๊ฒƒ์ฒ˜๋Ÿผ ์œ ์ €๋ฐ์ดํ„ฐ๊ฐ€ ์ด 60๊ฐœ๋ผ๋ฉด ์ด 3๋ฒˆ์˜ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ํ•ด์•ผํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ฒ˜์Œ View ์—์„œ fetchUser๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋นˆ๋ฌธ์ž์—ด์„ ๋„ฃ๊ณ  ํ˜ธ์ถœํ•˜๋ฉด

userVM.fetchUser(nextPageToken: "")

 

1. nextPageToken ์ด ํฌํ•จ๋œ ์ฒ˜์Œ 20๊ฐœ์˜ ์œ ์ € ์ •๋ณด ๋ฐ์ดํ„ฐ์™€ ์ด receiveValue (data: ) ์— ๋“ค์–ด์˜ฌ๊ฒƒ์ด๋‹ค.

 

2. ๊ทธ๋Ÿผ userTemp ํ”„๋กœํผํ‹ฐ์— ๋จผ์ € ๋ฐ›์•„์˜จ 20๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ ,

 

3. data ์— nextPageToken ์ด nil ์ผ ๋•Œ๊นŒ์ง€ (๋ฐฉ๊ธˆ ๋ถˆ๋Ÿฌ์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‚จ์€ ๋ฐ์ดํ„ฐ์ผ๋•Œ) !!

data ์— nextPageToken ์ด nil ์ด ์•„๋‹ˆ๋ฉด self.fetchUser(nextPageToken: nextPageToken) ์ด๋ ‡๊ฒŒ ๋„ฃ์–ด์„œ ์š”์ฒญ์„ ๋ณด๋‚ด์ค€๋‹ค.! ( == ์žฌ๊ท€ํ•จ์ˆ˜์ฃ ! )

 

4. ๊ทธ๋Ÿฌ๋‹ค nextPageToken ์ด nil์ด๋ฉด users ํ”„๋กœํผํ‹ฐ์— userTemp๋ฅผ ์ €์žฅํ•˜๊ณ 

 

5. ๋งˆ์ง€๋ง‰์œผ๋กœ userTemp ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค๋‹ˆ๋‹ค.

 

 

why?

๊ทธ๋Ÿผ ์™œ userTemp ํ”„๋กœํผํ‹ฐ๋ฅผ ๋”ฐ๋กœ ๋‘์–ด์•ผ ํ• ๊นŒ์š”?

์ฒ˜์Œ์— Temp ์—†์ด ๋ƒ…๋‹ค users ์— append ๋ฅผ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๋ณด๋‹ˆ

๋ทฐ์—์„œ ๊นœ๋นก๊ฑฐ๋ฆผ ํ˜„์ƒ์ด ๋‚˜ํƒ€๋‚˜๋”๋ผ๊ตฌ์š” ๐Ÿ˜ณ โšก๏ธ

์™œ๊ทธ๋Ÿฐ์ง€ ๊ณ ๋ฏผํ•ด๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๋‹ฌ์•„ 3๋ฒˆ ๋‹ค๋‹ค๋‹ฅ ๋ฐ›์•„์™€์„œ

๋ทฐ์™€ ์ง์ ‘ ์—ฐ๊ฒฐ๋œ users ๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธ ํ•˜๋‹ˆ๊นŒ

๋ทฐ์—์„œ๋„ ๊ทธ ๋‹ค๋‹ค๋‹ฅ ์—…๋ฐ์ดํŠธ ๋˜๋Š” ๊ฒƒ์ด ๊นœ๋นก๊ฑฐ๋ฆฌ๋ฉด์„œ ๋ณด์ด๋Š”๊ฒƒ ๊ฐ™๋”๋ผ๊ตฌ์š”!?

๊ทธ๋ž˜์„œ temp์— ๋จผ์ € ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„์ฃผ๊ณ , ๋‹ค ๋‹ด์•„์™”์„๋•Œ users ๋ฅผ ํ•œ๋ฒˆ๋งŒ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์–ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ™‚

 

๊ตฟ๊ตฟ

 

 

๋А๋‚€์ 

ํœด ์ด๊ฑฐ ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๋‹ค๊ฐ€ ๋กœ์ง์„ ์ž˜๋ชป๋งŒ๋“ค์–ด์„œ ๋ฌดํ•œ๋ฃจํ”„๋•Œ๋ฌธ์— ํŒŒ์ด์–ด๋ฒ ์ด์Šค๊ฐ€ ํ„ฐ์งˆ๋ป” ํ•˜๊ธฐ๋„ ํ–ˆ์ง€๋งŒ …. ใ…Žใ…Ž

์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์จ์„œ ์•„์ฅฌ ๋‚˜์ด์Šคํ•˜๊ฒŒ ํ•ด๊ฒฐํ•ด์„œ ๊ธฐ๋ถ„์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ตญ์€ ํ•ด๊ฒฐ ~~~ ํ–ˆ์Šต๋‹ˆ๋‹ค !!!

 

 

๊ทธ๋ž˜์„œ ์˜ค๋Š˜๋„ ํ•ด๊ฒฐ์™„ ~ ๐Ÿคฉ