메인 스레드 검사기와 멈춤 현상
백그라운드 스레드에서 실행되는 UI 작업을 감지하고 메인 스레드 멈춤을 해결합니다.
메인 스레드 검사기와 멈춤 현상은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
메인 스레드 검사기
메인 스레드 검사기(MTC)는 실행 중 백그라운드 스레드에서 호출된 UIKit/AppKit API를 보고하는 Xcode 진단 기능입니다.
// Enabled by default in Xcode Debug scheme:
// Product → Scheme → Edit → Diagnostics → ☑ Main Thread Checker
// Violating calls log a purple runtime warning in Xcode일반적인 MTC 위반
완료 처리기나 백그라운드 큐에서 UI를 업데이트하는 것이 가장 빈번한 위반입니다.
URLSession.shared.dataTask(with: url) { data, _, _ in
self.label.text = "Done" // VIOLATION: background thread
}.resume()
// Fix:
DispatchQueue.main.async { self.label.text = "Done" }비동기/대기와 함께 사용하는 MTC
@MainActor로 클래스나 함수를 표시하면 모든 메서드가 메인 스레드에서 실행됩니다.
@MainActor
final class ProfileViewModel: ObservableObject {
@Published var name = ""
func load() async {
name = try? await fetchName() // always on main thread
}
}멈춤이란 무엇입니까
멈춤은 메인 스레드가 너무 오래 차단되어 앱이 응답하지 않는 상태입니다. iOS 감시자는 시작 시 20초 초과 또는 사용자 동작 후에 멈춘 앱을 종료합니다.
// Common causes:
// - Synchronous network calls on main thread
// - Heavy computation blocking main run loop
// - Deadlocks between DispatchQueuesInstruments 멈춤 템플릿
Xcode 14 이상에서 Hangs 도구는 전체 스택 추적과 함께 멈춤 이벤트를 기록하여 메인 스레드 차단을 진단합니다.
// Instruments → Hangs template
// Shows hang duration (ms), call stack, and responsible frame
// Look for synchronous I/O or heavy loops테스트에서 사용하는 메인 스레드 검사기
MTC는 UI 테스트 중에도 작동합니다. 자동화된 UI 흐름에서 위반을 감지하려면 테스트 구성에서 MTC를 설정합니다.
// XCTestScheme Diagnostics → ☑ Main Thread Checker
// UI test violation = instant fail in CIMetricKit 멈춤 보고서
MetricKit은 MXHangDiagnosticPayload에서 프로덕션 앱의 멈춤 보고서를 수집합니다.
func didReceive(_ payloads: [MXDiagnosticPayload]) {
payloads.compactMap { $0.hangDiagnostics }.flatMap { $0 }.forEach {
print($0.callStackTree)
}
}Instruments로 멈춤 감지하기
추적을 기록하고 메인 스레드가 실행 중이지만 디스플레이 링크가 작동하지 않는 시간 구간(프레임 누락)을 찾습니다.
// Time Profiler: look for long CPU bursts on main thread
// Core Animation: FPS drops to 0 during hang
// Hangs instrument: highlights exact frames where hang occurred일반적인 멈춤을 위한 비동기 수정
Task.detached 또는 async let을 사용하여 CPU를 많이 사용하는 작업을 메인 스레드에서 다른 곳으로 옮깁니다.
// HANG:
let processed = heavyProcessing(image) // blocks main thread
// FIX:
let processed = await Task.detached(priority: .userInitiated) {
heavyProcessing(image)
}.value메인 스레드에서 동기 API 피하기
동기식 파일 입출력과 네트워크 호출을 비동기식 대응 항목으로 바꾸거나 백그라운드 큐로 옮깁니다.
// HANG: synchronous file read on main thread
let data = try! Data(contentsOf: largeFileURL)
// FIX:
let data = try await Task.detached { try Data(contentsOf: largeFileURL) }.value메인 실행 루프와 타이머
메인 실행 루프에서 장시간 실행되는 작업(RunLoop.main 콜백 내부)도 멈춤을 일으킵니다. 계산 작업을 메인 루프 밖으로 옮깁니다.
// AVOID: heavy work in main-thread timer callback
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
processAllItems() // slow!
}
// PREFER: dispatch to background
Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { _ in
Task.detached { processAllItems() }
}간단한 확인
클래스에 @MainActor를 추가하면 메서드 호출에 대해 무엇이 보장됩니까?
강의 요약
디버그 구성에서 메인 스레드 검사기를 활성화하여 백그라운드에서 UI를 조작하는 위반을 감지합니다. ViewModels와 뷰에 @MainActor를 사용합니다. Task.detached 또는 백그라운드 큐를 사용해 무거운 작업을 메인 스레드 밖으로 옮깁니다. Hangs 도구와 MetricKit의 MXHangDiagnosticPayload를 사용해 실제 환경의 멈춤을 진단합니다.
AI 튜터와 함께 Swift을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 122
- 레슨
- 409
자주 묻는 질문
“메인 스레드 검사기와 멈춤 현상” 강의는 무료인가요?
네 — “메인 스레드 검사기와 멈춤 현상” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“메인 스레드 검사기와 멈춤 현상”에서 뭘 배우나요?
백그라운드 스레드에서 실행되는 UI 작업을 감지하고 메인 스레드 멈춤을 해결합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“메인 스레드 검사기와 멈춤 현상” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Instruments 기초: 시간 프로파일러
- 할당과 누수 Instruments
- 메인 스레드 검사기와 멈춤 현상
- 병목 경로 최적화: COW, 인라이닝 및 특수화