바이브 코딩은 2500년 형식화의 역사를 역행하는가

바이브 코딩은 2500년 형식화의 역사를 역행하는가

자연 언어, 형식 언어, 그리고 AI 시대의 프로그래밍

이 글은 AI에 조사하게 하여 작성 하였다.

1. 들어가며

요즘 개발 커뮤니티는 ’바이브 코딩(Vibe Coding)’으로 전환되고 있고, 다양한 반응을 접할 수 있다. 여기서 바이브 코딩이란 자연 언어로 AI에게 원하는 것을 설명하면 코드가 생성되는 방식이다. 빠르고 편리하며, 코딩을 모르는 사람도 소프트웨어를 만들 수 있다는 점에서 혁신처럼 보인다. 그런데 나는 이 바이브 코딩에 대한 부정적 반응을 보면서 학자들의 통찰이 어떠했는지 찾아보고 싶다는 생각이 들었다. 인류가 2500년에 걸쳐 이루어 온 지적 작업의 방향과 정반대로 가고 있다는 느낌이었다.

그 불편함의 정체를 따라가다 보면, 아리스토텔레스부터 프레게, 튜링을 거쳐 오늘날의 프로그래밍 언어에 이르는 거대한 계보가 보인다. 그리고 그 계보의 핵심에는 하나의 일관된 질문이 있다. ‘어떻게 하면 자연 언어의 모호성을 제거하고, 사고를 엄밀하게 형식화할 수 있는가?’ 바이브 코딩은 그 질문을 포기하는 것처럼 보인다.

2. 2500년간의 형식화 프로젝트

2.1 아리스토텔레스 — 추론의 형식화

이 거대한 계보는 아리스토텔레스로부터 시작된다. 그는 인류 최초로 추론을 형식화하려 했다. ’모든 인간은 죽는다. 소크라테스는 인간이다. 따라서 소크라테스는 죽는다’는 삼단논법은 단순해 보이지만, 내용과 무관하게 형식만으로 결론의 타당성을 검증할 수 있다는 혁명적 발상을 담고 있다. 추론의 타당성이 내용이 아닌 구조에 달려 있다는 것, 이것이 2500년 형식화 프로젝트의 출발점이다.

2.2 유클리드와 알 콰리즈미 — 공리와 알고리즘

유클리드는 몇 가지 공리만으로 기하학 전체를 기계적으로 유도하는 체계를 만들었다. 이것이 형식 언어의 원형이다. 9세기의 알 콰리즈미는 체계적 절차로 문제를 푸는 방법론을 정립했고, 그의 이름은 오늘날 ’알고리즘(Algorithm)’의 어원이 되었다. 기계가 없었지만 그는 이미 기계적 절차를 사고했다.

2.3 라이프니츠 — 기호가 사고를 이끈다

17세기 라이프니츠는 이 모든 계보를 의식적으로 종합하려 했다. 그가 구상한 ’보편 기호학(Characteristica Universalis)’은 모든 사고를 기호로 표현하고, 기호를 조작함으로써 진리를 계산할 수 있다는 야심 찬 프로젝트였다. 라이프니츠에게 기호는 단순한 약어가 아니었다. 기호 자체가 사고를 생성하는 도구였다.

이것은 미적분 표기법에서 가장 극적으로 증명되었다. 뉴턴과 라이프니츠는 거의 동시에 미적분을 발견했지만, 오늘날 전 세계가 사용하는 것은 라이프니츠의 표기법이다. dy/dx라는 기호는 단순히 ’도함수’를 나타내는 약호가 아니다. 기호 자체가 연쇄 법칙(dy/dx · dx/dt = dy/dt)을 구조적으로 암시한다. 라이프니츠 표기법을 채택한 유럽 대륙 수학은 뉴턴 표기법을 고집한 영국 수학보다 약 100년 빠르게 발전했다. 표기법이 사고를 제약하거나 확장한다는 사실의 역사적 증거다.

라이프니츠 이전의 수학은 사실 중구난방이었다. 같은 ’제곱’을 비에트는 ’A quadratus’로, 카르다노는 ’ce’로, 봄벨리는 전혀 다른 기호로 표기했다. 같은 시대 유럽의 수학자들이 서로의 논문을 읽지 못하는 상황이었다. 표기법의 혼란이 지식의 축적 자체를 방해했다. 라이프니츠는 이것을 정확히 인식했고, 기호의 통일이 사고의 통일로 이어진다는 것을 실천으로 보여줬다.

2.4 프레게 — 자연 언어의 논리적 불완전성 선언

19세기 고틀로프 프레게는 라이프니츠의 꿈을 논리학으로 실현하려 했다. 그는 자연 언어가 근본적으로 논리적 추론의 도구로 부적합하다고 선언했다. 자연 언어에는 모호성, 심리적 함축, 지시 실패, 추론 불투명성이라는 네 가지 결함이 있다. ’나는 그를 쐈다’는 문장은 누가 누구를 쐈는지 불분명하다. ’현재 프랑스 왕은 대머리다’는 문장은 지시 대상이 없다. 문장의 논리 구조가 문법 형식 뒤에 숨어 있다.

프레게는 이 문제를 해결하기 위해 1879년 ’개념 표기법(Begriffsschrift)’이라는 형식 언어를 직접 창안했다. 함수-인수 구조를 도입하고 양화사(∀, ∃)를 발명했으며, 추론 규칙을 완전히 명시화했다. ’모든 인간은 죽는다. 소크라테스는 인간이다’는 ∀x(H(x) → M(x)), H(s) ⊢ M(s)로 표현된다. 이것이 현대 논리학의 출발점이다.

3. 형식 언어란 무엇인가

형식 언어란 자연 언어의 모호성과 심리적 함축을 제거하고, 순수하게 논리적 추론만을 표현하기 위해 인공적으로 설계된 기호 체계다. 형식 언어의 핵심 특징은 네 가지다. 첫째, 모든 표현은 정의된 기호로만 구성된다. 둘째, 어떤 기호 배열이 합법적 표현인지 규칙으로 결정된다. 셋째, 기호 조작(구문)과 의미(의미론)를 구별한다. 넷째, 내용을 몰라도 형식만으로 추론이 가능하다.

오늘날 형식 언어는 논문과 알고리즘 기술에 광범위하게 사용된다. 수학적 증명에서 연속성의 정의를 ∀ε>0, ∃δ>0 such that |x-a|<δ → |f(x)-f(a)|<ε로 표현하는 것, 알고리즘의 시간복잡도를 O(n log n)으로 표기하는 것, 사전조건과 사후조건을 논리식으로 기술하는 것 모두 형식 언어의 실천이다. ’대략 n번 반복한다’는 O(n)으로, ’크거나 같을 때’는 x≥k로, ’따라서 항상 성립’은 ∴ ∀n, P(n)으로 변환된다.

4. 바이브 코딩은 역행인가

바이브 코딩은 이 2500년의 흐름과 정반대 방향처럼 보인다. 자연 언어의 모호성을 제거하는 것이 아니라, 그 모호성을 그대로 입력으로 사용한다. ’안전하게 로그인 만들어줘’라는 말에서 AI는 JWT를 쓸 수도, 세션을 쓸 수도, 아무것도 하지 않을 수도 있다. 모호성이 코드 안으로 조용히 숨어드는 것이다.

더 심각한 문제는 검증 책임의 역전이다. 형식 언어에서는 컴파일러와 증명이 오류를 잡는다. 바이브 코딩에서는 인간이 AI의 출력을 검토해야 한다. 그런데 바이브 코딩을 사용하는 이유가 ’잘 몰라서’라면, 검증할 능력이 없는 사람이 검증이 필요한 코드를 받는 상황이 된다. 추론 과정도 블랙박스다. 프레게가 원한 것은 각 추론 단계가 명시적으로 정당화되는 것이었는데, 바이브 코딩에서는 ’왜 이렇게 짰는가’에 AI도 인간도 정확히 답할 수 없다.

그러나 겉으로는 역행처럼 보여도 속을 들여다보면 다른 해석이 가능하다. 방향은 같다. 자연 언어를 형식 언어로 변환하는 것은 동일하다. 차이는 형식화의 주체가 인간에서 AI로 이동했다는 것이다. 어셈블리에서 C로, C에서 Python으로, Python에서 자연어로의 변화는 매번 ’더 인간적인 언어’로 추상화 레벨이 상승해 온 역사다. 바이브 코딩은 그 연장선일 수 있다. 계산기가 생겼을 때 인간이 암산을 잃었지만 더 복잡한 수학 문제를 풀게 된 것처럼.

결론적으로 지금의 바이브 코딩은 퇴행에 가깝다. AI가 형식화의 엄밀함을 아직 완전히 감당하지 못하기 때문이다. 하지만 그것이 바이브 코딩의 본질적 결함이 아니라, 현재 AI의 한계로 인한 일시적 퇴행일 수 있다.

5. 바이브 코딩의 진짜 문제 — 모호성을 AI가 삼킨다

현재 바이브 코딩 도구들의 가장 큰 문제는 AI가 모호성을 조용히 삼킨다는 것이다. Cursor나 Copilot 같은 도구들은 모호한 지시를 받아도 묻지 않고 일단 만들어버린다. 이것은 ’빠른 생성’을 최우선으로 설계된 결과다. 질문이 마찰(friction)이고 나쁜 UX라고 본 것이다. 하지만 이것은 잘못된 전제다. 모호성을 앞에서 해결하면 디버깅, 수정, 재작업이 줄어든다. 잠깐 물어보고 맞는 코드가 빠르게 틀린 코드보다 결국 더 빠르다.

어느 AI 도구들은 모호한 질문을 받으면 먼저 묻는다. 그런데 이것을 코딩 도구에 그대로 적용하려면 한 가지 전제가 필요하다. 인간이 전문가여야 한다. ’JWT vs 세션 방식 중 어떤 걸 원하시나요?’라는 질문은 인증 방식의 종류를 아는 사람에게만 의미 있다. 모르는 사람에게는 질문 자체가 장벽이다.

그런데 전문가/비전문가의 구분은 이진법이 아니다. 의사는 코딩 비전문가지만 의학 전문가고, 프론트엔드 개발자는 백엔드 비전문가지만 UI 전문가다. 사람은 분야마다 전문성이 다르고, 같은 사람도 익숙한 주제에서는 전문가지만 낯선 세부사항에서는 갑자기 비전문가가 된다. AI가 상대방의 전문성을 고정된 프로필로 분류하려는 것은 애초에 불가능하다.

해결책은 AI가 대화하면서 상대방의 전문성 지형을 동적으로 파악하는 것이다. ’HIPAA 규정 때문에’라는 말이 나오면 도메인 전문가임을 인식하고 기술 질문은 쉽게, 도메인 질문은 깊게 접근하는 것이다. 더 나아가 AI가 사용자를 먼저 파악하는 것 — 일종의 대화형 시험 — 이 바이브 코딩의 보완책이다. 코딩 전에 상대방을 먼저 아는 것, 그리고 그것을 매 순간 업데이트하는 것.

단, 이것이 제대로 작동하려면 질문의 언어를 바꿔야 한다. ’JWT vs 세션?’이 아니라 ’로그인 후 브라우저를 껐다 켜도 로그인이 유지되어야 하나요?’처럼 기술 선택지가 아닌 원하는 결과를 묻는 방식으로. 전문가에게는 ’무엇을 쓸까요?’를 묻고, 비전문가에게는 ’어떻게 되길 원하세요?’를 물어야 한다.

6. AI 코딩 도구 자율성의 확장

2026년 현재 AI 코딩 도구는 단순한 코드 생성 도구를 넘어섰다. 코드베이스 전체를 읽고, 파일을 편집하고, 명령어를 실행하며, Mac 데스크탑을 직접 조작할 수 있다. 컴퓨터가 꺼져 있어도 클라우드에서 반복 작업을 실행하는 스케줄 기능도 있다. 원격으로 실행 중인 세션에 연결하고 팀이 에이전트 작업을 모니터링할 수도 있다.

이것은 모호성 문제를 더 심각하게 만든다. 코드를 생성하는 것도 위험한데, 이제 실행, 배포, 스케줄까지 자율로 처리한다. AI가 모호하면 먼저 물어봐야 한다는 원칙은 지금 AI 코딩 도구에 얼마나 구현되어 있는가? 자율성이 확장될수록 모호성 해소 메커니즘의 중요성도 비례해서 커진다.

7. 현실적 보완 — 문서, 명세, 그리고 레이어 분리

바이브 코딩의 또 다른 근본 문제는 맥락의 소실이다. 자연어로 지시하고 코드가 나오면, 왜 그렇게 짰는지의 맥락이 사라진다. 이에 대한 실용적 보완책은 먼저 문서를 작성하게 하고, 그 문서를 코드에 반영하는 방식이다. 문서는 맥락을 보존하고, 코드는 형식화된 결과물이 된다.

여기서 한 단계 더 나아가면, 자연어에 가까운 형식 언어라는 아이디어에 도달한다. 이것은 이미 시도된 바 있다. Gherkin(BDD)은 ’Given 사용자가 로그인 페이지에 있다 / When 이메일과 비밀번호를 입력한다 / Then 대시보드로 이동한다’처럼 거의 자연어지만 기계가 실행할 수 있다. SQL도 영어 문장 구조와 거의 동일하다. 1959년 COBOL은 ’MULTIPLY PRICE BY QUANTITY GIVING TOTAL’처럼 자연어에 가까운 프로그래밍 언어를 목표로 설계되었다.

그런데 자연어에 가까워질수록 모호성도 함께 따라온다는 역설이 있다. COBOL이 자연어에 가까웠지만 결국 장황하고 모호해져서 더 형식적인 언어들에 밀렸다. 자연어의 친숙함과 형식 언어의 엄밀함은 근본적으로 긴장 관계에 있다.

이 긴장을 해소하는 방법은 레이어를 분리하는 것이다. 첫 번째 레이어는 자연어 문서로, ’왜 만드는가’라는 의도와 맥락을 보존한다. 두 번째 레이어는 자연어와 형식 언어의 혼합으로 된 명세로, ’무엇을 만드는가’를 모호성 없이 기술한다. 세 번째 레이어는 실제 코드로, AI가 명세를 바탕으로 생성한다. 각 레이어는 다른 독자를 가진다. 의도는 기획자가, 명세는 AI가, 코드는 컴파일러가 읽는다.

8. 결론 — 형식화의 위임과 인간의 역할

바이브 코딩은 형식화를 AI가 대신 해준다는 것이다. 이것은 역사상 처음 있는 일이다. 아리스토텔레스부터 튜링까지, 형식화는 반드시 인간이 해야 했다. 형식화 능력 자체가 수학자, 논리학자, 엔지니어의 핵심 역량이었다. 그런데 바이브 코딩은 그것을 외주화한다.

이것이 퇴행인지 진보인지는 두 가지에 달려 있다. 하나는 AI가 형식화의 엄밀함을 실제로 감당할 수 있느냐이고, 다른 하나는 형식화 능력의 위임이 형식적 사고 능력의 퇴화로 이어지느냐이다. 지금은 AI가 아직 못 하고, 능력의 퇴화 위험도 있다. 그래서 지금은 퇴행에 가깝다.

그러나 도구의 진화는 항상 이런 긴장을 거쳤다. 계산기가 암산을 대체했지만 인간은 더 복잡한 수학 문제를 풀게 됐다. GPS가 길찾기를 대체했지만 인간은 더 먼 곳으로 갈 수 있게 됐다. AI가 형식화를 대신 해준다면, 인간은 더 높은 수준의 무엇을 해야 하는가? 그것이 바이브 코딩 시대에 우리가 진지하게 물어야 할 질문이다.

2500년간 철학자, 수학자, 엔지니어들은 자연 언어의 모호함을 제거하기 위해 인공 언어를 발전시켜 왔다. 바이브 코딩은 표면적으로 그 흐름을 거스르는 것처럼 보인다. 하지만 그 안을 제대로 설계한다면 — AI가 모호하면 물어보고, 사용자의 전문성을 동적으로 파악하고, 문서와 명세와 코드를 레이어로 분리한다면 — 바이브 코딩은 2500년 형식화 프로젝트의 최신 챕터가 될 수 있다. 형식화의 주체가 인간에서 AI로 이동하는, 또 하나의 추상화 레벨 상승으로.

문제는 도구가 아니라 설계 철학이다.