본문으로 건너뛰기

서버 사이드 Swift를 위한 Google Cloud 공식 SDK 공개

Introducing the Server Side Cloud Swift SDK | Google Cloud Blog

cloud.google.com

핵심 요약

  1. Google Cloud가 Swift 6.2 이상과 Swift NIO, HTTP/2, gRPC를 기반으로 한 서버 사이드용 공식 API Client Libraries for Swift를 공개했다.
  2. google-cloud-swift는 Cloud Storage, AI, IAM을 비롯한 100개 이상의 Google Cloud 서비스에 접근하며 Cloud Run, GKE, Compute Engine에 배포할 수 있다.
  3. Swift Package Manager로 서비스별 패키지를 추가하고 기본 자격 증명이나 API 키를 설정하면 async/await와 비동기 시퀀스를 사용하는 클라이언트를 구성할 수 있다.

도입

Google Cloud가 서버, 컨테이너, DevOps 자동화를 위한 공식 Swift SDK인 google-cloud-swift를 공개했다. Swift 6.2 이상의 컴파일 타임 동시성 검사와 Sendable 기반 데이터 경쟁 검사를 활용하며, 네트워크 요청은 Swift NIO의 비차단 이벤트 루프와 HTTP/2, gRPC를 통해 처리한다. macOS와 Linux에서 개발할 수 있고 Linux 실행 파일을 Cloud Run, GKE, Compute Engine에 배포할 수 있다.

상세 요약

서버 사이드 Swift를 겨냥한 SDK

google-cloud-swift는 Swift 6.2 이상을 대상으로 하는 Google Cloud 공식 API Client Libraries다. Swift 6의 컴파일 타임 동시성 검사를 활용해 비동기 작업 사이의 공유 상태가 Sendable 조건을 충족하는지 확인한다. 데이터 경쟁은 바이너리 실행 전에 컴파일러와 편집기에서 감지된다.

네트워크 계층은 Swift NIO의 이벤트 루프와 비차단 소켓을 사용한다. Google Cloud API 요청은 HTTP/2 멀티플렉싱과 gRPC 전송으로 처리되며, 연결마다 시스템 스레드를 생성하지 않고 멀티코어 Linux 환경에서 동작하도록 구성된다.

적용 대상과 배포 환경

SDK의 대상은 서버 애플리케이션, 컨테이너, 자동화 도구다.

  • Hummingbird나 Vapor 같은 Swift 웹 프레임워크 기반 마이크로서비스
  • Cloud Storage, AI, IAM 및 100개 이상의 Google Cloud 서비스 연동
  • Linux 실행 파일을 Cloud Run, Google Kubernetes Engine, Compute Engine VM에 배포
  • 개발자 컴퓨터와 CI/CD 파이프라인에서 실행하는 CLI 도구와 데이터 로테이션 스크립트

macOS에서는 Xcode를, Linux에서는 Visual Studio Code와 swiftly를 사용할 수 있다. SDK는 macOS와 Linux에서 컴파일된다. 애플리케이션의 프런트엔드와 백엔드를 모두 Swift로 작성하면 애플리케이션 전용 타입을 양쪽에서 공유할 수 있다.

반대로 iOS, iPadOS, visionOS 앱의 클라이언트 번들에 google-cloud-swift를 직접 포함해서는 안 된다. 서비스 계정 키나 관리자 자격 증명을 클라이언트 바이너리에 넣으면 보안 위험이 발생한다. 클라이언트 측 인증과 Firestore 동기화에는 Firebase SDK for Apple Platforms를 사용하거나, 자체 Cloud Run 백엔드 API를 통해 요청을 전달하는 방식이 제시됐다.

설치와 패키지 구성

SDK를 사용하려면 Swift 6.2 이상이 필요하다. Linux에서는 swiftly로 Swift 컴파일러를 설치할 수 있으며, 설치 후 swift --version으로 버전을 확인한다. Swift Package Manager를 사용해 서비스별 패키지를 추가한다. 예시에서는 swift-google-cloud-language-v2 패키지와 GoogleCloudLanguageV2 타깃을 등록했다.

macOS 빌드에서는 Package.swift의 platforms에 .macOS(.v15)를 지정한다. 클라이언트는 구조화된 builder closure로 요청을 구성한다.

let document = Document().with {
  $0.type = .plainText
  $0.source = .content(text)
}
let response = try await client.analyzeSentiment(
  request: AnalyzeSentimentRequest().with { $0.document = document }
)

인증과 공통 인프라

저장소는 인증과 API 공통 기능을 여러 패키지로 나눈다.

  • swift-google-cloud-auth: Application Default Credentials 탐색, 서비스 계정 JWT 서명, Workload Identity Federation, API 키 지원
  • swift-google-cloud-wkt: Protocol Buffer well-known types와 Timestamp 제공
  • swift-google-cloud-gax: 자동 재시도, 지수 백오프, 페이지네이션 상태 머신 처리

인자를 지정하지 않고 클라이언트를 초기화하면 Credentials.default()가 GOOGLE_APPLICATION_CREDENTIALS, quota project 변수, 로컬 Google Cloud CLI 설정을 검색한다. API 키를 사용하려면 Credentials(configuration: .apiKey(apiKey))로 자격 증명을 만든 뒤 ClientOptions에 전달한다.

생성 클라이언트와 비동기 페이지네이션

Google Cloud API 스키마와 기능 변경은 코드 생성기를 통해 클라이언트 라이브러리에 반영된다. 생성된 클라이언트는 서비스별로 일관된 이름과 async/await 시그니처를 제공한다. Secret Manager 예시에서는 listSecretsByItem이 여러 페이지의 결과를 AsyncSequence로 노출한다.

for try await item in try client.listSecretsByItem(request: request) {
  print(item.name)
}

호출자는 for try await로 항목을 순회하고, 라이브러리가 비차단 NIO 채널을 통해 다음 페이지를 가져온다. SDK의 소스 코드 확인, 이슈 제보, 새로운 veneer 기여는 공식 googleapis/google-cloud-swift 저장소에서 진행할 수 있다.

결론

google-cloud-swift는 Swift 프로젝트에서 Google Cloud API를 서비스별 생성 클라이언트로 호출하도록 구성한다. 기본 초기화에서는 Application Default Credentials가 환경과 로컬 Google Cloud CLI 설정을 검색하고, 필요하면 API 키나 사용자 지정 인증 헤더를 지정할 수 있다. 자동 생성 클라이언트는 async/await, 재시도, 지수 백오프, 페이지네이션, AsyncSequence를 제공하지만, iOS·iPadOS·visionOS 클라이언트 번들에 직접 포함해서는 안 된다.