[swift] 스위프트 아폴로에서의 비동기 처리 방법

아폴로(Apollo)는 스위프트(Swift)로 작성된 GraphQL 클라이언트 라이브러리입니다. GraphQL은 비동기적인 데이터 요청 및 처리를 위해 설계된 언어이기 때문에, 아폴로에서는 비동기 처리를 위한 다양한 방법을 제공합니다. 이번 글에서는 스위프트 아폴로에서의 비동기 처리 방법에 대해 알아보겠습니다.

1. 콜백(Callback) 함수 사용

가장 기본적인 비동기 처리 방법은 콜백 함수를 사용하는 것입니다. 아폴로에서는 ApolloClientfetch 메서드를 이용하여 GraphQL 쿼리를 실행하고, 콜백 함수를 등록하여 결과를 처리할 수 있습니다. 예를 들면 다음과 같습니다.

apollo.fetch(query: MyQuery()) { result in
    switch result {
    case .success(let graphQLResult):
        // 쿼리 결과를 처리하는 로직 작성
    case .failure(let error):
        // 에러 처리 로직 작성
    }
}

위의 예제에서 ApolloClientfetch 메서드는 비동기로 실행되며, 쿼리 결과는 result 매개변수를 통해 전달됩니다. 성공적으로 실행된 경우 .success 케이스에서 graphQLResult를 통해 결과를 처리할 수 있고, 에러가 발생한 경우 .failure 케이스에서 error를 통해 에러를 처리할 수 있습니다.

2. Promise와 async/await

콜백 함수를 사용하는 방식은 비동기 코드를 작성하기에 복잡하고 가독성이 떨어질 수 있습니다. 스위프트 5.5부터는 async/await 문법을 사용하여 코드를 보다 간결하게 작성할 수 있습니다. 아폴로에서도 이러한 방식을 지원합니다.

async {
    do {
        let graphQLResult = try await apollo.fetch(query: MyQuery())
        // 쿼리 결과를 처리하는 로직 작성
    } catch {
        // 에러 처리 로직 작성
    }
}

async 키워드로 비동기 블록을 시작하고, await 키워드를 사용하여 비동기 작업을 기다릴 수 있습니다. 위의 예제에서는 apollo.fetch 메서드를 호출하고, 결과를 graphQLResult에 바인딩하여 처리할 수 있습니다. 에러가 발생한 경우 catch 블록에서 에러를 처리할 수 있습니다.

참고 자료