Swift Concurrency. Behind the Scenes - WWDC21

Threading model 뉴스 피드 리더 앱을 예로 들어보자. 앱의 상위 컴포넌트는 다음과 같이 나눌 수 있다. 사용자 인터페이스를 담당하는 메인 스레드 사용자가 구독한 뉴스 피드를 추적하는 데이터베이스 최신 콘텐츠를 가져오는 네트워킹 서브시스템 사용자가 최신 뉴스를 요청하면 다음과 같은 흐름으로 처리할 수 있다. 메인 스레드에서 이벤트 제스처 처리 데이터베이스 작업을 처리하는 직렬 큐로 요청을 비동기적으로 디스패치 작업을 다른 큐로 보내면 메인 스레드는 데이터베이스 작업을 기다리지 않고 사용자 입력에 계속 반응할 수 있다. 직렬 큐가 상호 배제를 보장하므로 데이터베이스 접근을 순서대로 처리할 수 있다. 데이터베이스 큐에선 사용자가 구독한 피드에 URLSession을 통해 콘텐츠를 다운로드하는 네트워크 요청을 스케줄링 결과가 도착하면 URLSession의 콜백이 Delegate Queue 위에서 호출되어서 각 결과의 Completion Handler가 동기적으로 데이터베이스를 업데이트한다. MainThread를 깨워서 UI를 리프레시한다. 보기에는 합리적인 방법이다. 메인 스레드를 블록하지 않으면서 네트워크 요청을 동시에 처리할 수 있기 때문이다. ...

August 25, 2025

Swift Concurrency. 01. 도입 배경

Swift Concurrency는 Swift 5.5에서 도입된 기능이다. Foundation을 import 해야 쓸 수 있는 GCD와 다르게, Swift 언어 자체에 내장된 동시성 모델이다. Swift Concurrency는 크게 두 가지 부분으로 나뉘어진다. async, await 로 작성하는 새로운 동시성 모델 애플리케이션을 여러 동시성 태스크로 분할하는 Actor 이 포스트에서는 Swift Concurrency의 도입 배경을 알아본다. GCD의 한계 GCD는 Objective-C에서부터 사용해온 애플이 만든 비동기 API다. Queue 기반으로 작업을 스케줄링 하고, 스레드 위에서 추상화 되어있기 때문에 스레드를 직접 생성하거나 관리할 필요가 없다. ...

August 3, 2025