Firebase Data Connect 클라이언트 SDK를 사용하면 Firebase 앱에서 직접 서버 측 쿼리와 변형을 호출할 수 있습니다. Data Connect 서비스에 배포하는 스키마, 쿼리, 변형을 설계할 때 동시에 맞춤 클라이언트 SDK를 생성합니다. 그런 다음 이 SDK의 메서드를 클라이언트 로직에 통합합니다.
다른 곳에서 언급했듯이 Data Connect 쿼리와 변형은 클라이언트 코드에서 제출되지 않으며 서버에서 실행됩니다. 대신 배포 시 Data Connect 작업은 Cloud Functions와 같이 서버에 저장됩니다. 즉, 기존 사용자를 손상시키지 않도록(예: 이전 앱 버전) 상응하는 클라이언트 측 변경사항을 배포해야 합니다.
그렇기 때문에 Data Connect는 서버에 배포된 스키마, 쿼리, 변형의 프로토타입을 만들 수 있는 개발자 환경과 도구를 제공합니다. 또한 프로토타입을 만드는 동안 클라이언트 측 SDK를 자동으로 생성합니다.
서비스 및 클라이언트 앱 업데이트를 반복한 후에는 서버 측 업데이트와 클라이언트 측 업데이트를 모두 배포할 수 있습니다.
Swift SDK 생성
대부분의 Firebase 프로젝트와 마찬가지로 Firebase Data Connect 클라이언트 코드 작업은 로컬 프로젝트 디렉터리에서 진행됩니다. Data Connect VS Code 확장 프로그램과 Firebase CLI는 모두 클라이언트 코드를 생성하고 관리하는 데 중요한 로컬 도구입니다.
SDK 생성 옵션은 프로젝트를 초기화할 때 생성된 dataconnect.yaml
파일의 여러 항목에 연결됩니다.
SDK 생성 초기화
connector.yaml
에서 outputDir
, package
, 웹 SDK의 경우 packageJsonDir
를 추가합니다.
connectorId: "movies"
generate:
swiftSdk:
outputDir: "../movies-generated"
package: "Movies"
outputDir
는 생성된 SDK를 출력할 위치를 지정합니다. 지정하지 않으면 커넥터 폴더가 기본 출력 디렉터리로 사용됩니다.
package
은 생성될 패키지의 이름을 지정합니다. 생성기는 패키지 이름으로 폴더를 만들고 Package.swift
및 생성된 코드를 포함합니다.
observablePublisher
(선택사항) 쿼리 참조에 사용할 Observable 게시자를 지정합니다. 가능한 값은 observableMacro
(iOS 17 이상) 및 observableObject
(iOS 17 이전)입니다. 지정하지 않으면 기본값은 observableMacro
입니다.
프로토타입 제작 중에 SDK 업데이트
Data Connect VS Code 확장 프로그램 및 Data Connect 에뮬레이터로 대화형 프로토타입을 제작하는 경우 스키마, 쿼리, 변형을 정의하는 .gql
파일을 수정하는 동안 SDK 소스 파일이 자동으로 생성되고 업데이트됩니다. 이 기능은 핫 (재)로드 워크플로에서 유용한 기능이 될 수 있습니다.
.gql
업데이트에 워치를 설정하고 SDK 소스를 자동으로 업데이트할 수 있습니다.
또는 .gql 파일이 변경될 때마다 CLI를 사용하여 SDK를 재생성할 수 있습니다.
firebase dataconnect:sdk:generate --watch
통합 및 프로덕션 출시용 SDK 생성
CI 테스트를 위해 제출할 프로젝트 소스를 준비하는 등의 시나리오에서는 Firebase CLI를 호출하여 일괄 업데이트할 수 있습니다.
이러한 경우에는 firebase dataconnect:sdk:generate
를 사용하세요.
클라이언트 코드 설정
Data Connect 및 생성된 SDK를 사용하도록 클라이언트 코드를 설정하려면 먼저 표준 Firebase 설정 안내를 따르세요.
그런 다음 Xcode를 사용하여 앱 작업공간을 엽니다.
상단 탐색 메뉴에서 File > Add Package Dependencies > Add Local을 선택하고 생성된 Package.swift
소스 파일이 포함된 폴더를 선택합니다.
Data Connect iOS SDK 초기화
데이터 연결을 설정하는 데 사용한 정보를 사용하여 Data Connect 인스턴스를 초기화합니다 (모두 Firebase 콘솔의 데이터 연결 탭에서 확인 가능).
커넥터 인스턴스 가져오기
커넥터의 코드는 Data Connect 에뮬레이터에서 생성됩니다. 커넥터 이름이 movies
이고 패키지가 movies
인 경우(connector.yaml
에 지정됨) 다음을 호출하여 커넥터 객체를 가져옵니다.
let connector = DataConnect.moviesConnector
쿼리 및 변형 실행
커넥터 객체를 사용하면 GraphQL 소스 코드에 정의된 대로 쿼리와 변형을 실행할 수 있습니다. 커넥터에 다음 작업이 정의되어 있다고 가정해 보겠습니다.
mutation createMovie($title: String!, $releaseYear: Int!, $genre: String!, $rating: Int!) {
movie_insert(data: {
title: $title
releaseYear: $releaseYear
genre: $genre
rating: $rating
})
}
query getMovieByKey($key: Movie_Key!) {
movie(key: $key) { id title }
}
query listMoviesByGenre($genre: String!) {
movies(where: {genre: {eq: $genre}}) {
id
title
}
}
그런 다음 다음과 같이 영화를 만들 수 있습니다.
let mutationResult = try await connector.createMovieMutation.execute(
title: "Empire Strikes Back",
releaseYear: 1980,
genre: "Sci-Fi",
rating: 5)
print("Movie ID: \(mutationResult.data.movie_insert.id)")
영화를 가져오려면 쿼리 참조를 사용합니다. 모든 쿼리 참조는 관찰 가능한 게시자입니다. 구성된 게시자에 따라 (connector.yaml)
참고) @Observable
매크로 (iOS 17 이상)를 지원하거나 ObservableObject
프로토콜을 구현합니다. 지정하지 않으면 기본값은 iOS 17 이상에서 지원되는 @Observable
매크로입니다.
SwiftUI 뷰에서 쿼리 참조의 게시된 data
변수를 사용하여 쿼리 결과를 바인딩하고 쿼리의 execute()
메서드를 호출하여 데이터를 업데이트할 수 있습니다. data
변수는 GQL 쿼리 정의에서 정의된 데이터 모양과 일치합니다.
검색된 모든 결과는 Decodable
프로토콜을 준수합니다. GQL 가져오기에 객체의 기본 키를 포함한 경우 객체도 Identifiable
이므로 반복자에 사용할 수 있습니다.
struct ListMovieView: View {
@StateObject private var queryRef = connector.listMoviesByGenreQuery.ref(genre: "Sci-Fi")
var body: some View {
VStack {
Button {
Task {
do {
try await refresh()
} catch {
print("Failed to refresh: \(error)")
}
}
} label: {
Text("Refresh")
}
// use the query results in a view
ForEach(queryRef.data?.movies ?? [], id: \.self.id) { movie in
Text(movie.title)
}
}
}
@MainActor
func refresh() async throws {
_ = try await queryRef.execute()
}
}
쿼리는 원샷 실행도 지원합니다.
let resultData = try await DataConnect.moviesConnector.listMoviesByGenreQuery.execute(genre: "Sci-Fi")
iOS 애플리케이션 프로토타입 제작 및 테스트
로컬 에뮬레이터를 사용하도록 클라이언트 계측
Data Connect VS Code 확장 프로그램 또는 CLI에서 Data Connect 에뮬레이터를 사용할 수 있습니다.
에뮬레이터에 연결하도록 앱을 계측하는 방법은 두 시나리오 모두 동일합니다.
let connector = DataConnect.moviesConnector
// Connect to the emulator on "127.0.0.1:9399"
connector.useEmulator()
// (alternatively) if you're running your emulator on non-default port:
connector.useEmulator(port: 9999)
// Make calls from your app
Data Connect SDK의 데이터 유형
Data Connect 서버는 일반적인 GraphQL 데이터 유형과 맞춤 GraphQL 데이터 유형을 나타냅니다. 이는 SDK에서 다음과 같이 표시됩니다.
데이터 연결 유형 | Swift |
---|---|
문자열 | 문자열 |
정수 | 정수 |
부동 소수점 수 | Double |
부울 | Bool |
UUID : 범용 고유 식별자 | UUID : 범용 고유 식별자 |
날짜 | FirebaseDataConnect.LocalDate |
타임스탬프 | FirebaseCore.Timestamp |
Int64 | Int64 |
모두 | FirebaseDataConnect.AnyValue |