"이 코드가 왜 이렇게 돼 있지?" AI에게 코드를 맡겨본 사람이라면 한 번쯤 마주했을 물음이다. 결과물은 남는데 그 결과물을 만들어낸 맥락과 의도는 대화창 어딘가에 증발해버린다. 석 달 뒤, 아무도 그 이유를 설명하지 못한다.
이 문제를 정면으로 파고든 흥미로운 실험이 GeekNews에 공유됐다. 개발자 SoliEstre는 방향을 아예 뒤집었다. 코드 대신 한국어 명세를 git에 커밋하고, 코드는 빌드 산출물로 취급하는 방식이다. 그가 공개한 PWA 앱 Rimlog는 독서·학습 기록 도구인데, 앱 자체보다 만든 방식이 더 흥미롭다. 리포지터리의 eux/ 폴더에는 한국어 명세 3장이 있다. 앱 골격 전체가 40줄, AI 카드 위젯이 25줄. saveCapture : 캡처 폼(소스명·인용·내 생각·태그) 저장 — captures 맨 앞 삽입 + 로컬 스토리지 반영 + "저장됐어요" 토스트 + 기록 탭으로 전환. 이런 문장이 명세의 전부다.
이 명세를 EstreUX라는 도구에 넣으면 코드가 생성된다. 핵심은 그 다음이다. 생성된 코드에는 명세의 해시가 박히고, 명세만 고치거나 코드만 고치면 pre-commit에서 커밋이 막힌다. 명세와 코드의 정합성을 게이트로 강제하는 구조다. 숫자도 설득력 있다. 152줄짜리 숫자 키패드를 28줄 명세로 되돌리는 방식으로 실측했더니 사람이 유지해야 하는 줄 수가 60~82% 줄었다. 생성 코드 자체는 길어질 수 있지만, '사람이 읽고 고치는 쪽'이 줄어드는 것이 핵심이다.
이 접근이 단순한 개인 실험으로 보일 수도 있다. 하지만 2026 AI 스택을 정리한 Jaideep Parashar의 글(dev.to)과 나란히 놓으면 하나의 방향이 보인다. 그는 수십 개의 AI 도구를 실험한 끝에 스택이 '놀랍도록 단순해졌다'고 말한다. ChatGPT로 생각을 구조화하고, Cursor로 코드를 작성하고, GitHub에는 코드뿐 아니라 프롬프트 템플릿·API 명세·실험 노트까지 버전 관리한다. 그리고 가장 큰 변화로 꼽는 것은 새 모델이 아니라 MCP(Model Context Protocol)의 도입이다. 개별 도구를 쓰는 것에서 '연결된 워크플로우'를 설계하는 것으로 사고방식이 바뀌었다는 이야기다.
두 흐름이 교차하는 지점에 하나의 공통 통찰이 있다. 개발자가 관리해야 할 가장 중요한 산출물이 코드에서 명세와 워크플로우 설계로 이동하고 있다는 것. SoliEstre는 이를 'SSoT(Single Source of Truth)를 명세에 두는 것'이라고 표현했고, Parashar는 'AI 자산을 소프트웨어 자산처럼 버전 관리하는 것'이라고 표현했다. 언어는 다르지만 가리키는 방향은 같다. 코드는 더 이상 개발자가 직접 지켜야 할 지식의 원본이 아니라는 것.
프론트엔드 관점에서 이 전환은 구체적인 기술 선택으로도 이어진다. CSS logical properties처럼 '한 번 제대로 설계하면 방향성 처리가 자동화되는' 속성들이 주목받는 것도 같은 맥락이다. margin-left 대신 margin-inline-start를 쓰면 LTR과 RTL을 위한 두 벌의 코드를 유지할 필요가 없다. 물리적 방향 대신 의미적 방향을 명세하면, 브라우저가 나머지를 처리한다. 코드가 아니라 의도를 기술하는 것이 더 적은 유지보수로 더 넓은 사용자를 커버하는 방법이 된다.
물론 명세 중심 접근이 만능은 아니다. SoliEstre 본인도 솔직하게 인정한다. 명세의 표현력이 코드를 따라가지 못하는 지점이 분명히 존재하고, 정합성 검증의 캘리브레이션도 아직 완성이 아니다. Parashar 역시 스택이 고정되어 있지 않으며 몇 달마다 바뀐다고 말한다. 이 시대의 워크플로우에는 '완성'이 없다. 하지만 방향은 점점 선명해지고 있다.
지금 프론트엔드 개발자에게 요구되는 능력은 코드를 잘 짜는 것이 아니라, AI가 올바른 코드를 생성할 수 있도록 의도를 정확하게 명세하는 능력이다. 어떤 컴포넌트가 어떤 상태에서 어떻게 동작해야 하는지를 구조적으로 서술하고, 그 명세가 시간이 지나도 코드와 동기화된 상태를 유지하도록 시스템을 설계하는 것. 개발자가 앉아야 할 자리는 에디터 앞이 아니라 명세 설계석이다. 커밋 히스토리에 쌓여야 할 것은 코드 변경이 아니라, 그 변경을 이끈 판단과 의도다.