Skip to content

필사 모드: 모던 Swift & Apple 개발 2026 완벽 가이드 - Swift 6 Strict Concurrency · SwiftData · Foundation Models · SwiftUI 5 · Vapor · TCA 심층 분석

한국어
0%
정확도 0%
💡 왼쪽 원문을 읽으면서 오른쪽에 따라 써보세요. Tab 키로 힌트를 받을 수 있습니다.
원문 렌더가 준비되기 전까지 텍스트 가이드로 표시합니다.

프롤로그 — 2026년 Swift가 다시 흥미로워진 이유

2014년 WWDC에서 Chris Lattner가 무대에 올라 "One more thing... a new programming language called Swift"라고 말했을 때, 많은 사람은 이것을 Objective-C의 더 깔끔한 후속자 정도로 받아들였다. 10년이 지난 2026년 5월, 그 평가는 완전히 바뀌어 있다.

Swift는 이제 단순히 iOS 앱을 만드는 언어가 아니다. Swift 6.1의 strict concurrency 모델은 데이터 레이스를 **컴파일타임에** 잡고, region-based isolation은 Sendable 어노테이션의 보일러플레이트를 크게 줄였다. SwiftData는 Codable 기반 영속화 + CloudKit 동기화를 한 줄의 매크로로 끝내고, Foundation Models 프레임워크는 약 30억 파라미터의 온디바이스 LLM을 Apple Silicon Neural Engine 위에서 돌린다.

서버에서는 Vapor 4와 Hummingbird 2가 async/await 위에 깔끔한 라우팅 DSL을 올렸고, AWS Lambda Swift는 콜드 스타트 100ms를 끊는다. Embedded Swift는 Raspberry Pi Pico와 ARM Cortex-M 위에서 malloc 없이 동작한다. Skip은 Swift 코드를 Kotlin으로 트랜스파일해서 Android에 떨군다.

이 글은 Swift 6 동시성 모델부터 SwiftData History API, Foundation Models tool calling, SwiftUI 5 ContainerValues, App Intents, Swift Testing, Swift Macros, SwiftPM 6, TCA 1.x, Vapor 4, Embedded Swift, Swift Wasm 6까지 — 2026년 Apple 개발자가 알아야 할 모든 변화를 한 번에 정리한다.

1장 · Swift 6 Strict Concurrency — 데이터 레이스를 컴파일타임에 잡다

Swift 6.0은 2024년 9월 GA됐고, 2026년 5월 stable은 6.1.2다. 가장 큰 변화는 **strict concurrency checking이 기본**이 됐다는 것이다.

Swift 5에서는 `-strict-concurrency=complete` 플래그를 켜야 데이터 레이스 경고가 나왔다. Swift 6은 이걸 기본 모드로 만들었다. 무엇이 바뀌나?

- 모든 actor-isolated 값은 actor 경계를 넘을 때 Sendable이어야 한다.

- non-Sendable 클래스가 `@MainActor`가 아닌 컨텍스트로 전달되면 컴파일 에러.

- 글로벌 변수는 `nonisolated(unsafe)` 또는 `@MainActor` 같은 명시적 isolation이 없으면 에러.

// Swift 5에서는 경고, Swift 6에서는 에러

class Counter {

var count = 0

}

func runConcurrently() async {

let counter = Counter()

Task { counter.count += 1 }

Task { counter.count += 1 }

// ❌ Counter가 Sendable이 아닌데 Task 클로저로 캡처됨

}

이걸 잡으려면 actor로 감싸거나, Sendable 프로토콜을 명시적으로 채택해야 한다. 처음에는 마이그레이션 비용이 크지만, 일단 통과하고 나면 데이터 레이스 클래스 버그가 사실상 제거된다.

2장 · Region-Based Isolation — Sendable의 보일러플레이트를 줄이다

Swift 6에 들어온 가장 우아한 기능 중 하나가 **region-based isolation**(SE-0414)이다. 핵심 아이디어 — **non-Sendable 값이라도 컴파일러가 "다른 스레드에서 접근하지 않는다"는 것을 추적할 수 있다면 안전하게 전달할 수 있다.**

// non-Sendable 클래스

class ImageBuffer {

var pixels: [UInt8] = []

}

func process() async {

let buffer = ImageBuffer()

buffer.pixels = generatePixels()

// Swift 5 strict: 에러 — ImageBuffer가 Sendable이 아님

// Swift 6: OK — buffer는 이 시점부터 호출자가 접근하지 않으므로 안전하게 transfer 가능

await processOnBackground(buffer)

}

컴파일러는 `buffer`가 함수 종료 전에 호출자 region에서 사용되지 않는다는 것을 정적 분석으로 증명하고, transfer를 허용한다. 이게 없었다면 `Sendable`을 따로 채택하거나 모든 데이터를 복사해야 했다.

실제 코드 베이스에서 region isolation 덕에 `Sendable` 어노테이션 50~70%를 제거할 수 있다는 게 일반적 보고다. iOS 17·18 시대의 SwiftUI 코드가 Swift 6에서 훨씬 깔끔해진 이유.

3장 · @MainActor 개선과 nonisolated(unsafe)

SwiftUI는 모든 View가 암묵적으로 `@MainActor`인 모델이다. Swift 6은 이걸 더 정교하게 만들었다.

- `@MainActor`가 클래스 단위로 붙으면 모든 메서드/프로퍼티가 메인 스레드 격리.

- 메서드 단위로 붙이면 그 메서드만.

- `nonisolated` 키워드로 격리를 명시적으로 해제 가능.

- `nonisolated(unsafe)` — Swift 6에서 도입된 escape hatch. "이 변수는 isolation 검사를 하지 않을게, 내가 책임진다."

@MainActor

class ViewModel {

var items: [Item] = []

nonisolated(unsafe) static let shared = ViewModel()

// ↑ 이게 없으면 글로벌 ViewModel.shared는 main actor 격리 위반

}

`nonisolated(unsafe)`는 마이그레이션 도구다. 시간을 내서 진짜 actor로 바꿔야 하지만, 우선 컴파일은 통과시키고 빠르게 출시할 수 있게 해준다.

4장 · Embedded Swift — Raspberry Pi Pico에서 malloc 없이

2024년에 공개된 **Embedded Swift**는 Swift를 임베디드 마이크로컨트롤러로 끌어내린 프로젝트다. 2026년 5월 시점에 production-ready 직전 단계.

핵심 제약:

- **No malloc** — 동적 메모리 할당 없이 동작. ARC도 stack/static에만.

- **Small binary** — `Hello, world` 바이너리가 10KB 미만 (vs 일반 Swift 1.5MB).

- **No reflection / no runtime metadata** — 코드 크기 폭발 방지.

- **No Foundation** — 표준 라이브러리 일부만 사용.

지원 타깃:

- Raspberry Pi Pico (RP2040, ARM Cortex-M0+)

- ESP32-C6 (RISC-V)

- STM32 시리즈 (Cortex-M3/M4)

- Apple의 Secure Enclave 일부 펌웨어

@_extern(c, "gpio_put")

func gpio_put(pin: UInt32, value: Bool)

@main struct Blink {

static func main() {

while true {

gpio_put(pin: 25, value: true)

sleep_ms(500)

gpio_put(pin: 25, value: false)

sleep_ms(500)

}

}

}

Apple은 자기네 SoC 펌웨어를 점진적으로 Swift로 옮기고 있고, 한국 라온시큐어 같은 보안 회사도 ARM Cortex-M HSM 펌웨어에 Embedded Swift를 실험 중이다.

5장 · SwiftData — Core Data를 대체하는 Codable 영속화

SwiftData는 iOS 17에서 처음 등장한 영속화 프레임워크다. Core Data를 모던 Swift 위에 재포장한 것에 가깝지만, 차이가 크다.

iOS 18에서 들어온 주요 기능:

- **History API** — 다른 디바이스에서 일어난 변경을 history transaction으로 추적. CloudKit 동기화 후 어떤 행이 들어왔는지 정확히 알 수 있다.

- **Composite keys** — 두 개 이상 필드 조합으로 unique 키 정의.

- **Indexes** — `@Attribute(.indexBinary)` 매크로로 binary index 생성.

- **#Predicate 매크로** — 타입 안전한 쿼리. SQL 인젝션 클래스 위험 제거.

@Model

final class Note {

var title: String

var body: String

var createdAt: Date

@Attribute(.indexBinary)

var tags: [String]

init(title: String, body: String) {

self.title = title

self.body = body

self.createdAt = .now

}

}

// 쿼리

let recent = try modelContext.fetch(

FetchDescriptor(predicate: #Predicate { $0.createdAt > Date.distantPast })

)

CloudKit 통합도 한 줄. `ModelConfiguration(cloudKitDatabase: .private("iCloud.com.example"))`만 추가하면 자동 동기화. 2026년 시점에서 신규 앱이 Core Data를 새로 쓸 이유가 거의 없다.

6장 · Observation Framework — @Observable 매크로

iOS 17에서 `Combine`의 `ObservableObject` + `@Published`를 대체하는 새 framework가 들어왔다. 이름은 **Observation**.

Before (Combine 시대):

class ViewModel: ObservableObject {

@Published var items: [Item] = []

@Published var isLoading = false

}

After (Observation 시대):

@Observable

class ViewModel {

var items: [Item] = []

var isLoading = false

}

`@Observable`은 Swift Macro로 구현됐다. 컴파일 타임에 KeyPath 추적과 willSet 트리거를 자동으로 합성한다. 차이점:

- **자동 의존성 추적** — View 안에서 실제로 읽은 프로퍼티만 다시 그린다. `@Published` 전체 재구독보다 효율적.

- **`@StateObject` 불필요** — `@State`로 끝.

- **Combine 종속성 제거** — `import Combine` 안 해도 됨.

대규모 앱일수록 리렌더 횟수가 줄어드는 효과가 크다.

7장 · Foundation Models — 온디바이스 LLM이 표준 API로

2024년 WWDC에서 공개된 **Foundation Models** 프레임워크는 Apple Intelligence의 핵심이다. iOS 18.4·macOS 15부터 정식 API로 풀렸다.

스펙:

- 약 30억 파라미터 규모의 디코더 전용 LLM.

- Apple Silicon Neural Engine에서 양자화된 가중치로 추론.

- M2 이상 / A17 Pro 이상에서 동작.

- 컨텍스트 약 8K 토큰.

기본 사용:

let session = LanguageModelSession()

let response = try await session.respond(to: "Summarize this email in 2 sentences: ...")

print(response.content)

핵심 기능 두 가지:

- **Tool calling** — 모델이 호출 가능한 함수를 등록하면, 자연어 요청을 받았을 때 적절한 함수를 호출.

- **Guided Generation** — 출력 스키마를 Swift 타입으로 지정하면 JSON 안 거치고 직접 Swift struct를 받음.

@Generable

struct WeatherQuery {

var city: String

var unit: TemperatureUnit

}

let query: WeatherQuery = try await session.respond(

to: "How hot is it in Seoul in fahrenheit?",

generating: WeatherQuery.self

)

// query.city == "Seoul", query.unit == .fahrenheit

서버 LLM과 비교하면 컨텍스트와 추론 능력은 약하지만, **온디바이스 + 무료 + 프라이버시**라는 세 가지 강점이 비할 데 없다.

8장 · App Intents — Siri와 Apple Intelligence의 진입점

App Intents는 iOS 16에서 시작된 프레임워크인데, Apple Intelligence와 합쳐지면서 위상이 완전히 달라졌다. 2026년 시점에서 App Intent를 등록하면:

- Siri가 자연어로 호출 가능.

- App Shortcuts에 자동 노출.

- Spotlight 검색 결과로 등장.

- Apple Intelligence가 다른 앱의 컨텍스트를 가져올 때 사용.

struct AddNoteIntent: AppIntent {

static let title: LocalizedStringResource = "Add Note"

@Parameter(title: "Title")

var noteTitle: String

@Parameter(title: "Body")

var body: String

func perform() async throws -> some IntentResult {

let note = Note(title: noteTitle, body: body)

try modelContext.insert(note)

return .result(value: note.id)

}

}

이게 등록되어 있으면 "노트 앱에 회의 메모 추가해줘"라는 Siri 명령이 정확한 매개변수로 매핑된다. 2026년 Apple은 App Intent 등록을 **사실상 의무화**하는 방향으로 가고 있다.

9장 · SwiftUI 5·6 — 애니메이션과 ContainerValues

iOS 17에서 SwiftUI 5, iOS 18에서 SwiftUI 6가 나왔다. 주요 변화들:

- **CustomAnimation 프로토콜** — 임의의 timing function 정의 가능.

- **PhaseAnimator** — 여러 단계의 애니메이션을 자동 순차 재생.

- **Metal Shader Effects** — `.colorEffect()`, `.distortionEffect()`로 GPU 셰이더 직접 적용.

- **Scroll APIs** — `.scrollPosition()`, `.scrollTransition()`, `.scrollTargetBehavior()` 도입.

- **ContainerValues** — `@Entry`로 컨테이너에 임의 키-값 전달. ForEach 자식에 props 흘리기가 깔끔해짐.

- **Custom Layout** — `Layout` 프로토콜 — 자체 레이아웃 알고리즘 구현. CGSize 기반 placement.

ScrollView {

LazyVStack {

ForEach(items) { item in

Card(item)

.scrollTransition { content, phase in

content

.scaleEffect(phase.isIdentity ? 1 : 0.85)

.opacity(phase.isIdentity ? 1 : 0.5)

}

}

}

.scrollTargetLayout()

}

.scrollTargetBehavior(.viewAligned)

이 정도 인터랙션을 UIKit으로 짜면 200줄, SwiftUI 5에서는 10줄.

10장 · Swift Charts 2.0 — 벡터화 렌더링과 3D

Swift Charts는 2022년에 처음 발표됐고 2026년 5월 stable은 2.0. 핵심 변화:

- **벡터화 렌더링** — Metal 백엔드로 수만 개 데이터 포인트를 60fps로 렌더링.

- **3D 차트** — `Chart3D` API로 RealityKit 위에 띄움. visionOS에서 특히 매력적.

- **상호작용 강화** — `chartScrollableAxes`, `chartXSelection` — 핀치 줌, 드래그, 선택.

- **Heatmap, Sankey, Treemap** 마크 정식 지원.

Chart {

ForEach(data) { point in

LineMark(

x: .value("Time", point.time),

y: .value("Value", point.value)

)

.interpolationMethod(.catmullRom)

.foregroundStyle(by: .value("Series", point.series))

}

}

.chartXSelection(value: $selectedTime)

.chartScrollableAxes(.horizontal)

데이터 분석 SwiftUI 앱이 2026년에 폭발적으로 늘어난 배경에는 Swift Charts 2.0의 기여가 크다.

11장 · Swift Testing — XCTest를 대체하는 모던 테스트 프레임워크

XCTest는 2014년 이래 Apple 플랫폼의 표준 테스트 프레임워크였지만, 매크로 기반 모던 Swift와 잘 맞지 않았다. 2024년 발표된 **Swift Testing**(swift-testing)이 그 자리를 빠르게 차지하고 있다.

@Test func basicAddition() {

#expect(2 + 2 == 4)

}

@Test(arguments: [1, 2, 3, 4, 5])

func square(value: Int) {

#expect(value * value >= value)

}

@Test("Network call returns 200")

func networkSuccess() async throws {

let response = try await fetchUser(id: 42)

#expect(response.status == 200)

}

핵심 개선:

- **`@Test` 어노테이션** — `XCTestCase` 상속 없이 함수 단위로 테스트.

- **`#expect` 매크로** — `XCTAssertEqual` 등의 길고 약한 어설션을 대체.

- **Parameterized tests** — 한 함수에 여러 입력 자동 생성.

- **Trait 시스템** — `.disabled`, `.timeLimit(.minutes(2))`, `.tags(.integration)` 같은 메타데이터.

- **병렬 실행 기본** — 테스트 간 격리가 명시적.

2026년 5월 stable은 swift-testing 0.10.x이고, Xcode 16부터 IDE에 1급 통합됐다.

12장 · Swift Macros — 컴파일 타임 코드 생성

Swift 5.9에서 도입된 매크로 시스템은 2026년에 완전히 안정화됐다. 두 가지 종류:

- **Freestanding macro** — `#stringify(2+2)`, `#expect(x > 0)` 처럼 식이나 문 자리에 호출.

- **Attached macro** — `@Observable`, `@Model`, `@Generable`처럼 선언에 붙임.

매크로는 swift-syntax 600 위에서 SwiftSyntax 트리를 받아 새로운 SwiftSyntax 트리를 반환하는 컴파일러 플러그인이다.

@freestanding(expression)

public macro stringify<T>(_ value: T) -> (T, String) = #externalMacro(

module: "MyMacros",

type: "StringifyMacro"

)

let (result, source) = #stringify(2 + 3)

// result == 5, source == "2 + 3"

매크로의 좋은 점:

- 보일러플레이트(Codable, Equatable, Mock 등) 자동 합성.

- KeyPath, 의존성, DSL 같은 메타프로그래밍에서 컴파일 타임 검증.

- 런타임 비용 0.

단점은 빌드 시간 증가와 디버깅 어려움. 매크로 expansion을 디버깅하려면 Xcode "Expand Macro" 메뉴로 결과 코드를 펼쳐봐야 한다.

13장 · Swift Package Manager 6 + Swift Build

Swift Package Manager는 2026년에 6.0 메이저 업데이트가 들어왔다. 가장 큰 변화는 **Swift Build**의 도입이다.

Swift Build는 Apple이 xcodebuild의 내부 빌드 엔진을 오픈소스화한 것. 기존 SwiftPM의 llbuild를 점진적으로 대체하고, 결과적으로 SwiftPM 빌드와 Xcode 빌드가 같은 엔진 위에서 돈다.

SwiftPM 6의 다른 변화:

- **Package traits** — Cargo의 feature flag와 동등한 기능. 패키지가 옵션 의존성을 선언할 수 있다.

- **Strict concurrency** — 매니페스트가 Swift 6 모드를 기본.

- **Prebuilt binaries** — `binaryTarget` 개선, 멀티 아키텍처 XCFramework 자동 생성.

- **Workspace 개선** — 멀티 패키지 모노레포 지원이 더 매끄러워짐.

let package = Package(

name: "MyApp",

traits: [

.default(enabledTraits: ["network"]),

"logging",

],

dependencies: [

.package(url: "https://github.com/apple/swift-log", from: "1.5.0"),

],

targets: [

.target(

name: "MyApp",

dependencies: [

.product(name: "Logging", package: "swift-log", condition: .when(traits: ["logging"]))

]

)

]

)

이전까지 SwiftPM의 가장 큰 약점이었던 conditional dependency와 IDE 통합이 SwiftPM 6에서 한 번에 풀렸다.

14장 · Vapor 4.x — Server-Side Swift의 사실상 표준

Vapor는 2016년부터 시작된 Swift 서버 프레임워크다. 2026년 5월 stable은 4.95.

특징:

- **async/await 우선** — 모든 핸들러가 `async throws` 시그니처.

- **NIO 기반** — Apple SwiftNIO 위에서 동작. 이벤트 루프 + non-blocking IO.

- **Fluent ORM** — Postgres·MySQL·SQLite 지원. Swift 타입 안전 쿼리.

- **Leaf 템플릿** — Server-Side rendering 필요 시.

- **JWT, OAuth, WebSocket** 등 표준 패턴 내장.

func routes(_ app: Application) throws {

app.get("users", ":id") { req async throws -> User in

guard let id = req.parameters.get("id", as: UUID.self) else {

throw Abort(.badRequest)

}

return try await User.find(id, on: req.db).orThrow(.notFound)

}

app.post("users") { req async throws -> User in

let payload = try req.content.decode(User.Create.self)

let user = User(name: payload.name)

try await user.save(on: req.db)

return user

}

}

Vapor 외에 **Hummingbird 2**(애플 사내 엔지니어들이 만든 가벼운 대안)와 **AWS Lambda Swift Runtime**(콜드 스타트 100ms 이하)이 자라고 있다. 한국에서는 토스 같은 회사가 일부 마이크로서비스를 Vapor로 옮긴 사례가 있다.

15장 · The Composable Architecture (TCA) 1.x

Point-Free의 Brandon Williams와 Stephen Celis가 만든 **The Composable Architecture**는 SwiftUI 시대의 가장 영향력 있는 아키텍처 라이브러리다. 2024년에 1.0이 GA됐고 2026년 5월 stable은 1.18.x.

핵심 개념:

- **State** — 화면 상태를 단일 struct로.

- **Action** — 가능한 모든 사용자/시스템 액션을 enum으로.

- **Reducer** — `(inout State, Action) -> Effect<Action>` 형태의 순수 함수.

- **Store** — State를 보관하고 Action을 reducer에 흘림.

- **Dependencies** — 시스템 의존성(시계, 네트워크 등)을 명시적 주입.

@Reducer

struct CounterFeature {

@ObservableState

struct State {

var count = 0

var isLoading = false

}

enum Action {

case incrementTapped

case fetchNumberTapped

case numberResponse(Int)

}

@Dependency(\.numberFact) var numberFact

var body: some ReducerOf<Self> {

Reduce { state, action in

switch action {

case .incrementTapped:

state.count += 1

return .none

case .fetchNumberTapped:

state.isLoading = true

return .run { send in

let n = try await numberFact.random()

await send(.numberResponse(n))

}

case .numberResponse(let n):

state.count = n

state.isLoading = false

return .none

}

}

}

}

2024~2026 사이 들어온 중요한 변화:

- **`@Reducer` 매크로** — 보일러플레이트 대폭 축소.

- **`@ObservableState`** — Observation 프레임워크와 통합.

- **Scoped stores** — child feature에 store 자르기가 간결.

- **swift-sharing** — TCA 바깥에서 `@Shared` 프로퍼티 래퍼로 상태 공유.

대규모 SwiftUI 앱(특히 Kakao Pay·당근마켓·라인 일본 일부)에서 TCA 채택률이 빠르게 늘었다.

16장 · swift-async-algorithms와 swift-collections

표준 라이브러리만으로 부족한 경우를 위해 Apple은 **swift-async-algorithms**와 **swift-collections**를 제공한다.

**swift-async-algorithms**:

- `AsyncSequence` 확장 — `.chunks(ofCount:)`, `.combineLatest`, `.merge`, `.throttle`, `.debounce`.

- Reactive 스트림(`Combine`)을 async/await 세계로 옮겨오는 다리.

let sensorStream: AsyncSequence<Reading, Error> = ...

for try await chunk in sensorStream.chunks(ofCount: 100) {

let avg = chunk.map(\.value).reduce(0, +) / 100

print("Avg over 100 samples: \(avg)")

}

**swift-collections**:

- `Deque`, `OrderedSet`, `OrderedDictionary`, `Heap` 등 표준 라이브러리에 없는 컬렉션.

- 모두 Swift 표준 컬렉션 프로토콜 준수.

- 성능이 표준 `Array`·`Set` 대비 특정 패턴에서 훨씬 좋음.

var queue: Deque<Task> = []

queue.append(task1)

queue.prepend(urgentTask)

let next = queue.popFirst()

이 두 패키지는 사실상 "Swift 1.6 표준 라이브러리 확장팩" 위치다.

17장 · swift-syntax와 swift-distributed-actors

**swift-syntax**(600 시리즈)는 매크로 작성의 핵심이다. Swift 소스를 AST로 파싱하고 다시 인쇄하는 라이브러리.

public struct LoggedMacro: PeerMacro {

public static func expansion(

of node: AttributeSyntax,

providingPeersOf declaration: some DeclSyntaxProtocol,

in context: some MacroExpansionContext

) throws -> [DeclSyntax] {

// declaration을 받아서 로그를 찍는 wrapper 메서드를 생성

// ...

}

}

**swift-distributed-actors**는 Actor 모델을 네트워크 너머로 확장한 프로젝트. 2024년 Apple이 GitHub에 공개했고, 2026년 5월 시점은 cluster 기능까지 GA. Erlang/Akka 같은 분산 시스템을 Swift로 짤 때 쓴다.

distributed actor ChatRoom {

distributed func broadcast(_ message: String) async { ... }

}

let cluster = await ClusterSystem("MyCluster")

let room = try ChatRoom.resolve(id: roomID, using: cluster)

try await room.broadcast("Hello")

게임 백엔드, IoT 메시지 브로커, edge compute에 어울리는 도구. 한국 NCsoft 일부 신규 게임 서버가 swift-distributed-actors PoC를 돌렸다는 소문이 있다.

18장 · AWS Lambda Swift Runtime — 콜드 스타트 100ms

서버 Swift의 또 다른 영역은 **AWS Lambda**다. AWS Lambda Swift Runtime은 Apple과 AWS가 공동 관리하는 공식 런타임이고, 콜드 스타트가 보통 100ms 이하다.

struct HelloHandler: LambdaHandler {

typealias Event = APIGatewayV2Request

typealias Output = APIGatewayV2Response

func handle(_ event: Event, context: LambdaContext) async throws -> Output {

return APIGatewayV2Response(statusCode: .ok, body: "Hello from Swift!")

}

}

Lambda.run(HelloHandler.init)

배포는 `swift build` + `zip` + `aws lambda update-function-code` 3단계. Docker 이미지로 패키징도 가능.

장점:

- 단일 바이너리, 빠른 콜드 스타트.

- async/await 모델이 Lambda의 invocation 모델과 잘 맞음.

- Apple 사내에서도 일부 백엔드를 Lambda Swift로 운영하는 것으로 알려짐.

단점:

- ARM64 Lambda 환경에서 빌드해야 함(혹은 Docker 크로스 빌드).

- 라이브러리 생태계가 아직 Node.js·Python보다 좁음.

19장 · Cross-Platform — Skip(Swift→Android)과 Swift Wasm 6

Swift는 Linux와 Windows에서 진작 동작했지만, 모바일 크로스 플랫폼은 오래 약점이었다. 2026년에는 두 가지 흥미로운 선택지가 있다.

**Skip**(skip.tools)은 Swift 코드를 Kotlin으로 트랜스파일해서 Android 앱을 만든다. SwiftUI를 그대로 쓰면 Skip이 Jetpack Compose 코드로 변환한다.

// 같은 SwiftUI 코드가...

struct ContentView: View {

@State var count = 0

var body: some View {

VStack {

Text("Count: \(count)")

Button("Increment") { count += 1 }

}

}

}

// ↑ iOS에서는 SwiftUI로, Android에서는 Compose로 동작

**Swift Wasm 6**은 Swift를 WebAssembly로 컴파일한다. 2024년 Wasm 6가 GA되면서 component model 호환이 들어왔고, 브라우저와 서버리스 Wasm(Fastly, Cloudflare Workers) 양쪽에서 동작.

두 프로젝트 모두 "Apple 공식"은 아니지만 Swift workgroup이 적극 관여하고 있고, 2026년 시점에서 production 사례가 늘고 있다.

20장 · 한국/일본 Apple 개발 커뮤니티

Swift는 한국과 일본에서 강한 풀뿌리 커뮤니티를 가지고 있다.

**한국**:

- **GDG iOS Korea** — 분기마다 밋업, 발표 슬라이드와 영상 공개.

- **let's swift** — 매년 12월 코엑스에서 열리는 컨퍼런스. 2025년 5회차에는 1500명 참가.

- **Codestates iOS 부트캠프**, **F-Lab** 등 신규 개발자 트레이닝.

- 회사 풍경 — 카카오, 토스, 당근마켓, 라인 코리아, 쿠팡 iOS 팀이 활발.

**일본**:

- **iOSDC Japan** — 매년 9월 도쿄. iOS 컨퍼런스 중 가장 큰 규모, 1주일 동안 3000명 이상.

- **try! Swift Tokyo** — 글로벌 Swift 컨퍼런스. 2025년 3월에 9회차 진행.

- **potatotips** — 매월 도쿄/오사카에서 열리는 5분 발표 모임. 200회 이상 누적.

- 회사 풍경 — Mercari, LINE, Cookpad, ZOZO, DeNA, CyberAgent가 활발.

영어권 자료만 보면 놓치기 쉬운데, 한국어/일본어 Swift 커뮤니티가 가지고 있는 노하우의 깊이는 만만치 않다.

21장 · 의사결정 가이드 — 어떤 도구를 언제 쓸까

질문 1. 어떤 플랫폼?

├─ iOS / macOS 단일 → SwiftUI 6 + SwiftData + Observation

├─ iOS + Android → Skip 또는 React Native / Flutter

├─ 서버 → Vapor 4 또는 Hummingbird 2

├─ AWS Lambda → AWS Lambda Swift Runtime

├─ 임베디드 → Embedded Swift

└─ 브라우저 → Swift Wasm 6

질문 2. 영속화는?

├─ 로컬 단순 → SwiftData

├─ CloudKit 동기화 → SwiftData + cloudKitDatabase

├─ 서버 RDB → Vapor + Fluent

└─ 기존 Core Data 자산 → Core Data 유지 (마이그레이션 비용 계산)

질문 3. 상태 관리는?

├─ 소규모 화면 → @State + @Observable

├─ 중규모 화면 → @Observable + Environment

├─ 대규모 앱 → TCA 1.x

└─ 분산 시스템 → swift-distributed-actors

질문 4. LLM이 필요한가?

├─ 온디바이스 + 무료 → Foundation Models

├─ 강력한 추론 필요 → 서버 LLM (Claude, GPT) API 호출

└─ Apple Intelligence 통합 → App Intents + Foundation Models 조합

22장 · 흔한 마이그레이션 함정

Swift 5 → Swift 6 마이그레이션에서 자주 보는 패턴:

- **글로벌 mutable 변수** — `nonisolated(unsafe)` 또는 actor로 감싸기. 둘 다 안 된다면 컴파일 안 됨.

- **Combine 의존** — Observation으로 옮길 때 일부 Combine 연산자(`.share()`, `.multicast()`)는 대체가 어려움. swift-async-algorithms가 메우는 중.

- **Singleton 패턴** — `static let shared`가 `@MainActor` 객체일 때 충돌. `nonisolated(unsafe)` 또는 isolated init이 필요.

- **DispatchQueue 잔재** — `DispatchQueue.main.async` 호출이 actor 모델과 섞이면 race 가능. 가급적 `await MainActor.run { ... }` 또는 `@MainActor`로 일관성 유지.

- **Core Data → SwiftData** — `@Model` 자동 합성과 기존 NSManagedObject가 다른 메모리 모델. 점진적 마이그레이션 API는 있지만, 큰 앱에서 1년 이상 걸리는 게 보통.

급하게 옮기지 말고, 모듈 단위로 천천히. Apple도 strict concurrency 마이그레이션에 3년을 잡았다.

23장 · 2026년 Apple 개발의 풍경

정리하면:

1. **Swift 6 strict concurrency가 기본** — 데이터 레이스 클래스 버그가 사실상 사라짐.

2. **SwiftData가 Core Data를 대체** — 신규 앱은 SwiftData가 default 선택지.

3. **Observation이 Combine을 대체** — `@Observable`이 새 표준.

4. **Foundation Models가 Apple Intelligence 핵심** — 온디바이스 LLM이 무료 API로 풀림.

5. **App Intents 등록은 사실상 의무** — Siri, Spotlight, Apple Intelligence 통합 전부 여기 의존.

6. **Swift Testing이 XCTest를 대체** — 매크로 기반 모던 테스트.

7. **SwiftPM 6 + Swift Build** — 빌드 시스템이 통합되고 traits로 conditional dependency 해결.

8. **서버 Swift 성장** — Vapor, Hummingbird, AWS Lambda Swift.

9. **TCA가 대규모 SwiftUI 앱 표준 아키텍처** — Point-Free의 영향력 커짐.

10. **Embedded Swift 등장** — Swift가 마이크로컨트롤러까지 내려옴.

11. **Cross-platform 옵션 다양화** — Skip, Swift Wasm 6.

Apple 개발자에게 2026년은 학습 부담이 큰 해다. 그러나 새 도구 하나하나가 클래스를 갈아치우는 변화여서, 한 번 익히면 코드 베이스의 안전성과 표현력이 크게 올라간다.

마지막 조언 — 새 프로젝트라면 무조건 Swift 6 strict concurrency·SwiftData·Observation·SwiftUI 6를 default로 깔고 시작하자. 기존 프로젝트라면 모듈 단위로 천천히. 그리고 Apple의 WWDC 세션과 swift.org 블로그를 매년 가을과 봄에 꼭 챙겨보자.

참고 자료 (References)

1. Swift.org — [https://www.swift.org/](https://www.swift.org/)

2. Swift 6 announcement — [https://www.swift.org/blog/announcing-swift-6/](https://www.swift.org/blog/announcing-swift-6/)

3. Swift Evolution — [https://github.com/swiftlang/swift-evolution](https://github.com/swiftlang/swift-evolution)

4. SE-0414 Region-based Isolation — [https://github.com/swiftlang/swift-evolution/blob/main/proposals/0414-region-based-isolation.md](https://github.com/swiftlang/swift-evolution/blob/main/proposals/0414-region-based-isolation.md)

5. Embedded Swift documentation — [https://github.com/swiftlang/swift/blob/main/docs/EmbeddedSwift.md](https://github.com/swiftlang/swift/blob/main/docs/EmbeddedSwift.md)

6. SwiftData official docs — [https://developer.apple.com/documentation/swiftdata](https://developer.apple.com/documentation/swiftdata)

7. Observation framework — [https://developer.apple.com/documentation/observation](https://developer.apple.com/documentation/observation)

8. Foundation Models framework — [https://developer.apple.com/documentation/foundationmodels](https://developer.apple.com/documentation/foundationmodels)

9. App Intents — [https://developer.apple.com/documentation/appintents](https://developer.apple.com/documentation/appintents)

10. SwiftUI documentation — [https://developer.apple.com/documentation/swiftui](https://developer.apple.com/documentation/swiftui)

11. Swift Charts — [https://developer.apple.com/documentation/charts](https://developer.apple.com/documentation/charts)

12. Swift Testing — [https://github.com/swiftlang/swift-testing](https://github.com/swiftlang/swift-testing)

13. Swift Macros guide — [https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros/](https://docs.swift.org/swift-book/documentation/the-swift-programming-language/macros/)

14. swift-syntax — [https://github.com/swiftlang/swift-syntax](https://github.com/swiftlang/swift-syntax)

15. Swift Package Manager — [https://github.com/swiftlang/swift-package-manager](https://github.com/swiftlang/swift-package-manager)

16. Swift Build — [https://github.com/swiftlang/swift-build](https://github.com/swiftlang/swift-build)

17. Vapor — [https://vapor.codes/](https://vapor.codes/)

18. Hummingbird — [https://hummingbird.codes/](https://hummingbird.codes/)

19. AWS Lambda Swift Runtime — [https://github.com/swift-server/swift-aws-lambda-runtime](https://github.com/swift-server/swift-aws-lambda-runtime)

20. The Composable Architecture — [https://github.com/pointfreeco/swift-composable-architecture](https://github.com/pointfreeco/swift-composable-architecture)

21. Point-Free — [https://www.pointfree.co/](https://www.pointfree.co/)

22. swift-sharing — [https://github.com/pointfreeco/swift-sharing](https://github.com/pointfreeco/swift-sharing)

23. swift-async-algorithms — [https://github.com/apple/swift-async-algorithms](https://github.com/apple/swift-async-algorithms)

24. swift-collections — [https://github.com/apple/swift-collections](https://github.com/apple/swift-collections)

25. swift-distributed-actors — [https://github.com/apple/swift-distributed-actors](https://github.com/apple/swift-distributed-actors)

26. Skip (Swift to Android) — [https://skip.tools/](https://skip.tools/)

27. Swift Wasm — [https://swiftwasm.org/](https://swiftwasm.org/)

28. Hacking with Swift — [https://www.hackingwithswift.com/](https://www.hackingwithswift.com/)

29. let's swift conference — [https://letsswift.kr/](https://letsswift.kr/)

30. iOSDC Japan — [https://iosdc.jp/](https://iosdc.jp/)

31. try! Swift Tokyo — [https://www.tryswift.co/](https://www.tryswift.co/)

현재 단락 (1/474)

2014년 WWDC에서 Chris Lattner가 무대에 올라 "One more thing... a new programming language called Swift"라고 말했을...

작성 글자: 0원문 글자: 20,031작성 단락: 0/474