-
What's new in SwiftData (feat. WWDC 2026)SwiftData 2026. 7. 12. 18:36
안녕하세요. 그린입니다 🍏
이번 포스팅에서는 WWDC 2026에서 나온 SwiftData 부분에서 업데이트 사항들에 대해 살펴보고 정리해보겠습니다 🙌
Sectioning your fetches
먼저 SwiftData에서 섹션별로 데이터를 가져오는 방법을 보겠습니다.

이제는 이렇게 쿼리에서 옵션을 주어 그룹별로 묶을 수 있어요.
각 섹션에선 ID 속성이 있고 이걸 활용하게 됩니다.
Using custom types
모델에 커스텀 타입을 저장하는 기능 향상을 살펴볼께요.
SwiftData는 로드될 때 모델에 대한 스키마를 자동으로 생성합니다.
스키마는 모델 클래스와 엔티티간 매핑을 정의하죠.
대부분의 타입에선 이게 자동으로 작동해요.
그렇지만 모델 매크로로 어노테이션 되지 않은 클래스는 자동으로 검사할 수 없기에 SwiftData는 스키마 생성에 실패합니다 🥲
만약 그렇다고 구현체에 접근할 수 없을 수 있잖아요?

그런 경우 이렇게 어트리뷰트 codable을 사용하여 주면 해결됩니다.
이 속성은 SwiftData에 타입의 인코딩된 표현을 저장하도록 알려주는 역할을 합니다.
타입에 대한 스키마를 추론하는 대신에요.
다만 염두해둬야할게 있는데, codable 속성의 내용은 SwiftData에 불투명합니다.
이는 Predicate에서 결과를 필터링하는데 사용할 수 없음을 나타내요.
또는 정렬도 사용할 수 없어요.
또한 codable 형태가 변경되면 속성을 추가하거나 제거하는 경우 마이그레이션이 트리거되지 않아요.
이 점을 주의해야 합니다!
Codable 속성 사용은 SwiftData가 기본적으로 지원하지 않는 타입을 저장하는 탈출구라고 생각하면 좋습니다.
직접 정의했다면 왠만해선 Codable 사용을 금해야 합니다.
Observing data stores
스토어를 모니터링하고 데이터 변경 시 알림 받는 방법을 살펴볼께요.

SwiftUI에서는 이렇게 데이터가 변경되면 뷰가 쿼리의 새로운 결과를 반영해 다시 렌더링합니다.
만약 SwiftUI가 아닌 부분은 어떨까요?
이걸 위해 이번 2027 릴리즈에선 ResultsObserver를 도입했습니다.

SwiftUI 쿼리처럼 데이터 가져오고 관찰하고 반영시키는 Swift Observation을 사용해요.

이런식으로 사용될 수 있습니다.
withContinuousObservation은 ObservationTracking 토큰을 반환합니다.
이 토큰이 관찰의 수명을 정의하죠.
여기서 더 나아가 이번 업데이트에서는 히스토리 관찰도 지원해줍니다.

데이터 스토어가 저장될 때마다 SwiftData는 히스토리 트랜잭션을 기록합니다.
여기에는 변경된 내용에 대한 정보가 포함됩니다.
그리고 변경이 어디서 왔는지 조차도 포함되죠.
히스토리에서 트랜잭션을 고유하게 식별하는 토큰도 있습니다.
ModelContext.fetchHistory() 이 API와 토큰을 함께 사용할 수 있어요.

HistoryObserver는 스토어의 변경 사항에 쉽게 반응할 수 있게 해줍니다.
지속적 히스토리 관찰과 새로운 트랜잭션 추가 시 코드가 반응하도록 해주죠.
특정 종류의 변경만 관찰하고 대응하고 싶다면 물론 HistoryObserver를 사용해 모델 타입과 트랜잭션 작성자로 필터링할 수 있어요.
외부 서버와 같은 다른 시스템과 연동 시 효과적이죠.
외부와 연동하는 예시를 볼까요?

이렇게 간단히 코드로 나타내서 사용할 수 있습니다.
References
SwiftData의 새로운 기능 - WWDC26 - 비디오 - Apple Developer
SwiftData의 최신 개선 사항을 확인하세요. Codable을 사용하여 맞춤형 및 타사 유형을 유지하는 방법과 가져온 데이터를 SwiftUI 앱의 섹션으로 그룹화하는 방법을 안내합니다. 또한 ModelResultsObserver와
developer.apple.com
'SwiftData' 카테고리의 다른 글
Model your schema with SwiftData (feat. WWDC 2023) (11) 2023.06.13 Build an app with SwiftData (feat. WWDC 2023) (12) 2023.06.13 Meet SwiftData (feat. WWDC 2023) (8) 2023.06.08