기술아티클

지금 바로 개발 해보는 Apple-Intelligence

2024.11.04






1. 서론

 

AI는 최근 빠르게 발전하며 우리 일상의 중심 기술로 자리 잡고 있습니다. 이 중에서도 대규모 언어 모델(LLM)과 온 디바이스 AI는 두 가지 대표적인 방식으로, 각각의 고유한 특성을 가지고 있습니다.

 

대규모 언어 모델, 예를 들어 ChatGPT는 클라우드 기반으로 방대한 데이터를 학습하여 광범위한 질문에 대응할 수 있는 능력을 갖추고 있습니다. 그러나 이 모델은 서버와의 실시간 연동이 필수적이며, 따라서 인터넷 연결이 요구됩니다. 반면, 온 디바이스 AI는 사용자 기기 내에서 직접 데이터를 처리하기 때문에 빠른 응답 속도와 더 나은 개인정보 보호를 제공합니다.

 

휴대폰 제조사들이 온 디바이스 AI에 집중하는 이유는 두 가지로 요약할 수 있습니다. 첫째, 데이터를 클라우드로 전송하지 않음으로써 개인정보 보호를 강화할 수 있고, 둘째, 빠르고 매끄러운 사용자 경험을 제공할 수 있습니다. 온 디바이스 AI는 인터넷 연결 없이도 즉시 처리할 수 있어 지연 시간을 최소화하며, 실시간 고성능 AI 기능을 가능하게 합니다.

 

특히, 애플(Apple)은 최근 Apple Intelligence를 발표하며 온 디바이스 AI의 가능성을 극대화하는 방향으로 나아가고 있습니다. 이는 스마트 기기 내 AI 기능을 보다 정교하게 통합하여, 향후 애플 생태계 내 다양한 앱 및 서비스들과 연동될 것입니다.

 

이제, Apple Intelligence와 그 활용 방안에 대해 구체적으로 살펴보고, 개발자들이 이를 어떻게 효과적으로 연동할 수 있을지 알아보도록 하겠습니다.

 

 

 

 

2. App Intents


Apple Intelligence는 애플의 광범위한 앱 생태계와 원활히 통합되도록 세밀하게 설계되었습니다. Siri는 사용자의 요청을 정확하게 이해하고, 해당 작업을 수행할 수 있는 적절한 앱을 찾아 바로 실행합니다. 이를 통해 사용자는 일상적인 작업을 손쉽게 자동화하고 복잡한 프로세스를 단순화할 수 있습니다.

 

이러한 기능을 제대로 활용하려면 App Intents API를 앱에 통합하는 것이 필수적입니다. 이제 App Intents API를 사용해 첫 번째 App Intents 앱을 개발하는 과정을 살펴보겠습니다. 시나리오의 기본 앱은 메일을 관리하는 앱으로, 메일의 저장 및 전송 기능을 담당한다고 가정합니다.

 

시나리오는 다음과 같습니다.


사용자가 Siri에게 음성 명령으로 "메일을 임시 저장해줘"라고 요청하면, Siri는 App Intents를 통해 해당 앱의 임시 저장 프로토콜을 호출하여 메일을 임시 저장하는 작업을 수행하게 됩니다.

 

이 흐름을 구현하려면, App Intents API를 사용해 Siri와 앱 간의 상호작용을 설정해야 합니다. 여기에서 App Intents는 사용자가 Siri와 상호작용할 수 있도록 앱 내 특정 작업(예: 메일 임시 저장)을 연결하는 역할을 하며, Siri는 사용자의 요청을 기반으로 앱의 해당 작업을 호출하고 실행하게 됩니다. 이 과정을 통해 사용자는 음성만으로도 메일을 임시 저장하는 편리한 경험을 제공받을 수 있습니다.

 

 

2.1. AssistantIntent(schema:)

 

AssistantIntent는 Siri가 사용자의 요청을 처리할 수 있도록 앱과 연동하는 프로토콜입니다. 앱의 의도에 맞는 스키마를 설정하여 Siri나 Shortcuts에서 앱을 호출할 수 있게 도와줍니다. 예를 들어, Siri에게 메일 임시저장을 수행할 수 있는 앱이라고 알리고 설정하는 방법을 예시로 보여드리겠습니다.
 

@AssistantIntent(schema: .mail.createDraft)
struct CreateAssetsIntent: AppIntent {
    
    var to: [IntentPerson]
    var cc: [IntentPerson]
    var bcc: [IntentPerson]
    var subject: String?
    var body: String?
    var attachments: [IntentFile]
    var account: MailAccountEntity?
    
    @Dependency
    var library: MailLibrary
    
    @MainActor
    func perform() async throws -> some ReturnsValue<AssetEntity> {
        let asset = try await library.createAsset(title: subject ?? "", body: body ?? "")
        return .result(value: asset.entity)
    }
}

 

  • Schema 설정: 스키마를 .mail.createDraft로 설정하여 Siri와 운영체제에 임시 저장 메일을 생성할 수 있다는 것을 알립니다.
  • 필수 매개변수: to, cc, bcc, subject, body, attachments, account는 createDraft를 사용할 때 필수로 제공해야 하는 변수들로, 운영체제가 이 데이터를 임시 저장 메일을 생성할 때 전달합니다.
  • MailLibrary: 앱 내에서 임시 저장 메일을 관리하는 데 사용되는 의존성 클래스입니다.
  • perform 함수: 실제로 실행될 함수로, 예시에서는 제목과 내용만 저장하도록 하였습니다.

 

여기서 가장 중요한 부분은 @Dependency를 사용하여 AppIntent와 앱이 함께 사용하는 의존성 클래스를 설정하는 것입니다. 의존성 클래스를 설정하는 방법에 대한 예시는 다음 세션에서 다루겠습니다.

 

 

2.2. AppDependencyManager

 

AppDependencyManager AppIntent와 앱이 공통으로 사용하는 의존성 클래스를 등록하고 관리하는 역할을 합니다. 이 클래스는 앱의 초기 실행 단계에서 등록되며, AssistantIntent로 설정된 클래스에서 필요한 의존성 클래스에 접근할 수 있도록 보장합니다.

 

📌 의존성 클래스란?

의존성 클래스는 AppIntent 실행 시 필요한 동작을 처리하는 데 사용되는 클래스로, 주로 데이터 저장 및 호출에 관련된 클래스를 미리 등록하여 AppIntent에서 그 클래스를 통해 작업을 처리할 수 있도록 합니다. 예를 들어, 데이터베이스(DB)와 연동되는 클래스를 의존성 클래스로 등록해, AppIntent가 실행되는 동안 필요한 데이터를 저장하거나 불러올 수 있게 됩니다. 이로 인해, 앱에서도 AppIntent를 통해 추가된 데이터를 접근하거나 활용할 수 있습니다.

 

아래는 의존성 클래스를 등록하는 예시입니다.

 

@main
struct Jiran_APP_IntentsApp: App {
    
    private var mailLibrary: MailLibrary
    private var accountLibrary: AccountLibrary
    
    init() {
        let mailLibrary = MailLibrary()
        let accountLibrary = AccountLibrary()
        
        AppDependencyManager.shared.add(dependency: mailLibrary)
        AppDependencyManager.shared.add(dependency: accountLibrary)
        MyAppShortcutsProvider.updateAppShortcutParameters()
        
        self.mailLibrary = mailLibrary
        self.accountLibrary = accountLibrary
    }
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .environment(mailLibrary)
        .environment(accountLibrary)
    }
}

 

이 구조를 통해 AppIntent는 필요한 클래스를 미리 등록하고, 실제로 동작할 때 이를 활용하여 작업을 처리합니다.

 

추가적으로 필요한 코드들이 있지만, 본 블로그에서는 핵심 코드만 소개합니다. 나머지 코드는 WWDC를 참고하시면 충분히 작성할 수 있습니다. 기존 앱과의 통합이나 놀라운 기능 구현은 각 개발자의 역량에 달렸지만, App Intents는 이처럼 간단한 코드로 Siri와 앱을 쉽게 연동할 수 있게 해줍니다.

 

Apple Intelligence 기능이 아직 완전히 공개되지 않아 직접적인 테스트는 어려운 상황이지만, 애플 WWDC 2024에서 설명한 바와 같이, 기능 테스트는 단축어(Shortcuts)를 통해 가능합니다. 현재는 우리가 직접 단축어를 설정해야 하지만, 이후에는 Siri가 이러한 설정을 자동으로 생성하고 실행할 수 있게 될 것입니다.

 

이제, 위 코드를 적용한 예제 프로젝트의 동작을 영상으로 확인해보겠습니다.

 

 

  1. 앱을 실행하고, 앱 내에서 임시 저장 메일을 하나 추가합니다.
  2. 단축어로 이동해서 메시지 작성 단축어를 통해 AppIntent를 호출해 임시 저장 메일을 추가합니다.
  3. 앱으로 돌아가 AppIntent를 통해 임시 저장된 메일이 보이는지 확인합니다.

 

 

 

 

3. 마무리

 

아직 Apple Intelligence의 모든 기능이 공개되지 않아 어떤 기능이 추가될지, 어떻게 활용할 수 있을지 정확히 알 수는 없지만, 우리는 WWDC 영상을 통해 앞으로의 개발 방향을 미리 엿볼 수 있었습니다.

 

예를 들어, In-app Actions을 사용하면 사용자가 여러 설정을 하지 않아도 음성 명령 하나로 앱 기능을 실행할 수 있으며, Writing Tools를 통해 글쓰기에 AI의 직접적인 도움을 받을 수도 있습니다. 앞으로 이러한 기능들이 더 확장될 것으로 기대하며, 새로운 기능을 통해 더 나은 경험을 제공할 수 있기를 바랍니다.

 

Apple Intelligence의 발전을 기대하며, 앞으로의 세션도 많은 관심 부탁드립니다!
 

 

 

 

 

4. 번외편 - Siri야, 집으로 가자!

 

운전하는 사람이라면 한 번쯤 사용해봤을 TMAP의 퇴근길 마법의 명령어, "집으로 가자"를 소개합니다. 퇴근할 때 네비게이션을 켜고 번거롭게 집을 선택하는 대신, 이제 Siri에게 간단하게 요청해보세요.

 

다음은 Siri와 TMAP을 연동하는 방법입니다.

 

  • 아이폰의 단축어 앱을 실행한 후, 오른쪽 상단의 '+' 버튼을 눌러 새로운 단축어를 만듭니다.
  • 스크롤을 내려 TMAP 앱을 선택하고, '집으로 가자'를 추가한 후 완료를 눌러 저장합니다.
  • 기본 단축어에 '집으로 가자'가 추가된 것을 확인했다면 이제 Siri에게 말해봅시다.
  • 시리야 집으로 가자!

 

 

 

 

 

5. 다음 예정 세션

 

In-app Actions

 

In-app Actions는 앱을 실행 중일 때 사용자가 음성 명령으로 손쉽게 작업을 처리할 수 있는 기능입니다. 예를 들어, 메일 앱에서 "팀장님에게 메일을 작성하고 싶다."라고 말하면, 메일 작성 화면이 열리며 자동으로 수신자에 팀장님이 추가되는 기능을 제공합니다.

 

 

 

Writing Tools

 

Writing Tools는 사용자가 텍스트 작업을 더 쉽고 효율적으로 수행할 수 있도록 돕는 기능 모음입니다. 빠르게 작성한 노트를 깔끔하게 정리하거나, 블로그 게시물을 더 매력적으로 바꾸거나, 이메일 문서를 교정하는 등 다양한 작업을 지원합니다. 이러한 도구를 통해 누구나 쉽게 글쓰기의 질을 향상시킬 수 있습니다.

 

 

 

조동석

개발팀

iOS와 백엔드 개발을 넘어 AI/LLM까지 멈추지 않는 개발자입니다.

추천하는 영감

보안 전시회 방문객은 어떤 고민이 가장 클까?

Windows 커널에서 C++ 사용하기 (상)

보안 전문가가 말하는 CC 인증 파헤쳐 보기