jaysnote
6분

그 API가 알아서 골라주나? — Apple Foundation Models, 온디바이스 vs 클라우드는 누가 정하나

WWDC26 Foundation Models framework. 'API가 복잡도를 보고 온디바이스/PCC를 자동으로 고른다'는 흔한 오해를 코드와 함께 풀고, 실제로는 개발자가 명시적으로 선택하되 통일된 API 덕에 전환만 쉬운 구조임을 정리합니다. '진짜 자동 라우팅'은 어디에 있는지도.

Apple의 Foundation Models framework는 하나의 Swift API로 온디바이스 모델, Private Cloud Compute(PCC), 심지어 Claude·Gemini 같은 서드파티 클라우드까지 같은 call site에서 부를 수 있습니다. 그래서 흔히 이런 기대를 합니다 — “API가 요청 복잡도를 보고 알아서 온디바이스/클라우드를 골라주겠지?”

결론부터: 아닙니다. 개발자가 쓰는 API는 자동으로 분기하지 않습니다. 어느 모델로 보낼지는 개발자가 명시적으로 고릅니다. 다만 API 모양이 통일돼 있어 전환이 한 줄일 뿐입니다. “자동으로 알아서 나눠준다”는 동작은 따로 있지만, 그건 개발자 API가 아니라 Apple 자사 기능(Siri·Apple Intelligence) 안쪽 이야기입니다. 이 둘을 헷갈리면 설계를 통째로 오해하게 됩니다.


1. 오해부터 — “통일 API = 자동 분기”가 아니다

오해 vs 실제 — 자동 분기가 아니라 명시적 선택

“call site 하나로 온디바이스든 클라우드든 부른다”는 말은 맞습니다. 하지만 그게 “프레임워크가 복잡도를 재서 목적지를 정한다”는 뜻은 아닙니다. 통일된 건 인터페이스의사결정이 아닙니다.

한 줄로: 통일된 건 “어떻게 부르나(API 모양)“이지, “어디로 보내나(목적지 판단)“가 아니다. 목적지는 개발자가 코드로 지정한다.


2. 개발자가 쓰는 코드 — 차이는 딱 한 줄

세션을 만들 때 모델을 지정합니다. 기본은 온디바이스, PCC로 보내려면 모델만 바꿔 끼웁니다.

온디바이스 ↔ PCC — 세션 생성 한 줄만 바뀐다

// 온디바이스 (기본) — SystemLanguageModel
let session = LanguageModelSession()

// Private Cloud Compute — 모델만 교체
let session = LanguageModelSession(
    model: PrivateCloudComputeLanguageModel()
)

바뀌는 건 세션 생성 한 줄뿐입니다. 그 아래 structured output, tool calling, 스트리밍을 다루는 나머지 코드는 그대로 돌아갑니다. contextSize 같은 속성도 SystemLanguageModelPrivateCloudComputeLanguageModel 양쪽에 똑같이 있습니다. 이게 “전환이 쉽다”의 정확한 의미입니다 — 목적지를 개발자가 고르되, 고른 뒤의 코드가 동일한 것.

한 줄로: 분기는 “프레임워크의 런타임 판단”이 아니라 “개발자의 컴파일타임 선택”이다.


3. WWDC26이 직접 못 박은 말

이건 추측이 아니라 Apple이 세션에서 명시한 내용입니다.

  • “When writing a feature using Foundation Models, deciding which model to use is an important decision.” — 모델 선택은 개발자가 내리는 중요한 결정.
  • 서버 모델 옵션은 기본값이 아니라 의도적 선택“a deliberate choice, not a default.”
  • 게다가 그 선택을 감(感)이 아니라 데이터로 하라고 권합니다 — “make that decision based on data, not just vibes. Evaluating lets you understand the quality of your specific feature.”

즉 Apple의 메시지는 “알아서 해줄 테니 신경 끄세요”가 아니라, 정반대로 “온디바이스로 충분한지 직접 평가해서 정하라”입니다. 자동 라우팅이 있었다면 나올 수 없는 권고입니다.

한 줄로: “deliberate choice, not a default” — 한 문장이 자동 라우팅설을 정리한다.


4. 그럼 “자동으로 나눠준다”는 어디서 나온 말인가

분명 어디선가 “Apple이 가벼운 건 폰에서, 무거운 건 클라우드로 알아서 넘긴다”는 말을 들었을 겁니다. 그 말은 맞습니다 — 단, 층위가 다릅니다.

두 층위 — 개발자 앱은 명시 선택, OS 기능은 자동 에스컬레이션

자동 에스컬레이션은 Apple 자사 기능(Siri·Apple Intelligence) 안에서 일어납니다. 기기 안의 modelmanagerd라는 데몬이 백그라운드에서 “로컬로 처리 가능한가”를 판정하고, 안 되면 PCC로 넘깁니다. 사용자에게도 보이지 않고, 서드파티 개발자가 호출하는 API의 동작도 아닙니다. (이 OS 내부 분기의 판정 기준 자체는 문서화돼 있지 않다는 게 별도의 논점입니다.)

정리하면 같은 “온디바이스↔클라우드”라도 주체가 둘입니다.

누가 정하나기준대상
개발자 API (Foundation Models framework)개발자가 코드로개발자의 평가·판단내 앱의 기능
OS 기능 (Siri·Apple Intelligence)시스템이 자동으로modelmanagerd의 내부 판정(비공개)Apple 자사 기능

한 줄로: “자동 라우팅”은 OS가 자기 기능에 적용하는 것이고, 내 앱이 부르는 API는 내가 목적지를 정한다.


5. 왜 이렇게 설계했나

자동으로 안 골라주는 게 불편해 보일 수 있지만, 개발자 입장에선 이유가 분명합니다.

  • 예측 가능성 — 같은 입력이 어떤 땐 폰에서, 어떤 땐 클라우드에서 처리되면 지연시간·결과 품질·프라이버시 특성이 들쭉날쭉해집니다. 목적지를 고정하면 동작이 결정적입니다.
  • 평가 기반 결정 — 내 기능엔 온디바이스로 충분할 수도, 안 될 수도 있습니다. 그건 내가 측정해서 정할 문제지 프레임워크가 짐작할 문제가 아닙니다.
  • 프라이버시 통제 — “이 데이터는 절대 기기를 떠나지 않는다”를 코드로 보장하려면, 목적지가 개발자 손에 있어야 합니다.

그리고 같은 통일 API의 진짜 효용은 여기서 나옵니다 — 목적지를 바꾸는 비용이 거의 0이라는 것. 온디바이스로 프로토타이핑하다가 PCC로, 혹은 SPM 의존성만 바꿔 Claude·Gemini 같은 서드파티 클라우드로 세션 로직을 건드리지 않고 갈아끼울 수 있습니다. “자동 선택” 대신 “무비용 전환”을 준 셈입니다.


정리

처음 질문 — “그 API가 알아서 골라주나?” — 에 대한 답:

  • 개발자 API는 자동 선택이 아니다. 온디바이스/PCC/서드파티 중 어디로 보낼지는 개발자가 명시적으로 지정한다.
  • 통일된 건 인터페이스다. 그래서 목적지를 바꿔도 나머지 코드는 그대로 — “전환이 쉽다”의 의미가 이것이다.
  • “자동으로 나눠준다”는 OS 기능(Siri·Apple Intelligence) 한정 동작이고, 내 앱이 부르는 API와는 층위가 다르다.

한 줄 결론: API가 골라주는 게 아니라 API 모양이 같아 내가 쉽게 바꾸는 것 — 자동 라우팅은 Apple이 자기 OS 기능에만 적용한다.

관련 글

← 목록으로