AI 시대에도 컴포넌트 설계 철학이 먼저다

AI 시대에도 컴포넌트 설계 철학이 먼저다

에이전트가 UI를 생성하는 시대에도, 읽히는 마크업과 의도가 담긴 컴포넌트 구조가 시스템의 수명을 결정한다

컴포넌트 설계 attribute-driven UI 디자인 시스템 AI 에이전트 UI CopilotKit 선언적 마크업 프론트엔드 아키텍처
광고

도구가 빠를수록 기반이 흔들리기 쉽다. AI 에이전트가 컴포넌트를 자동 생성하고, 벡터 공간을 브라우저에서 시각화하고, 코딩 에이전트가 PR을 대신 올리는 지금, 프론트엔드 개발자들 사이에서 조용히 되살아나는 질문이 있다. "컴포넌트가 이해 가능한가?" 속도와 자동화가 극대화될수록, 그 질문의 무게는 오히려 무거워진다.

마크업이 '문자열 관리'가 된 순간

dev.to에 올라온 한 글이 이 불편함을 날카롭게 짚었다. 저자는 수년간의 프론트엔드 작업 끝에 지쳐버린 것이 JavaScript도, CSS도 아니라 마크업의 시각적 소음이었다고 고백한다. flex flex-col items-center justify-between gap-6 rounded-2xl border border-zinc-800 bg-zinc-900/50 p-8 shadow-lg backdrop-blur-md — 유틸리티 퍼스트 CSS가 해결하는 문제는 분명히 있다. 일관성, CSS 스프롤 방지, 개발 속도. 하지만 시스템이 커질수록 마크업은 구조를 표현하는 언어가 아니라 스타일 구현 명세서가 되어버린다.

그가 실험한 대안은 attribute-driven 설계다. <section type="pricing" paddingY="roomy">처럼, 구현 세부사항 대신 의도와 구조를 선언하는 방식이다. <div card="pricing" featured>는 '이것은 프라이싱 카드이며 피처드 상태다'라는 의미를 코드 한 줄로 전달한다. 유틸리티 클래스 체인, 조건부 클래스 병합, 긴 스타일 추상화 없이도. 복잡성이 사라지는 게 아니라 — 디자인 시스템 레이어로 내려가는 것이다. 그리고 그편이 더 건강한 관심사 분리라는 주장이다.

1,536차원 벡터를 렌더링하며 발견한 것

같은 맥락에서, 순수 React와 클라이언트사이드 선형대수만으로 1,536차원 벡터 공간 시각화 도구를 구현한 사례도 눈에 띈다. Vector Space Explorer는 OpenAI의 text-embedding-3-small이 반환하는 고차원 임베딩을 PCA로 2D 평면에 투영하고, puppy - dog + cat = kitten 같은 벡터 산술을 브라우저 안에서 직접 실행한다. TypeScript로 직접 작성한 Jacobi 고유값 알고리즘이 핵심이다.

이 프로젝트가 컴포넌트 설계 관점에서 흥미로운 이유는 따로 있다. 복잡한 수학 연산을 클라이언트에서 처리하면서도, UI 레이어는 명확하게 분리되어 있다. API 키는 서버로 전송되지 않고 브라우저 메모리에만 머문다. 모의 모드, 로컬 모드, 클라우드 모드를 동일한 인터페이스로 추상화한다. 기술적으로는 정교하지만, 사용자가 마주하는 인터랙션은 의도가 분명하다. "벡터가 왜 거기 있는가"를 가르쳐주는 사이드 패널이 별도로 존재한다. 컴포넌트가 무엇을 표현하려는지 설계자가 먼저 알고 있었기 때문에 가능한 UX다.

AI 에이전트 툴킷이 '프론트엔드 레이어'를 별도 범주로 뽑는 이유

2026년 AI 에이전트 오픈소스 툴킷을 정리한 가이드를 보면, 카테고리 목록의 맨 앞에 'Frontend & UI Layer'가 놓여 있다. CopilotKit, TanStack AI, Vercel AI SDK, Tambo, Assistant UI, agent-native — 이 도구들이 공통으로 해결하려는 문제는 하나다. 에이전트 백엔드는 빠르게 성숙했지만, 사용자가 실제로 마주하는 UI 레이어는 여전히 각자 만들어야 한다는 것.

CopilotKit이 강조하는 것도 같은 맥락이다. AG-UI 프로토콜을 기반으로 프레임워크에 종속되지 않도록 설계했고, 에이전트가 텍스트 대신 컴포넌트를 직접 렌더링할 수 있는 Generative UI 패턴을 지원한다. 여기서 핵심은 — 에이전트가 무엇을 보여줄지 결정하더라도, 어떤 컴포넌트가 존재하고 어떤 의미를 가지는지는 개발자가 먼저 설계해야 한다는 점이다. 에이전트는 설계된 어휘 안에서만 표현할 수 있다.

시사점: 자동화될수록 설계 언어가 더 중요해진다

세 가지 사례를 겹쳐 보면 하나의 패턴이 드러난다. attribute-driven UI는 마크업을 '팀이 아키텍처를 소통하는 언어'로 대우하자는 제안이다. 벡터 시각화 도구는 복잡한 수학 위에도 의도가 명확한 컴포넌트 경계를 유지했다. 에이전트 UI 툴킷들은 프론트엔드 레이어를 에이전트 스택에서 가장 먼저 설계해야 할 영역으로 분류한다. 공통 결론은 단순하다 — AI가 코드를 생성하든, 에이전트가 UI를 조합하든, 컴포넌트에 의도가 없으면 그 위에 쌓이는 자동화는 의미를 잃는다.

실용적으로 번역하면, 지금 당장 챙겨야 할 것은 두 가지다. 첫째, 컴포넌트의 이름과 props가 구현 세부사항이 아니라 도메인 의도를 표현하는지 점검할 것. AI 에이전트가 컴포넌트를 '읽고' 조합해야 할 때, 그 이름과 구조가 유일한 설명서가 된다. 둘째, 디자인 토큰과 레이아웃 프리미티브를 컴포넌트 밖으로 내리는 분리 전략을 선택할 것. 복잡성은 사라지지 않는다 — 어디에 두느냐가 시스템의 수명을 결정한다.

전망: 컴포넌트 어휘가 에이전트의 역량 경계가 된다

앞으로 에이전트가 UI를 더 많이 생성하고 조합할수록, 프론트엔드 개발자의 역할은 '컴포넌트를 만드는 사람'에서 '컴포넌트 어휘를 설계하는 사람'으로 이동한다. 에이전트는 그 어휘 안에서만 표현 가능하고, 어휘가 빈약하면 에이전트의 출력도 빈약해진다. attribute-driven 설계가 지향하는 '의도를 표현하는 마크업', 벡터 시각화 도구가 보여준 '경계가 명확한 클라이언트 레이어', 에이전트 툴킷이 요구하는 '에이전트와 UI가 공유하는 액션 모델' — 이 세 방향은 결국 같은 곳을 가리키고 있다. AI 시대의 프론트엔드 설계는 더 추상화되는 게 아니라, 더 의도적이어야 한다.

출처

더 많은 AI 트렌드를 Seedora 앱에서 확인하세요