바이브 코딩과 클린 아키텍처

아재발자·2026년 2월 13일

AI와 소통

목록 보기
1/1

해당 글은 AI와 주고받은 내용을 정리한 메모성 글입니다.

바이브 코딩 (Vibe Coding)

바이브 코딩은 안드레이 카파시(Andrej Karpathy)가 언급하며 대중화한 개념으로, 개발자가 코드를 직접 한 땀 한 땀 타이핑하는 대신, LLM(대형 언어 모델)과 상호작용하며 의도와 흐름을 중심으로 소프트웨어를 구축하는 방식을 뜻합니다.

이제 개발자의 역량은 특정 언어의 문법을 외우고 구현하는 능력보다, 시스템을 추상화하여 AI에게 정확한 맥락을 제공하고 생성된 결과물을 검증하는 시스템 설계 및 검토 역량으로 변화하고 있습니다.

본질

바이브 코딩은 단순히 AI에게 코딩을 시키는 것이 아닙니다. 개발자는 본인이 가지고 있는 도메인 지식과 아키텍처 설계 지식을 AI에게 명확히 전달하는 역량이 중요해졌습니다.

최근 프로덕트 엔지니어도메인 지식이 강조되는 이유도 이 때문입니다.

AI의 한계

AI에게 아무리 명확하고 구체적인 요구사항을 전달하더라도 다음과 같은 치명적인 문제에 직면하게 됩니다.

지능의 한계와 환각

LLM은 한 번에 처리할 수 있는 정보량인 컨텍스트 윈도우(Context Window) 범위 내에서만 추론할 수 있습니다.

만약 AI가 참조하고, 기억해야하는 컨텍스트의 크기가 커지고, 그 한계에 도달하게 되면 AI는 컨텍스트의 일부를 유실하는 망각 현상이 발생하게 됩니다.

망각 현상이 발생하게 되면 존재하지 않는 참조와 코드를 만들어내는 환각을 만들어내게 되는데, 이렇듯 구조화되지 않은 코드와 프로젝트 구조는 AI에게 과도한 노이즈를 제공하여 추론 능력을 저하시킵니다.

경제적 효율성의 하락

최근의 AI 에이전트(Claude의 Subagents 등)는 복잡한 문제를 풀기 위해 스스로 코드를 읽고 도구를 사용(Skills)하며 수십 번의 추론 과정을 거칩니다.

위에서 말했듯, 아키텍처가 부재한 프로젝트는 AI가 단 하나의 기능을 수정하기 위해 프로젝트 전체를 훑으며 관계없는 과도한 노이즈까지 컨텍스트로 참조하게 됩니다.

이는 기하급수적인 토큰 비용 상승을 야기하고 개발 생산성보다 AI 유지 비용이 더 커지는 역전 현상을 발생시키게 됩니다.

비결정성(Non-determinism)과 오염

바이브 코딩의 가장 치명적인 단점은 동일한 지시(Prompt)를 내려도 AI가 매번 다른 결과물을 내놓는다는 점입니다.

AI는 주어진 지시사항을 완수하기 위해 가장 확률적으로 높은 빠른 길을 선택합니다.

계층 구조가 모호한 프로젝트에서 AI는 비즈니스 로직(Service) 내부에 DB 스키마 의존성을 심거나 외부 API 호출 코드를 직접 삽입하는 등의 행위를 서슴지 않습니다.

이렇게 무작위적으로 생산되는 코드는 당장 동작하는데 문제가 없을지언정, 장기적으로는 인간도 AI도 이해할 수 없는 거대한 '오염된 코드 덩어리'를 만들어내며 기술적 부채를 통제 불가능한 수준으로 가속화시킵니다.

클린 아키텍처

이러한 AI의 태생적인 한계를 극복할 수 있는 수단으로 Robert C. Martin(엉클 밥)이 제안한 클린 아키텍처가 떠오르고 있습니다.

클린 아키텍처의 핵심은 의존성 규칙(Dependency Rule)으로, 소스 코드의 의존성은 반드시 외부에서 내부로만 향해야 하며, 내부 원(Circle)에 있는 요소는 외부 원에 있는 어떤 것도 알지 못해야 한다는 원칙을 따릅니다.

위에서도 언급했듯이 바이브 코딩은 개발자가 세부 구현보다 의도(Vibe)에 집중하는 방식인데, 이때 클린 아키텍처는 AI에게 사고의 지도행동의 제약을 동시에 제공하며, 단순한 코드 정리를 넘어 비결정적인 AI를 통제하는 최적의 시스템이 됩니다.

바이브 코딩과 클린 아키텍처의 시너지

AI 최적화

클린 아키텍처는 UseCase라는 명확한 진입점을 제공하고 AI가 참조해야 할 파일의 범위를 좁혀주므로, 불필요한 토큰 소모를 줄이고 한정된 컨텍스트 내에서 AI의 추론 정확도를 극대화하는 효과를 얻을 수 있습니다.

비결정성 제어

AI는 동일한 지시에도 매번 다른 품질의 코드를 내놓는 비결정성 특징을 가집니다.

클린 아키텍처의 계층 구조는 AI가 편의를 위해 레이어를 침범하지 못하게 제한하기 때문에 결과적으로 코드의 오염과 기술적 부채가 쌓이는 것을 최소화할 수 있습니다.

독립성

클린 아키텍처는 엔티티, 유스케이스, 어댑터 등으로 계층화되어 있어 비즈니스 로직을 외부 도구(프레임워크, 개발 언어 등)로부터 완전히 격리시킬 수 있습니다.

이러한 독립성 때문에 개발자는 언어나 프레임워크에 종속되지 않은 채 프롬프트만으로 동일한 기능을 구현해낼 수 있습니다.

또한, 구조가 명확히 분리되어있어 AI가 생성한 코드가 어느 부분에 위치해야 할지 명확하게 예측할 수 있어 관리가 쉬워집니다.


가상 클린 아키텍처

바이브 코딩으로 진행하는 모든 프로젝트를 당장 클린 아키텍처로 리팩토링할 수는 없습니다. 이때 활용할 수 있는 현실적인 대안이 바로 AI 전용 아키텍처 가이드라인(.md)을 활용한 '가상 클린 아키텍처' 전략입니다.

이는 물리적 폴더 구조를 바꾸지 않고도 AI의 오염을 막는 소프트웨어적 격벽 역할을 합니다.

Claude Code의 /init 과 AI 전용 아키텍처 가이드라인의 차이

Claude Code의 /init 명령어로 생성되는 CLAUDE.md와 혼동될 수 있지만, 두 문서의 목적은 명확히 다릅니다.

CLAUDE.md

이 파일의 본질은 AI가 이 프로젝트에서 어떻게 행동해야 하는가에 대한 운영 매뉴얼에 가깝습니다.

빌드 명령어, 테스트 실행법, 네이밍 컨벤션, 린트 설정 등 작업 환경에 집중하는 내용을 갖고 있습니다.

AI 전용 아키텍처 가이드라인 (설계 원칙)

AI 전용 아키텍처 가이드라인은 이 프로젝트가 어떤 철학으로 설계되었고, 설계해야하는가?에 대한 소프트웨어 설계 원칙을 박아넣는 것입니다.

AI가 편의를 위해 스파게티 코드를 짜려는 본능을 억제하고, 특정 아키텍처(예: 클린 아키텍처)의 설계 지능을 이식하는 역할을 수행합니다.

가상 클린 아키텍처의 한계

문서 하나로 모든 설계 문제를 해결할 수 있다면 좋겠지만, 가상 클린 아키텍처는 어디까지나 임시 방편입니다.

따라서 원본 코드의 상태에 따라 다음과 같은 한계가 발생합니다.

Context 한계와 환각의 상관관계

위에서 말했듯, AI가 한 번에 읽을 수 있는 컨텍스트 윈도우(Context Window)는 한계가 정해져 있습니다.

하나의 파일에 수천 줄의 로직이 뒤섞여 있다면, AI는 가이드라인(.md)을 준수하려고 노력하는 동시에 거대한 원본 코드를 해석하느라 에너지를 소모합니다.

정보 밀도가 한계치에 다다르면 AI는 가이드라인을 무시하거나, 기존 코드의 스파게티 구조를 그대로 복제하는 환각 증상을 보이기 시작합니다.

물리적 격벽 없는 규칙의 허망함

아무리 "도메인과 인프라를 분리하라"고 명시해도, 실제 코드가 하나의 클래스 안에 모든 기능이 다 들어가 있다면 AI는 '가상으로라도' 분리해서 짤 공간을 찾지 못합니다.

결국 기존 코드를 따라가게 되며, 이는 논리적 규칙이 물리적 혼돈을 이기지 못하는 결과를 초래합니다.

그래서?

가상 클린 아키텍처는 시간을 벌어주는 도구이지 최종 목적지가 되어서는 안 됩니다. 가장 현실적인 로드맵은 다음과 같습니다.

  • 점진적 격리
    새로운 기능을 추가할 때만큼은 가상 아키텍처 가이드를 준수하며 별도의 패키지나 모듈로 분리합니다.

  • 보이스카우트 규칙
    건드리는 코드 주변부터 조금씩 물리적 격벽을 세워 나갑니다.

  • 가이드의 구체화
    AI에게 단순히 "클린하게 짜줘"라고 하기보다, "새로운 기능은 반드시 src/features 하위에 UseCase 단위로 작성하라"는 식의 물리적 위치를 지정해 주는 것이 효과적입니다.

결론

바이브 코딩 시대에 클린 아키텍처 구조는 AI의 환각과 오염 리스크를 줄일 수 있는 현 시점에서의 최선의 타협점이라고 생각합니다.

우리는 이제 클린 아키텍처를 단순히 '코드 유지보수가 편한 디자인 패턴'으로 봐서는 안 됩니다. 오히려 AI라는 강력하지만 통제하기 어려운 비결정적(Non-deterministic) 개발 도구를 안전하게 다루기 위한 핵심 방역 체계로 재해석해야 합니다.

클린 아키텍처는 AI에게 전달할 맥락을 도메인 단위로 격리하여 비용을 절감하고, 물리적 계층 분리를 통해 AI의 무분별한 코드 생성을 차단하는 '가이드레일' 역할을 합니다.

결국 바이브 코딩 시대의 경쟁력은 AI에게 얼마나 많은 코드를 맡기느냐가 아니라, AI가 사고를 쳐도 시스템의 핵심(Domain)만큼은 무너지지 않도록 얼마나 견고한 격벽(Architecture)을 설계하느냐에 달려 있습니다.

참고 문서

profile
안녕하세요. 아재 개발자입니다. 공부한 내용을 기록하고 잘못된 부분에 대해서 조언을 받기 위해 velog를 시작했습니다. :)

0개의 댓글