๋ฌธ์ ์ํฉ
Grain ํ๋ก์ ํธ๋ ์๋ฒ๊ฐ๋ฐ์ ์์ด iOS ๊ฐ๋ฐ์๋ก๋ง ์ด๋ฃจ์ด์ง ํ์ด๋ค.
๊ทธ๋์ ์ฐ๋ฆฌ๋ Firebase ์ฌ์ฉ์ด ๋ถ๊ฐํผํ๊ณ , ์ฐ๋ฆฌ์ฑ์ ์ ์ ๋ฌด๊ฑฐ์์ ธ ๊ฐ๋ค.
Swift Pachage Manager๋ก Firebase SDK ๋ฅผ ์ฑ์ ์ถ๊ฐ ํด์ Firebase ๋ฅผ ์ฌ์ฉํ๊ฒ ๋์๋ค.
๊ทผ๋ฐ SDK๋ฅผ ์ถ๊ฐํ๊ณ ๋๋
์ธํ ๋งฅ ์ ์ ์๋ ๋๋ ์ง์ง ,,, ์ฅ๋์์ผ๋ก ๋น๋ ํ๋ฒ ์์ผ๋๊ณ ์์ฌํ๊ณ ์๋ ๋ผ ,,, ๋ผ๊ณ ๋งํ ์ ๋๋ก
๊ทธ๋งํผ ๋น๋ ์๋๊ฐ ๋๋ฌด ๋๋ ธ๋ค.
์ฝ๋๋ฅผ ์น๋ฉด ๋ฐ๋ก ๋ฐ๋ก ๋๋ฒ๊ทธ๋ ๋์ง ์์๋ค… ใ ํํ
RestAPI ๋์ ๊ธฐ
์์ฌ์ด์๊ฐ ์ฐ๋ฌผ์ ํ๋ค,,๐ฅฒ
SDK ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ ๋ง๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ด์๊ณ ,
Firebase SDK ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ RestAPI ๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋๊ฒ์ ์๊ฒ ๋์๋ค.
์ค์ค ..! RestAPI๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋น๋์๋๋ฅผ 10๋ถ์ 1 ์ ๋๋ก ๊ฐ์์ํฌ ์ ์๋ค๋ ์ ์ฉ ์ํ ์ด์ ๊ฐ ์์ง!
๋ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์์ฝ๋ค๊ณ ๋๊ปด์ก๋ ์๋ฒ ๊ฐ๋ฐ์์ ๋ถ์ฌ,, RestAPI๋ฅผ ์ฌ์ฉํด๋ณด์ง ๋ชปํ๋ ์ ..! ๐ฅฒ
๋ฐ๋ก RestAPI ์ ์ฌ์ฉ๊ฒฝํ์ ์๋ฒ ๊ฐ๋ฐ์ ์์ด๋ ํ ์ ์๋ค๋ ๊ฒ์ด ๋๋ฌด ํฅ๋ฏธ๋ก์ ๊ณ ,
์ํ์น ์์ ์์ ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์์ํ์ง๋ง ..!
์ฐ๋ฆฌ ํ์๋ค์๊ฒ๋ ๋๋ฌด ๋๋ฌด ์ข์ ๊ฐ๋ฐ ๊ฒฝํ์ด ๋ ๊ฒ์ด๋ผ๊ณ ,,, ์๊ฐํ์ต๋๋ค ใ ใ ๐
๋ฐ๋ก ๊ฐ์๋ ! ๊ฐ๋ด ์๋ค ! ๊ฐ์ฆ์~! ํ๊ณ
์ฐ๋ฆฌ๋ ์ค๋ถ์ฌ์ ๊ธธ๋ก ,, ๐ฅ๐ฅ
์ด๋ ค์ ๋ ์
Firebase ๋ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์์๋ JSON ๋ฐ์ดํฐ ํ์์ ์์ํ ๋ด๋ ค์ฃผ์ง ์์๋ค.
๋ฐ๋ก...

postman ์ ์ ์ ์ ๋ณด get ์์ฒญ์ ๋ ๋ ค ๋ฐ์์จ json ๋ฐ์ดํฐ์ด๋ค.
์ด๋ ๊ฒ ,, ํ์ ์ผ๋ก ํ๋ฒ ๊ฐ์ผ ํํ๋ก ๋ณด๋ด์ฃผ๋๋ฐ , ํนํ ๋ฐฐ์ดํ์ ์ด ์ ๋ง ,,, ๋นํฉ์ค๋ฌ์ ๋ค.
์๋ฅผ๋ค์ด myLens ์ [String] ๋ฐฐ์ด์ ๋ฐ์ผ๋ ค๋ฉด myLense์ arrayValue๋ฅผ ์ ๊ทผํด์ values์ ์ ๊ทผํด์ …
๊ทธ๋ ๋ค … ์ ๋ง ๋จธ๋ฆฌ ์ํ ๋ค …
ํด๊ฒฐ ๋ฐฉ๋ฒ
๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ์๋ ์ ์ํด๋ Model์ ์์ ํ ๋ค์๊ณ ์๋ก์ด DTO ๋ฅผ ๋ค์ ๋ง๋ค์ด์ผํ๋ค.
- ๊ทธ๋์ ์๋ก ์ฐ๋ฆฌ๊ฐ ์ ์ํ DTO ๋ ์ด๋ ๋ค
struct UserResponse: Codable {
var documents: [UserDocument]
let nextPageToken: String?
}
struct UserDocument: Codable,Hashable {
var name : String
var fields: UserFields
var createTime, updateTime: String
}
struct UserFields: Codable,Hashable {
var likedMagazineID: UserArrayKey
var id: UserStringValue
var myLens, myFilm, postedCommunityID: UserArrayKey
var nickName: UserStringValue
var introduce: UserStringValue
var following: UserArrayKey
var profileImage: UserStringValue
var recentSearch, bookmarkedCommunityID, follower, lastSearched: UserArrayKey
var email: UserStringValue
var postedMagazineID, myCamera, bookmarkedMagazineID, fcmToken: UserArrayKey
var name: UserStringValue
var blocking, blocked: UserArrayKey
enum CodingKeys: String, CodingKey {
case likedMagazineID = "likedMagazineId"
case id, myLens, myFilm, postedCommunityID, nickName, introduce, following, profileImage, recentSearch, bookmarkedCommunityID, follower, lastSearched, email, postedMagazineID, myCamera, bookmarkedMagazineID, name, fcmToken, blocking, blocked
}
}
struct UserArrayKey: Codable,Hashable {
var arrayValue: UserArrayValue
}
struct UserArrayValue: Codable,Hashable{
var values: [UserStringValue]
}
struct UserStringValue: Codable,Hashable{
var stringValue: String
}
์ด๋ฐ์์ผ๋ก …. ์์ฐ ์ง์ง ๋ง๋ค…
2. ๊ทธ ๋ค์ Firestore์ post ์ patch ์์ฒญ์ ๋๊ฒจ์ค StructuredQuery ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
์ฒ์์ ์ด๊ฑฐ ์ด๋ป๊ฒ ๋ง๋ค์ด์ผ ํ๋๊ฑฐ์ง,, ํ๋๋ฐ
get ์์ฒญ์์ ๋ ๋ผ์ค๋ json ํํ ๊ทธ๋๋ก ๋ง๋ค์ด์ฃผ๋ฉด ๋๋๋ผ๊ตฌ์ง ใ ใ ํํ
ํ ์จ ํ๋ ํ๋ ค์ ์ ์๋์ง๋ง 100๋ฒ์ฏค ํ๊ฒ๊ฐ๊ธฐ๋,, ๐คช
return
"""
{
"fields": {
"follower": {
"arrayValue": {
"values": [
{
"stringValue": "\(follower)"
}
]
}
},
"fcmToken": {
"arrayValue": {
"values": [
{
"stringValue": "\(fcmToken)"
}
]
}
},
"profileImage": {
"stringValue": "\(profileImage)"
},
"blocked": {
"arrayValue": {
"values": [
{
"stringValue": "\(blocked)"
}
]
}
}
}
}
""".data(using: .utf8)
}
์ด๋ฐ์์ผ๋ก!
๋๋ฌด ๊ธธ์ด์ ์ฝ๋๋ฅผ ์กฐ๊ธ ์งค๋์ต๋๋ค :)
์ ์ด์ ๊ธฐ๋ณธ ์ธํ ์ ๋๋ฌ๋๋ฐ ,, SDK๋ฅผ ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ฑท์ด๋ด๊ณ
URLSession ์ ์ฌ์ฉํ ๋ฉ์๋๋ฅผ ๋ค์ ๊ตฌ์ฑํด์ ๋คํธ์ํฌ ๋ ์ด์ด๋ฅผ ๊ตฌํํด์ผํ๋๋ฐ
์ด๊ฒ์ ๋ค์ํธ์ ์ ๋ฆฌํด๋ณด๊ฒ ์จ!
๋๋์
RestAPI ๋ฅผ ๋์ ํ๋ ์กฐ๋ ์ฐ๋ฆฌ์กฐ๋ฐ์ ์์๊ณ ,, ๋ฌด๋ชจํ ๋์ ์ธ๊ฐ… ๊ดํ ํ์๊ตฌ๋ฌ๋ ๋ผ๊ณ ๋ ์๊ฐํ์ง๋ง
๊ทธ๋๋ ํด๊ฒฐํ ์ง๊ธ์ ๋๋ฌด๋๋ฌด ๋ฟ๋ฏํ๊ณ , ํ์ด ๋ ๋ฒจ์ด์๋ Firestore RestAPI๋ฅผ ์ฌ์ฉํด๋ณด๋ฉด์
RestAPI ๋ค๋ฃจ๊ธฐ์ ๋ฌ์ธ์ด ๋ ๊ฒ ๊ฐ์๋๋ค… ใ ใ ๋ค๋ค ๋๋ฌด๋๋ฌด ๊ณ ์๋ง์์จ ~~
์ค๋๋ ํด๊ฒฐ์~ ๐ค