이 강의는 iOS 개발자를 위한 CS 학습 로드맵의 P0(반드시 설명·디버깅에 활용해야 하는 기반 지식) 110문항, P1(실무 성능·안정성·데이터 처리 역량) 58문항, P2(시니어 설계·특수 장애 분석·깊은 면접) 58문항 — 모두 226문항에 답합니다. CS 개념을 외우는 데서 끝내지 않고 iOS에서 어떤 현상으로 나타나는지 설명하고 재현·측정으로 검증하는 것이 목표입니다.
이 강의를 읽는 법
문항마다 아래 순서로 정리했습니다. 30초 답변만 먼저 훑어 전체 지도를 잡고, 헷갈리는 문항만 아래로 파고들면 됩니다. 각 문항은 진행 체크포인트라, 다 못 봐도 이어서 볼 수 있습니다.
🔑 30초 답변
면접·동료 설명에 그대로 쓰는 핵심 3~5문장.
iOS에서는
Darwin/XNU·Swift 런타임·UIKit/SwiftUI에서 그 개념이 나타나는 방식.
실험 · 도구
재현 코드·관찰 지표·Instruments/LLDB로 증명.
프로젝트 적용
"그래서 우리 코드에서 무엇을 해야 하나"와 trade-off.
⚠️ 흔한 오해
"항상/절대" 류의 잘못 알려진 설명 교정.
🔑 핵심
목표는 정답 암기가 아니라, 처음 보는 iOS 문제도 CS 원리 → 가설 → 측정 → 해결책 순서로 풀 수 있게 되는 것입니다.
우선순위 — P0 · P1 · P2
로드맵은 지식을 파급력 순으로 P0 / P1 / P2로 나눕니다. 이 강의는 세 등급 전부를 담았습니다. P0는 로드맵의 학습 순서(메모리 → 동시성 → 운영체제 → 네트워크 …) 그대로 17챕터, P1은 9챕터, P2는 9챕터입니다.
| 등급 | 의미 | 이 강의 |
| P0 | 모든 iOS 개발자가 반드시 설명·디버깅에 활용해야 하는 기반 지식 | 포함 (17챕터 · 110문항) |
| P1 | 실무 성능·안정성·데이터 처리 역량 | 포함 (9챕터 · 58문항) |
| P2 | 시니어 설계·특수 장애 분석·깊은 면접 | 포함 (9챕터 · 58문항) |
📝 노트
세 등급은 서로 다른 종류의 질문에 답합니다. P0가 "이 개념은 무엇이며 iOS에서 어떻게 나타나는가"라면, P1은 "내 손을 떠나 사용자 기기에서 도는 앱을 어떻게 관측하고 판독하는가"이고, P2는 "추상화 아래에서 실제로 무엇이 일어나는가"입니다. P1은 디버거를 붙일 수 없는 환경이 전제이고, P2는 직접 컴파일·실행해 확인하는 것이 전제입니다. P0를 먼저 보는 것을 권하지만, 이미 실무 중이라면 P1부터 읽어도 됩니다.
P0 — 기반 지식 (17챕터 · 110문항)
01 · 메모리와 가상 메모리 P0 8
iOS 앱이 메모리를 어떻게 쓰고 언제 죽는지 — 가상 메모리부터 Jetsam까지.
02 · 동시성·병렬성·스레드 P0 12
스레드·GCD·Swift Concurrency 핵심 12문답 (race·deadlock·actor·Sendable·Task).
03 · 운영체제와 프로세스 P0 7
iOS 앱이 XNU 위에서 프로세스로 어떻게 표현되고, 살아가고, 죽고, 격리되는지 다룹니다.
04 · 네트워크 P0 9
URL 요청 흐름, TCP/UDP, TLS, HTTP 메서드·상태코드, timeout·재시도를 CS 원리와 iOS(URLSession/Network.framework) 관점으로 정리.
05 · Swift 런타임과 언어 구현 P0 8
struct/class부터 any·some까지, Swift 언어를 메모리·런타임 관점에서 설명하는 8문항.
06 · 자료구조와 알고리즘 P0 7
복잡도부터 해시·이진탐색·정렬 안정성·페이지네이션 병합까지 CS 원리와 Swift 런타임으로 관통한다.
07 · RunLoop와 이벤트 처리 P0 6
RunLoop가 입력·타이머·렌더링을 한 순회로 묶는 원리, 그리고 메인 블로킹·타이머 부정확성이 왜 생기는지.
08 · 그래픽스와 UI 렌더링 P0 6
프레임 렌더 파이프라인, 60/120Hz 프레임 예산, CPU·GPU 분업, 이미지 디코드와 다운샘플링을 다룬다.
09 · 데이터베이스와 영속성 P0 6
저장소 선택 기준, ACID, 인덱스, 마이그레이션, Core Data의 정체와 컨텍스트 동시성
10 · 파일 시스템과 I/O P0 5
메인 스레드 블로킹, 대용량 로드, 디렉터리 선택, 크래시에도 안 깨지는 원자적 쓰기.
11 · 보안과 암호학 P0 6
인코딩·해싱·암호화부터 Keychain·토큰·HTTPS·시크릿 은닉·로그 유출까지, iOS 보안의 실전 판단 기준.
12 · CPU와 성능 P0 5
CPU-bound와 I/O-bound부터 메모리 계층·복잡도·빌드·발열까지, CPU 성능을 원리와 iOS 실무로 잇는다.
13 · 캐시와 성능 설계 P0 5
캐시의 비용·일관성 트레이드오프와 iOS 메모리/디스크 캐시, TTL·무효화, NSCache, 메모리 경고·백그라운드 축출 설계.
14 · 컴파일러·링커·실행 파일 P0 5
Swift 코드가 기계어로 컴파일·링크되고 dyld로 로드·실행되는 과정, 그리고 심볼과 dSYM 심볼리케이션.
15 · 테스트와 디버깅 P0 6
테스트 층위, 최소 재현, 크래시 스택 읽기, 비동기 결정성, 브레이크포인트, Instruments 사용법.
16 · 분산 시스템과 모바일 클라이언트 P0 4
응답 미수신 재시도, 중복 결제 방지, idempotency key, 클라이언트/서버 시간 불일치 — 모바일이 분산 시스템 노드로서 마주치는 P0 문제.
17 · 아키텍처와 소프트웨어 공학 P0 5
코드 변경 비용을 지배하는 결합·응집·순수성·의존 규칙·추상화 원칙을 CS와 iOS 관점에서.
P1 — 실무 성능·안정성 (9챕터 · 58문항)
사용자 기기에서 도는 앱을 관측하고 판독하는 능력을 다룹니다. 무엇을 계측하고 무엇을 버릴지, 앱이 왜 죽었는지 리포트로 판독하는 법, 행과 히치를 구분해 잡는 법, 그리고 프로세스 경계·프라이버시·배포 크기까지. 수치는 Apple 공식 문서에 명시된 값과 커뮤니티 실측값을 출처 등급으로 구분해 표기했습니다.
18 · 프로덕션 관측성 P1 7
관측성과 모니터링의 차이, 로그·메트릭·트레이스의 역할, OSLog 레벨별 영속성, breadcrumb·태그·이슈 그룹핑, 관측 SDK가 물리는 비용.
19 · 비정상 종료 판독 P1 7
앱이 사라지는 다섯 방식, Termination Reason 코드표(0x8badf00d·0xdead10cc…), 시그널과 Mach exception, async-signal-safe 제약, 리포터가 증거를 파괴하는 경우.
20 · 행과 응답성 P1 7
행과 히치의 구분, 메인 런루프의 busy 구간, Apple이 명시한 250ms·1s 임계, 행률 지표, 숨은 블로킹 코드, async/await가 행을 없애주지 않는 이유.
21 · 심볼화와 릴리스 추적 P1 6
주소가 함수명이 되는 과정, build UUID로 묶이는 dSYM, 심볼화 실패가 집계를 오염시키는 구조, 인라이닝이 스택을 바꾸는 방식, CI 게이트.
22 · 성능 계측과 샘플링 P1 7
span 분할 기준, W3C traceparent로 잇는 분산 트레이스, 트레이스 단위 샘플링의 원리, 필요 표본 수에서 역산하는 비율, 프로파일링과 오버헤드 예산.
23 · 프라이버시와 데이터 수집 P1 6
PII가 새는 다섯 경로, PrivacyInfo.xcprivacy가 선언하는 것, Required Reason API와 핑거프린팅, ATT의 실제 효과, 이중 스크러빙과 최소 수집.
24 · 프로세스 경계와 App Extension P1 7
익스텐션이 앱이 아닌 이유, extension point가 API까지 결정하는 구조, App Group 공유 컨테이너, NSItemProvider의 지연 전달, UTI 준수 트리, 자원 예산.
25 · 렌더링 심화 P1 6
렌더 서버가 별도 프로세스인 이유, 렌더 루프 5단계 파이프라이닝, CA commit 네 단계, 오프스크린 렌더링 비용, 벡터 애니메이션 트레이드오프, 히치 진단.
26 · 앱 크기와 배포 P1 5
다운로드와 설치 크기의 차이, 앱 시닝과 App Size Report, 크기를 지배하는 요인, 동적 프레임워크의 이중 비용, CI 회귀 차단, 그리고 P1 총정리.
P2 — 표현·경계·기계·증명 (9챕터 · 58문항)
추상화 아래에서 실제로 무엇이 일어나는가를 다룹니다. 현실을 유한한 비트에 담을 때 어디서 어긋나는지(27~30장), 경계에서 무엇을 약속하고 감추는지(31~32장), 기계 수준에서 코드가 어떤 모습인지(33~34장), 그리고 컴파일러가 안전을 어디까지 증명하는지(35장). 이 등급의 주장은 대부분 직접 컴파일·실행해 확인한 결과이며, 재현 절차를 함께 실었습니다.
27 · 문자열과 유니코드 P2 7
길이가 네 가지인 이유(👨👩👧👦 = 1/7/11/25), 정준 등가와 APFS의 NFD, String.Index가 조용히 밀리는 순간, 스몰 스트링 15바이트 경계의 약 6배 차이, Slice의 버퍼 점유, Swift Regex와 NSRegularExpression의 단위 불일치.
28 · 로케일과 서식 P2 7
Locale의 네 축과 UN M49, sorted()가 File20을 앞에 두는 이유, 터키어 I 문제의 실제 발생 조건, CLDR 복수형 6범주와 한국어·아랍어, FormatStyle과 YYYY 함정, en_US_POSIX가 고치는 진짜 문제.
29 · 시간과 달력 P2 6
Date가 Double 하나인 대가(distantFuture의 ULP 7.6μs), 달력 산술에서 결합법칙이 깨지는 예, DST의 23·25시간 하루, matchingPolicy 세 축, DateFormatter 캐싱 18배, 순간·달력날짜·지역약속의 분리.
30 · 수치 정확도 P2 5
0.1이 실제로 저장하는 값, Decimal(0.1 + 0.2)가 진짜 함정인 이유, 2^53 경계와 덧셈 순서가 결과를 바꾸는 예, 통화 계산의 정수 스케일링, 그리고 Swift Testing에 accuracy가 없다는 사실.
31 · 직렬화와 스키마 P2 7
Codable 합성과 클래스 상속의 구멍, CodingKeys 누락의 진단 3단계, 세 컨테이너와 superEncoder, DecodingError 4종과 codingPath, 다형 JSON의 내부·외부 태그, JSONDecoder 재사용 통념 반박, 확장-축소 스키마 진화.
32 · 타입 시스템과 API 설계 P2 7
Result와 throws의 갈림, Typed Throws를 넓히면 깨지는 이유, KeyPath 계층, Property Wrapper 합성이 비교환적인 이유, Primary Associated Type이 순수 문법 설탕임을 SIL로 확인, 소급 준수와 망라성의 ABI 경계.
33 · 런타임과 ABI P2 6
Library Evolution이 struct_extract를 함수 호출로 바꾸는 것을 SIL로 확인, throws의 에러 레지스터, 비가상화 3경로와 WMO 2~5배, 프로토콜 확장의 정적 바인딩 함정, package 접근 제어, static let과 lazy var의 동시 초기화 실측.
34 · Foundation과 ObjC 상호운용 P2 6
swift-foundation 재작성의 실제 타임라인과 공개된 수치 넷, toll-free bridging의 두 계층과 지연 비용, Data가 감추는 네 표현, NSError 브리징, KVO의 isa-swizzling과 @objc만으로 부족한 이유, Observation의 접근 추적.
35 · 동시성 안전성 심화 P2 7
Region 분석이 -typecheck는 통과하고 -c에서 잡히는 이유, sending의 계약, @isolated(any)로 격리를 값으로, AsyncStream에서 요소가 사라지는 두 지점(52+48), Effectful Property가 잃는 것, Distributed Actor, 데이터 경쟁 안전성 4단계 사다리.
출처 · 참고자료