플러터(Flutter) GenUI, 프롬프트 기반 아키텍처로 진화
GenUI는 LLM(Large Language Model)이 UI 구성 및 상호 작용을 결정하는 사용자 경험 패턴으로, A2UI 프로토콜(A2UI Protocol)을 활용
genui 패키지 v0.9 업데이트를 통해 '구조화된 출력 우선' 방식에서 '프롬프트 우선' 방식으로 전환, LLM과의 직접적인 상호 작용(Direct Interaction)을 지원
ContentGenerator 제거 및 Engine, Transport, Facade 레이어 분리를 통해 아키텍처 유연성(Architecture Flexibility)을 확보하고, LLM 및 UI 제어 권한 강화
A2UI v0.9 업데이트에 맞춰 Surface creation, Flat component definitions, Data binding 등 주요 스키마(Schema) 변경 사항 반영
새로운 genai_primitives 패키지 도입으로 메시징 타입(Messaging Type)을 표준화하고, Custom functions, Modular schema, Improved error handling 등 기능 추가
GenUI 아키텍처의 '프롬프트 우선' 방식 전환
본문에 따르면 genui 패키지 v0.9 업데이트는 기존의 '구조화된 출력 우선(Structured Output First)' 방식에서 '프롬프트 우선(Prompt First)' 방식으로 전환되었다. 이는 LLM(Large Language Model)이 UI 구조를 생성하는 방식에 변화를 가져왔다.
구조화된 출력 방식: LLM API의 제약 조건(JSON Mode)에 의존하여 엄격한 UI 구조를 강제
프롬프트 우선 방식: UI 스키마(UI Schema) 및 A2UI 관련 지침을 LLM의 시스템 프롬프트에 직접 주입
장점: LLM의 자연어 처리 능력(Natural Language Processing)을 최대한 활용하고, UI 스키마를 유연하게 변경 가능
결과적으로 LLM의 강력한 시스템 지침(System Instruction)을 통해 UI 생성의 유연성을 확보하고, 디버깅(Debugging) 및 유지보수(Maintenance) 편의성을 높였다.
ContentGenerator 제거와 아키텍처 분리
genui 패키지 v0.9는 ContentGenerator 클래스를 제거하고, Engine, Transport, Facade 레이어로 아키텍처를 분리했다. 이는 아키텍처 유연성(Architecture Flexibility)을 높이고 LLM(Large Language Model)과의 통합을 용이하게 한다.
Engine (SurfaceController): UI 상태 관리 및 렌더링 담당
Transport (A2uiTransportAdapter): 에이전트(Agent)와 렌더러(Renderer) 간 메시지 스트리밍
Facade (Conversation): 채팅 상태 관리를 위한 상위 레벨 API 제공
이러한 분리를 통해 개발자는 채팅 기록(Chat History), 재시도 로직(Retry Logic), 에러 처리(Error Handling) 등을 직접 제어할 수 있으며, LLM과의 연결 방식을 자유롭게 선택할 수 있다.
A2UI v0.9 프로토콜 및 스키마 변경 사항
A2UI v0.9 업데이트는 UI 구조를 정의하는 스키마(Schema)에 여러 가지 변경 사항을 도입했다. 이는 기존 A2UI 기반 코드를 사용하는 개발자에게 마이그레이션(Migration)을 요구한다.
Surface creation: beginRendering에서 createSurface로 변경
Flat component definitions: 중첩된 키 대신 플랫 디스크리미네이터(Flat Discriminator) 사용
Data binding: 바인딩(Binding) 방식 단순화
Property renames: distribution -> justify, alignment -> align, usageHint -> variant 등
이러한 변경 사항은 A2UI 프로토콜의 표준화(Standardization)를 위한 것이며, 개발자는 업데이트된 스키마에 맞춰 코드를 수정해야 한다.
genai_primitives 패키지 도입
genui 패키지는 자체적인 메시징 타입(Messaging Type)을 제거하고, 새로운 genai_primitives 패키지를 도입했다. 이 패키지는 GenAI 애플리케이션(GenAI Applications)에서 사용되는 기본 타입(Primitive Types)을 제공한다.
ChatMessage, MessagePart, ToolDefinition 등
유연성(Flexibility): 다른 GenAI 애플리케이션 또는 패키지에서 사용 가능
표준화(Standardization): 메시징 타입의 일관성 유지
결과적으로 genai_primitives 패키지는 GenUI 생태계(Ecosystem) 내에서 코드 재사용성(Code Reusability)을 높이고, GenAI 애플리케이션 개발을 위한 기반을 제공한다.
GenUI 패키지 마이그레이션 가이드
genui 패키지 v0.7.0에서 v0.9.0으로 마이그레이션(Migration)하기 위한 주요 변경 사항과 단계를 소개한다. ContentGenerator 제거가 가장 큰 코드 변경 사항이며, 개발자는 새로운 아키텍처에 맞춰 코드를 수정해야 한다.
의존성 정리(Dependency Cleanup): 불필요한 의존성 제거
SurfaceController 설정: 에이전트(Agent)와의 연결 설정
TransportAdapter 활용: 메시지 전송 및 수신 처리
PromptBuilder 활용: 시스템 프롬프트(System Prompt) 생성
이러한 단계를 따르면, 개발자는 genui 패키지의 최신 기능을 활용하여 GenUI 기반 애플리케이션(GenUI-based Application)을 구축할 수 있다.