[swift] 스위프트 아폴로를 활용한 실시간 데이터 업데이트 기능 구현

스위프트 아폴로는 GraphQL을 iOS 앱에서 사용하기 위한 클라이언트 라이브러리입니다. GraphQL은 실시간 데이터 업데이트를 지원하므로, 스위프트 아폴로를 사용하여 실시간 데이터 업데이트 기능을 간단하게 구현할 수 있습니다.

1. 스위프트 아폴로 설치

스위프트 아폴로를 사용하기 위해 먼저 Cocoapods를 이용하여 아폴로를 프로젝트에 추가해야 합니다. Podfile에 다음과 같이 아폴로를 추가합니다.

pod 'Apollo', '~> 0.47'

그리고 터미널에서 pod install 명령을 실행하여 아폴로를 설치합니다.

2. 아폴로 세팅

아폴로를 사용하기 위해선 스키마 파일을 생성해야 합니다. 스키마 파일은 GraphQL 서버에서 사용되는 스키마를 정의하는 파일로, Apollo에서는 이 파일을 이용해 코드를 생성합니다.

프로젝트의 루트 디렉토리에 schema.json 파일을 생성하고, GraphQL 서버의 스키마 내용을 복사하여 붙여넣습니다. 그리고 터미널에서 다음과 같은 명령을 실행하여 코드를 생성합니다.

apollo codegen:generate --target=swift --includes=./**/*.graphql --localSchemaFile=schema.json ./API.swift

위 명령을 실행하면 API.swift 파일이 생성됩니다. 이 파일에는 서버의 스키마를 기반으로 생성된 타입들과 API 요청 코드가 포함되어 있습니다.

3. 실시간 데이터 업데이트 구현

아폴로를 사용하여 실시간 데이터 업데이트를 구현하기 위해서는 아폴로 클라이언트를 설정하고 구독을 생성해야 합니다.

먼저, 아폴로 클라이언트를 설정하기 위해 ApolloClient를 초기화해야 합니다. 기본적으로 아폴로는 http://localhost:4000/graphql로 연결을 시도하므로, 만약 다른 엔드포인트를 사용한다면 URL 객체로 엔드포인트를 지정해야 합니다. 예를 들어 다음과 같이 클라이언트를 설정할 수 있습니다.

let apollo = ApolloClient(url: URL(string: "https://api.example.com/graphql")!)

그리고 구독을 생성하기 위해 아폴로의 subscribe 메서드를 사용합니다. 아래 예제는 onEvent 클로저를 이용하여 실시간 이벤트를 처리하는 예제입니다.

let query = MySubscriptionQuery()

_ = apollo.subscribe(subscription: query) { result in
  switch result {
  case .success(let graphQLResult):
    // 실시간으로 받은 데이터 처리
    let data = graphQLResult.data?.mySubscription
    // ...
  case .failure(let error):
    // 에러 처리
    print("Error while subscribing: \(error.localizedDescription)")
  }
}

위 예제에서는 MySubscriptionQuery는 서버에서 정의된 구독 쿼리입니다. 실시간 데이터를 받아와서 처리하는 부분은 success 케이스에서 이루어집니다.

4. 결론

스위프트 아폴로를 활용하여 실시간 데이터 업데이트 기능을 구현하는 방법에 대해 알아보았습니다. 아폴로를 사용하면 간편하게 GraphQL 실시간 기능을 활용할 수 있으며, 코드 생성을 통해 타입 안정성을 유지할 수도 있습니다. 추가적인 설정이나 기능은 공식 문서를 참고하시기 바랍니다.

이 문서는 아무 기술적인 내용도 없으므로 참고 자료를 제공하지 않습니다.