동시성 면접 질문
GCD·OperationQueue·async/await·Actor·Sendable·데이터 레이스. 실제 iOS 면접에서 나온 50문항입니다.
- 동시성주관식
GCD 기본
GCD(Grand Central Dispatch)가 무엇이고, 스레드를 직접 만드는 것 대신 왜 큐에 작업을 넘기는 방식을 쓰나요?
#gcd #dispatch-queue #thread-pool #serial
- 동시성객관식
동기/비동기와 직렬/동시
sync/async와 serial/concurrent 큐에 대한 설명으로 맞는 것을 모두 고르세요.
#sync #async #serial #concurrent
- 동시성주관식
메인 스레드와 UI
UIKit 화면에서 네트워크 응답 콜백에 label.text = result를 했더니 가끔 화면이 늦게 바뀌거나 아예 안 바뀝니다. 원인이 무엇인가요?
#main-thread #ui #main-actor #runloop
- 동시성객관식
순차 await 와 async let
Swift Concurrency 에서 fetchProfile()과 fetchFeed()가 각각 1초 걸린다고 할 때, 다음 두 코드의 총 소요 시간에 대한 설명으로 옳은 것은? [코드]
#async-await #async-let #parallel #sequential
- 동시성객관식
iOS 동시성 도구 종류
iOS에서 백그라운드 실행(동시성)을 구현하는 수단으로 적절한 것을 모두 고르세요.
#thread #gcd #operationqueue #async-await
- 동시성주관식Oracle커뮤니티 전언
iOS 동시성 수단 선택
새 iOS 기능에서 네트워크 결과를 여러 화면이 공유하고 UI도 갱신해야 합니다. Swift Concurrency의 async/await, Task, actor를 각각 어떤 역할에 쓰겠습니까?
#swift-concurrency #async-await #actor #mainactor
- 동시성객관식
serial 큐 자기 sync
UIKit 뷰컨트롤러의 viewDidLoad(메인 스레드)에서 다음 GCD 코드를 실행하면? [코드]
#deadlock #sync #main-queue #serial
- 동시성주관식
GCD vs OperationQueue
이미지 다운로드 → 리사이즈 → 디스크 캐시 저장 파이프라인을 만드는데, 사용자가 스크롤하면 진행 중인 작업을 취소해야 합니다. GCD와 OperationQueue 중 무엇을 고르겠습니까?
#operationqueue #operation #gcd #dependency
- 동시성객관식
QoS
사용자가 버튼을 눌러 결과를 기다리고 있는 상황에서 JSON 파싱을 GCD 백그라운드 큐로 보내려 합니다. 가장 적절한 QoS는?
#qos #quality-of-service #priority #global-queue
- 동시성주관식
레이스 컨디션
여러 스레드에서 호출되는 아래 코드는 count가 기대보다 작게 나옵니다. 왜 그런지 CPU 수준에서 설명해 주세요. [코드]
#race-condition #data-race #lock #serial-queue
- 동시성객관식
배리어와 reader-writer
GCD 동시 큐로 만든 다음 캐시 구현에서 .barrier 플래그의 역할로 옳은 것은? [코드]
#barrier #concurrent-queue #reader-writer #gcd
- 동시성주관식
여러 비동기 작업 조합
화면 진입 시 프로필·피드·알림 API 3개를 병렬로 호출하고 모두 끝났을 때 한 번에 UI를 그려야 합니다. GCD로 구현한다면 어떻게 하겠습니까?
#dispatchgroup #semaphore #async-let #taskgroup
- 동시성객관식
세마포어와 뮤텍스
DispatchSemaphore와 뮤텍스(NSLock, Mutex)에 대한 설명으로 맞는 것을 모두 고르세요.
#semaphore #mutex #lock #synchronization
- 동시성주관식
async/await 동작 원리
Swift Concurrency에서 await를 만나면 실제로 무슨 일이 일어나고, 스레드가 블로킹되는 것과는 어떻게 다른가요?
#async-await #suspension #continuation #cooperative-thread-pool
- 동시성주관식
Task의 동작
Swift Concurrency에서 Task { }를 만들면 그 코드는 언제, 어디서 실행되나요?
#task #unstructured #detached #inheritance
- 동시성객관식
Combine 연산자와 스케줄러
검색창 입력마다 API를 호출하지 않고 '입력이 멈춘 뒤 300ms'에 한 번만 호출하고, 결과는 메인 스레드에서 받으려 합니다. 올바른 Combine 파이프라인은?
#combine #debounce #throttle #scheduler
- 동시성주관식
RunLoop
스크롤하는 동안 화면의 카운트다운 Timer가 멈췄다가 스크롤이 끝나면 한꺼번에 따라잡습니다. RunLoop 관점에서 원인이 무엇인가요?
#runloop #timer #main-thread #runloop-mode
- 동시성주관식Walmart커뮤니티 전언
class vs actor, @MainActor
Swift에서 class와 actor의 차이는 무엇인가요?
#actor #mainactor #isolation #class
- 동시성주관식Capital One
Combine zip vs combineLatest
서로 다른 두 네트워크 요청(사용자 프로필, 계좌 목록)을 Combine으로 동시에 보내고 둘 다 완료됐을 때만 결과를 한 번 내보내는 파이프라인을 작성해 보세요. zip과 combineLatest 중 무엇을 쓰고 왜인가요?
#combine #zip #combinelatest #network
- 동시성객관식Xiaohongshu
concurrent 큐 자기 sync와 스레드 생성
다음 GCD 코드의 출력 결과는? 그리고 queue.async가 호출될 때마다 새 스레드가 만들어지나요? [코드]
#gcd #concurrent #sync #thread-pool
- 동시성주관식DiDi
의존 작업 조합과 우선순위 역전
독립적인 작업 A, B, C가 있습니다. C는 반드시 A와 B가 모두 끝난 뒤 실행돼야 하고, A와 B의 순서는 상관없으며 서로 중첩하지 않습니다. 구현 방법을 장단점과 함께 아는 대로 말해 주세요.
#dispatchgroup #barrier #operationqueue #async-let
- 동시성주관식Flipkart
검색 디바운스 구현
검색창에 글자를 입력할 때마다 API를 호출하면 요청이 폭주합니다. 마지막 입력 후 300ms 동안 추가 입력이 없을 때만 호출되도록 디바운스를 GCD로 직접 구현해 보세요.
#debounce #dispatchworkitem #task #cancellation
- 동시성주관식CRED
느린 API와 화면 이탈
상세 화면에 들어가면 API를 호출해 데이터를 보여줍니다. 면접관이 묻습니다. "응답이 오기 전에 사용자가 뒤로 가기를 누르면 어떻게 되죠?" 현재 코드에서 생길 수 있는 문제와 해결책을 설명하세요.
#cancellation #task #weak-self #timeout
- 동시성주관식Grindr커뮤니티 전언
UI 스레드와 백그라운드 작업
이미지 변환과 API 응답 처리가 있는 UIKit 화면에서 스크롤이 멈춥니다. 어떤 작업을 main actor 밖으로 보내겠습니까?
#mainactor #background-work #uikit #threading
- 동시성주관식Zalando커뮤니티 전언
공유 캐시의 data race
여러 이미지 요청이 같은 메모리 캐시 딕셔너리를 동시에 읽고 씁니다. Lock 대신 actor로 고친다면 어떤 상태를 actor 안에 두겠습니까?
#actor #data-race #cache #inflight
- 동시성주관식Square
구조적 취소 전파
검색어가 바뀔 때 이전 검색의 네트워크, 디코딩, 이미지 작업이 모두 멈춰야 합니다. 부모 Task와 자식 Task의 취소 전파를 이용해 작업 트리를 어떻게 구성하겠습니까?
#cancellation #structured-concurrency #task-group #search
- 동시성주관식Intuit커뮤니티 전언
동시 요청의 최신 상태만 적용
세금 요약 화면에서 필터를 빠르게 바꾸면 여러 API 요청이 거의 동시에 끝납니다. 마지막에 고른 필터의 결과만 화면에 남게 하려면 요청과 상태 변경을 어떻게 관리하겠습니까?
#stale-response #cancellation #state #concurrency
- 동시성주관식HSBC커뮤니티 전언
async let과 TaskGroup
뱅킹 앱 홈에서 서로 독립적인 계좌, 카드, 알림 데이터를 동시에 가져와야 합니다. async let과 TaskGroup 중 무엇을 어떤 기준으로 고르겠습니까?
#async-let #taskgroup #fanout #error-handling
- 동시성주관식Razorpay
DispatchGroup fan-out 오류 처리
콜백 기반으로 짜인 결제 앱에서 독립 API 세 개가 모두 끝난 뒤 결제 요약을 만들어야 합니다. DispatchGroup의 enter와 leave를 어디에 두어 짝을 맞추겠습니까?
#dispatchgroup #callbacks #fanout #errors
- 동시성주관식Apple
데드락 진단
QA에서 "가끔 앱이 완전히 멈추는데 크래시 로그는 없다"는 리포트가 왔습니다. 데드락을 의심할 때 어떤 순서로 원인을 찾겠습니까?
#deadlock #debugging #lldb #lock-ordering
- 동시성객관식
구조화된 동시성
구조화된 동시성(async let, TaskGroup)에 대한 설명으로 맞는 것을 모두 고르세요.
#structured-concurrency #async-let #taskgroup #cancellation
- 동시성객관식
Sendable
Swift 6 strict concurrency에서 추가 조치 없이 Sendable로 취급되는(또는 자동 채택되는) 것을 모두 고르세요.
#sendable #swift-6 #strict-concurrency #value-type
- 동시성주관식
Swift 6 마이그레이션
completion handler와 GCD로 짜인 대형 앱을 Swift 6 strict concurrency로 옮기라는 과제를 받았습니다. 어떤 순서로 옮기겠습니까?
#swift-6 #strict-concurrency #migration #completion-handler
- 동시성주관식
MainActor 격리
Swift Concurrency에서 @MainActor를 뷰모델 클래스 전체에 붙이는 것과 특정 메서드에만 붙이는 것은 무엇이 다른가요?
#mainactor #global-actor #nonisolated #isolation
- 동시성주관식
Thread Sanitizer
Thread Sanitizer는 어떤 원리로 데이터 레이스를 잡나요?
#tsan #thread-sanitizer #data-race #debugging
- 동시성주관식Snap커뮤니티 전언
비동기 네트워크 클라이언트 설계
여러 화면에서 동시에 쓰는 비동기 네트워크 클라이언트 API를 설계해 보세요. 메인 스레드를 절대 막지 않아야 하고, 같은 요청 중복 제거·취소·재시도가 필요합니다. 인터페이스와 내부 동시성 구조를 설명해 주세요.
#design #network-client #async #cancellation
- 동시성주관식
지연 작업 취소
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { showTooltip() }로 예약한 작업을 사용자가 2초 안에 화면을 떠나면 취소해야 합니다. GCD로는 어떻게 구현하겠습니까?
#dispatchworkitem #asyncafter #cancellation #task-sleep
- 동시성주관식PayPal
completion handler → async/await 점진 이전
완료 핸들러(completion handler) 기반으로 짜인 오래된 네트워킹 계층이 있고 앱 전체에서 수백 곳이 호출합니다. 호출부를 한꺼번에 깨뜨리지 않고 async/await로 옮기려면 어떻게 하겠습니까?
#async-await #continuation #migration #cancellation
- 동시성주관식PhonePe
동시 다운로드, 순서 보장 표시
이미지 id 배열 [3, 1, 2]가 주어집니다. 각 이미지를 동시에 다운로드하되, 화면에는 id 순서(1, 2, 3)대로 표시해야 합니다. Swift Concurrency로 어떻게 구현하겠습니까?
#taskgroup #structured-concurrency #ordering #cancellation
- 동시성객관식Zomato
중첩 큐 출력 예측
다음 GCD 코드를 메인 스레드에서 실행합니다. 출력 결과는? [코드]
#gcd #main-queue #sync #deadlock
- 동시성객관식Kuaishou
직렬/동시 큐의 sync 대기 시간
GCD 큐를 받는 다음 함수를 메인 스레드에서 호출하면 반환까지 약 몇 초가 걸릴까요? queue가 (1) 직렬 큐일 때와 (2) 동시(concurrent) 큐일 때를 각각 답하세요. [코드]
#gcd #serial #concurrent #sync
- 동시성객관식NetEase
무락 증가 연산의 결과 범위
다섯 개의 스레드가 공유 변수 count(초기값 0)에 대해 각각 count += 1을 20번씩, 락 없이 실행합니다. 모두 끝났을 때 count가 가질 수 있는 값의 범위는? (증가는 읽기 → 더하기 → 쓰기 세 단계로 이뤄지고, 각 단계 사이에 다른 스레드가 끼어들 수 있다고 가정)
#race-condition #data-race #atomicity #lock
- 동시성주관식ByteDance
다중 읽기·단일 쓰기 큐
프로퍼티를 '여러 스레드가 동시에 읽되 쓰기는 한 번에 하나만' 되게 만들려고 합니다. Objective-C 시절엔 getter에서 dispatch_sync, setter에서 dispatch_barrier_async를 쓰는 패턴이 있었는데, 면접관이 묻습니다. "getter가 sync…
#gcd #barrier #reader-writer #objective-c
- 동시성주관식Microsoft
딕셔너리 캐시의 스레드 안전
메시지 목록 화면에서 셀마다 프로필 이미지를 비동기로 내려받아 [String: UIImage] 딕셔너리에 캐시합니다. 여러 스레드가 동시에 읽고 쓰면서 가끔 크래시가 납니다. 왜 크래시가 나나요?
#thread-safety #dictionary #nscache #lock
- 동시성주관식Dropbox
동일 URL 다운로드 합치기
사진 그리드에서 여러 셀이 같은 사진 URL을 동시에 요청하지만 네트워크 다운로드는 한 번만 해야 합니다. actor 안에서 in-flight Task를 어떻게 보관해 요청을 합치겠습니까?
#actor #image-download #deduplication #task
- 동시성주관식
actor 재진입성
Swift Concurrency 로 만든 아래 이미지 캐시 actor는 같은 키에 대해 네트워크 요청이 두 번 나가는 경우가 있습니다. actor가 상태를 보호해 주는데도 왜 이런 일이 생기나요? [코드]
#actor #reentrancy #isolation #await
- 동시성객관식
협력적 취소
Swift Concurrency 의 다음 코드에서 t.cancel() 직후 실제로 일어나는 일로 옳은 것은? [코드]
#cancellation #task #checkcancellation #task-sleep
- 동시성주관식Amazon
디스패치 큐 직접 설계
GCD 없이 MyQueue를 직접 설계해 보세요. async(_:)로 클로저를 넣으면 백그라운드 스레드 풀이 실행하고, serial/concurrent 모드를 지원하며, sync(_:)도 제공해야 합니다. 핵심 자료구조와 동기화 원리를 설명해 주세요.
#design #queue #thread-pool #condition-variable
- 동시성주관식
실시간 처리 파이프라인
카메라 프리뷰에 실시간 필터를 적용하는 앱을 만듭니다. 60fps를 유지하면서 메모리 안전성(버퍼 누수·경합 없음)을 지켜야 합니다. 캡처 → 처리 → 렌더 파이프라인을 어떤 스레드/큐 구조로 설계하겠습니까?
#realtime #video #60fps #backpressure
- 동시성주관식
Swift 6 빌드와 싱글톤 경쟁 상태
과제로 제출한 앱은 static let shared로 만든 싱글톤 ImageCache(내부에 var storage: [URL: UIImage])를 여러 화면이 백그라운드 큐에서 읽고 씁니다. 면접관이 묻습니다. "이 프로젝트를 Swift 6 언어 모드로 빌드하면 어떤 일이 생길까요?"
#swift6 #strict-concurrency #sendable #singleton