LLM의 역할 확장: 코드 컴파일러에서 수직 통합 리소스로
전통적인 소프트웨어 개발은 비전이 전략으로, 전략이 설계로, 설계가 코드와 바이너리로 구체화되는 계층 구조를 가진다. 각 단계는 서로 다른 역할(경영진, PM, 아키텍트, 엔지니어, 컴파일러)이 담당하며, 단계가 내려갈수록 세부 명세가 추가되는 의사결정 과정이 핵심이다. 기존의 컴파일러가 소스 코드를 바이너리로 변환하며 인라이닝(Inlining)이나 레지스터 할당 같은 저수준 의사결정을 수행했다면, 초기 LLM의 역할은 자연어를 코드로 변환하는 '고수준 컴파일러'에 머물렀다.
최근의 Claude는 이러한 단일 계층의 변환 도구를 넘어 전략, 제품 설계, 아키텍처, 기계어에 이르는 소프트웨어 스택 전반을 수직적으로 가로지르는 '멀티 컴파일러'의 특성을 보인다. 이는 특정 작업을 인간 전문가만큼 완벽하게 수행하는 것보다, 스택 전체의 맥락을 유지하며 서로 다른 계층의 작업을 연결하는 능력에 집중한 결과다. 개발자는 더 이상 각 계층 사이의 소통 비용을 지불하며 회의를 잡거나 허가를 구할 필요 없이, LLM을 통해 전략적 결정과 세부 구현 사이의 간극을 빠르게 메울 수 있다.
분산 DNS 서버 구축을 통한 '바이브 엔지니어링' 검증
실제 적용 사례로 등장한 exe.dev의 분산 DNS 서버 구축 과정은 이러한 수직적 통합 능력을 보여준다. VM(가상 머신)의 빠른 시작 속도에 비해 DNS 전파 속도가 느려 발생하는 지연 시간을 해결하기 위해, 오리건 지역에 집중된 DNS 서버를 지리적으로 분산하면서도 일관성을 유지하는 시스템을 설계했다. 이 과정에서 LLM은 표준 분산 DNS 설계 리서치, DNS 내부 구조 및 특성 분석, 과거 보안 결함 조사, AXFR/IXFR 같은 대안 구현 전략 탐색, 실패 모드 시뮬레이션 및 테스트 전략 수립을 동시에 수행했다.
구현 단계에서는 여러 개의 에이전트 루프를 동시에 구동해 전체 시스템과 테스트 코드, 적대적 코드 리뷰(Adversarial Code Review)를 생성하는 방식을 취했다. 특히 주목할 점은 '차분 명세 분석(Differential Spec Analysis)' 과정이다. 서로 다른 에이전트가 구현한 결과물을 비교해, 에이전트가 명시적으로 묻지 않고 임의로 내린 의사결정의 차이를 찾아내는 방식이다. 예를 들어, 데이터베이스 롤백 시 '추가 전용(Append-only)' 계약이 깨지는 문제에 대해 각 에이전트는 서로 다른 해결책을 제시했다.
최종적으로 채택된 방식은 모든 행에 '타임라인(Timeline)' 필드를 부여하는 것이었다. 동기화 요청 시 엣지 서버의 타임라인 값을 포함해 전송하고, 값이 일치하지 않으면 이력이 변경된 것으로 판단해 전체 재동기화(Full Clean Re-sync)를 수행하는 구조다. 이 과정에서 Claude는 Codex보다 우아한(Elegant) 시스템을 설계했고, Codex는 더 철저한(Thorough) 구현을 보여주었다. 개발자는 이러한 차이를 실험하고 다시 가이드라인에 반영하는 과정을 두 차례 반복해, 고수준 목표부터 동시성 캐시의 데이터 타입 같은 저수준 세부 사항까지 포함된 '흉터 조직 문서(Scar-tissue document)'를 구축했다. 결과적으로 약 일주일의 집중 작업만으로 단위 테스트, 엔드 투 엔드 테스트, 섀도 모드(Shadow-mode)가 포함된 시스템을 구축했으며, 출시 후 DNS 장애 발생 건수는 0건을 기록했다.
소프트웨어 엔지니어링의 계층 변화와 실무적 영향
엔지니어의 역할은 이제 개별 코드 라인을 직접 수정하는 것에서, 시스템 전체의 의사결정 구조를 설계하고 가이드하는 방향으로 이동하고 있다. 이를 '바이브 코딩(Vibe-coding, 에이전트에게 작업을 맡기고 결과를 수용하는 것)'과 구분하여 '바이브 엔지니어링(Vibe-engineering)'이라 정의한다. 바이브 엔지니어링은 LLM을 수직 통합 리소스로 활용해 다양한 계층의 의사결정 속도를 높이되, 엔지니어가 시스템의 논리적 구조와 핵심 결정 사항을 완전히 장악하는 방식이다.
앞으로의 개발 실무자는 코드 한 줄의 문법보다, 에이전트가 참조할 수 있는 '압축된 의사결정 가이드라인'을 정교하게 작성하는 능력을 우선시해야 한다. 이는 단순한 편의성을 제공하는 추상화 계층(예: Tailwind CSS)과 달리, 시스템의 핵심 의사결정을 이해 가능한 방식으로 표현하는 계층을 유지하는 작업이다. 따라서 개발자는 구현 세부 사항의 직접 제어권을 내려놓는 대신, 아키텍처의 정합성을 검증하고 에이전트 간의 구현 차이를 분석해 최적의 경로를 선택하는 '결정권자'로서의 역량을 강화해야 한다.




