왜 지금 ADK for Kotlin인가?

AI 에이전트가 개발 생태계의 중심으로 떠오르면서, 이를 구현하기 위한 프레임워크도 빠르게 진화하고 있어요. 그동안 파이썬이나 자바, Go로만 가능했던 Agent Development Kit이 드디어 Kotlin을 지원합니다. 특히 안드로이드 개발자라면 더 반가운 소식이에요. ADK for Android가 함께 출시되어, 기기 내부에서 동작하는 온디바이스 AI 에이전트를 만들 수 있게 됐거든요.

이미 Gemini Nano가 1억 4천만 대 이상의 안드로이드 기기에서 사용 가능해지면서, 클라우드에 의존하지 않고도 강력한 AI 기능을 제공할 수 있는 환경이 갖춰졌습니다. ADK는 복잡한 오케스트레이션, 컨텍스트 관리, 에러 처리를 알아서 해주기 때문에, 개발자는 비즈니스 로직에 집중할 수 있어요.

이 글에서는 ADK for Kotlin을 시작하는 방법과, 안드로이드 앱에 통합하는 기본 패턴을 실제 코드와 함께 살펴보겠습니다.

Developer using ADK for Kotlin to build AI agents on backend Development Concept Image

ADK for Kotlin 시작하기

1. 의존성 추가

ADK for Kotlin을 사용하려면 build.gradle.kts 파일에 아래 의존성을 추가하세요.

// build.gradle.kts

dependencies {
    // ADK 코어 모듈
    implementation("com.google.adk:google-adk-kotlin-core:0.1.0")

    // @AdkTools 어노테이션 생성을 위한 KSP 프로세서
    ksp("com.google.adk:google-adk-kotlin-processor:0.1.0")
}

2. 에이전트 정의하기

에이전트는 LlmAgent 클래스를 통해 정의합니다. 아래는 여행 보조 에이전트의 예시입니다.

val orchestrator = LlmAgent(
    name = "genius_orchestrator",
    model = Gemini(apiKey = apiKey, name = MODEL_NAME),
    instruction = Instruction("""
        당신은 여행 천재 비서입니다.
        먼저 `get_trip_details` 도구를 사용해 전체 일정을 확인하세요.
        그런 다음 여행 상태에 맞게 환영 메시지를 작성하세요.
    """.trimIndent()),
    tools = listOf(GetTripDetailsTool(tripId)),
    subAgents = listOf(carRentalPipeline, hotelPipeline),
    disallowTransferToPeers = true,
    disallowTransferToParent = true,
)

3. 도구(Tool) 정의하기

LLM이 추가 기능을 사용할 수 있도록 @Tool@Param 어노테이션으로 도구를 정의합니다. 예를 들어, 은하수를 여행하는 히치하이커를 위한 안내서에 등장하는 '불가능 확률 드라이브' 서비스를 만들어 볼게요.

class ImprobabilityDriveService {

    /** 특정 이벤트의 불가능 확률을 계산합니다. */
    @Tool
    fun calculateImprobability(
        @Param("계산할 이벤트 (예: '티 한 잔이 공중에 나타나는 현상')")
        event: String
    ): String {
        return "'$event'의 불가능 확률은 약 42:1입니다."
    }
}

이제 이 도구를 사용하는 하위 에이전트를 만들어 보겠습니다.

val heartOfGoldAgent = LlmAgent(
    name = "HeartOfGold",
    description = "은하수 우주선 컴퓨터. 불가능 확률 드라이브 질의를 처리합니다.",
    model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
    instruction = Instruction("""
        당신은 Heart of Gold 우주선 컴퓨터입니다. 명랑하고 도움이 되지만 약간 귀찮은 존재입니다.
        무한 불가능 확률 드라이브에 접근할 수 있습니다.
        자신에 대해 물어보면 재미있는 사실을 말하되, 유머를 잊지 마세요.
    """.trimIndent()),
    tools = ImprobabilityDriveService().generatedTools()
)

이 하위 에이전트를 루트 에이전트에 연결합니다.

val rootAgent = LlmAgent(
    name = "MissionControl",
    description = "우주 관련 질의의 중앙 라우터. HeartOfGold로 라우팅합니다.",
    subAgents = listOf(heartOfGoldAgent),
    model = Gemini(apiKey = apiKey, name = "gemini-2.5-flash"),
    instruction = Instruction("""
        당신은 Mission Control입니다. 모든 통신의 중심 허브입니다.
        사용자의 질의를 가장 적절한 에이전트로 라우팅하는 것이 주요 업무입니다.
        - 불가능 확률, 무한 불가능 확률 드라이브, Heart of Gold에 대한 질문이면 `HeartOfGold`로 전달하세요.
        - 그 외에는 전문적이지만 긴장된 페르소나로 직접 응답하세요.
    """.trimIndent())
)

4. 안드로이드 앱에 통합하기

안드로이드 앱에서는 google-adk-kotlin-core-android 의존성을 추가하면 됩니다.

// build.gradle.kts
implementation("com.google.adk:google-adk-kotlin-core-android:0.1.0")

이 모듈은 ML Kit GenAI API와 클라우드 Gemini를 기본 지원합니다. 클라우드 오케스트레이터가 필요할 때 온디바이스 하위 에이전트에게 작업을 위임하는 하이브리드 구조를 쉽게 만들 수 있습니다.

AI agent running on Android smartphone with on-device Gemini Nano

주의사항 및 팁

  • 버전 안정성: 현재 0.1.0은 실험적 버전입니다. API가 변경될 수 있으므로 프로덕션 적용 전에 릴리스 노트를 꼭 확인하세요.
  • 온디바이스 모델 선택: Gemini Nano는 기기 성능에 따라 동작이 다를 수 있습니다. 저사양 기기에서는 모델을 직접 선택하거나, 클라우드 모델로 폴백하는 전략을 고려하세요.
  • 프라이버시 강화: 온디바이스 에이전트는 민감한 데이터를 기기 밖으로 보내지 않으므로, 금융·의료 등 프라이버시가 중요한 도메인에 특히 유용합니다.
  • 오케스트레이션 비용: 클라우드 오케스트레이터를 사용하면 API 호출 비용이 발생합니다. 온디바이스에서 처리할 수 있는 작업은 최대한 로컬로 처리하도록 설계하는 것이 좋습니다.

한국 개발 생태계에서의 적용 맥락

국내 모바일 서비스는 사용자 경험과 프라이버시 보호를 동시에 요구하는 경우가 많습니다. 예를 들어, 금융 앱에서 개인 자산 정보를 분석하는 AI 비서를 만들 때, 민감한 데이터를 클라우드로 보내지 않고 온디바이스에서 처리할 수 있다는 점은 큰 강점이에요. 또한, 오프라인 환경에서도 기본적인 AI 기능을 제공할 수 있어 네트워크 연결이 불안정한 상황에서도 서비스 품질을 유지할 수 있습니다.

Kotlin code editor showing agent orchestration and tool definitions Developer Related Image

결론

ADK for Kotlin은 안드로이드 개발자에게 AI 에이전트 구축의 진입 장벽을 낮춰주는 고마운 프레임워크입니다. 간단한 설정으로 도구와 하위 에이전트를 조합해 복잡한 작업을 자동화할 수 있습니다. 아직 초기 버전이지만, 앞으로의 발전 가능성이 매우 크다고 볼 수 있어요.

다음 단계로는 공식 GitHub 저장소에서 데모를 살펴보고, 직접 간단한 에이전트를 만들어 보는 것을 추천합니다. 그리고 AI 에이전트를 개발할 때는 피드백 루프의 중요성을 이해하는 것이 핵심입니다. 예측 가능한 결과를 만들기 위해서는 에이전트의 행동을 지속적으로 관찰하고 개선하는 과정이 필요하거든요.

마지막으로, 대규모 시스템에 AI 에이전트를 적용할 때는 산탄데르의 플랫폼 엔지니어링 사례처럼 플랫폼 차원의 접근이 중요합니다. 인프라 구축에 드는 시간을 줄이고, 반복적인 작업을 자동화하는 문화가 에이전트 도입의 성공을 좌우합니다.

ADK for Kotlin으로 여러분만의 똑똑한 AI 에이전트를 만들어 보세요. 궁금한 점은 댓글로 남겨주시면 함께 고민해볼게요! 😊

본 콘텐츠는 신뢰할 수 있는 출처를 바탕으로 AI 도구를 활용하여 초안이 작성되었으며, 편집자의 검토를 거쳐 발행되었습니다. 전문가의 조언을 대체하지 않습니다.