요즘IT
위시켓
콘텐츠프로덕트 밸리
요즘 작가들컬렉션물어봐
콘텐츠
프로덕트 밸리
요즘 작가들
컬렉션
물어봐
새로 나온
인기
개발
AI
IT서비스
기획
디자인
비즈니스
프로덕트
커리어
트렌드
스타트업
서비스 전체보기
위시켓요즘IT
고객 문의
02-6925-4867
10:00-18:00주말·공휴일 제외
yozm_help@wishket.com
요즘IT
요즘IT 소개작가 지원
기타 문의
콘텐츠 제안하기광고 상품 보기
요즘IT 슬랙봇크롬 확장 프로그램
이용약관
개인정보 처리방침
청소년보호정책
㈜위시켓
대표이사 : 박우범
서울특별시 강남구 테헤란로 211 3층 ㈜위시켓
사업자등록번호 : 209-81-57303
통신판매업신고 : 제2018-서울강남-02337 호
직업정보제공사업 신고번호 : J1200020180019
제호 : 요즘IT
발행인 : 박우범
편집인 : 노희선
청소년보호책임자 : 박우범
인터넷신문등록번호 : 서울,아54129
등록일 : 2022년 01월 23일
발행일 : 2021년 01월 10일
© 2013 Wishket Corp.
로그인
요즘IT 소개
콘텐츠 제안하기
광고 상품 보기
개발

베테랑 개발자가 직접 경험한 바이브 코딩의 모든 것 (2)

요즘IT의 번역글
15분
2시간 전
115
에디터가 직접 고른 실무 인사이트 매주 목요일에 만나요.
newsletter_profile0명 뉴스레터 구독 중

본문은 요즘IT와 번역가 David가 함께 마르코 베네데티(Marco Benedetti)의 글 <Vibe Coding as a Coding Veteran>을 번역한 글입니다. 마르코는 40년의 코딩 경력을 가진 베테랑 개발자이자 AI 연구 분야 박사로, 8비트 머신의 어셈블리 언어부터 최신 프로그래밍 언어까지 약 20개의 언어를 다뤄왔습니다. 과학 소프트웨어, 모바일 앱, 비즈니스 애플리케이션 개발 경험을 보유하고 있으며, 현재는 대규모 조직의 AI 팀에서 연구 고문으로 활동하고 있습니다.

 

본 글에서는 최첨단 AI 코딩 어시스턴트(Claude Sonnet 4, Gemini Pro 2.5, OpenAI o3)를 활용한 2주간의 실제 프로젝트 경험을 다룹니다. 저자는 파이썬으로 하노이 탑 솔버를 개발하면서 AI의 장단점, 생산성 변화, 심리적 영향 등을 세밀하게 분석하며, '바이브 코딩'이 개발 패러다임에 가져올 근본적인 변화를 탐구합니다. 

분량이 길어 1, 2편으로 나누어 발행합니다. 1편에 이어 2편에서는 AI 어시스턴트와의 협업이 개발자의 생산성, 역할, 사고방식에 어떤 영향을 미치는지, 그리고 앞으로 개발자의 일은 어떻게 달라질지를 중심으로 살펴봅니다.


*글에 포함된 각주(표시)는 '번역자주'입니다. 글에 포함된 링크는 원문에 따라 표시했습니다.

 
<출처: Freepik>

 

8. 개발자의 미래: 사라질까, 진화할까?

그렇다면 개인과 팀의 생산성은 어떨까요? AI 코딩 어시스턴트 때문에 해고될 위기에 처한 프로그래머와 소프트웨어 개발자들은 어떻게 될까요?

 

확정적인 답은 없지만 몇 가지 고려 사항이 있습니다.

 

1) 많은 부분이 개발하고 있는 소프트웨어의 유형에 달려 있습니다. 90%가 표준 작업이고 상용구 코드가 많고, 널리 사용되는 언어로 작성되었으며, 여러 기존 프로젝트와 유사하다면, "AI 지원을 받는 여러분"은 동일한 결과를 달성하는 데 시간의 10분의 1이 필요합니다.

 

2) 틈새 언어로 미션 크리티컬 애플리케이션을 위한 "지적으로 밀도 높은" 정교한 코드를 개발하는 경우, AI 어시스턴트로 절약하는 시간은 미미할 수 있습니다.

 

3) 두 경우 모두, 경험이 없는 프로그래머에게 맡겼을 때 AI 어시스턴트가 몰래 넣을 수 있는 소리 없는 문제와 미묘한 결함을 따라잡기 위해 정말 뛰어난 프로그래머가 필요할 것입니다. 프로덕션 준비가 된 소프트웨어나 미션 크리티컬 소프트웨어에는 여전히 많은 인간의 주의가 필요합니다. 이 관찰은 LLM "장악" 이후 스타트업과 대기업 모두 경험이 적은 개발자를 덜 고용하고 시니어 개발자를 더 고용해왔다는 증거와 일치합니다.

 

4) 이 어시스턴트들은 너무 많은 (좋은) 코드를 너무 빠르게 생성하기 때문에, 남아 있는 위장된 버그를 찾기 위해 어두운 구석을 확인하는 것이 벅찬 작업이 됩니다.

 

5) 인간은 일반적으로 게으르기 때문에, 기계를 신뢰하기 시작하고 경계를 늦추기 쉽습니다. 항상 웃고 자신감 넘치는 AI 에이전트의 흠 없는 외관 뒤에서 문제, 기술 부채, 미묘한 버그가 계속 축적될 수 있습니다. 상황이 명백해지면, 많은 (시니어) 인간의 주의가 요구될 수 있고, 생산성이 크게 저하될 수 있습니다.

 

6) 한 명의 개발자가 "손으로" 작성한 코드를 "합리적으로 버그가 없도록" 만들기 위해 직접 감사하고 이중 확인하는 것이 합리적으로 기대될 수 있는 반면, LLM 보조 코딩에서는 이것이 더 이상 사실이 아닙니다. 원칙적으로도 그렇지 않습니다: 한 명의 AI 보조 개발자의 작업을 이중 확인하려면 한 명 이상의 (많은) 개발자가 필요합니다. 이것은 생산성 향상에 대한 지배적인 서사와 다소 반대됩니다. 물론, 코드를 확인하는 데 특화된 다른 AI 어시스턴트를 사용할 수도 있습니다. 저는 이 경로를 탐색하지 않았는데, 유망할 수도 있습니다. 하지만, 제가 그들에게 기대하는 "확률적 보장이 결정론적으로 변한" 아첨하는 블랙박스적 성격은 저를 여전히 당혹스럽게 만들 것입니다.

 

7) AI는 단순 작업뿐만 아니라 아이디어 탐색, 아키텍처 실험, 그리고 시도해 보지는 않았지만 확신하는데, 언어 마이그레이션 같은 영역에서도 도움을 줍니다. 이는 시니어 개발자의 창의성까지 증폭시키는 분야들입니다. 더 일반적으로 말하자면, 좋은 AI 코딩 어시스턴트와 상호작용하면서 그것이 생성하는 코드에 주의를 기울인다면 정말 많은 것을 배우게 됩니다. 이것은 지금 하고 있는 작업의 맥락에서 제공되는 거대한 학습 기회입니다. 다른 방법으로는 쉽게 접근할 수 없는 기회이며, 그 과정에서 거의 "공짜로" 더 나은 프로그래머가 될 가능성이 높습니다. 여기에 함정이 있습니다: AI 어시스턴트와 완전히 협력하고 변화하고, 배우고, 성장하는 데 열린 자세를 가짐으로써, 당신은 바로 그 어시스턴트의 존재로 인해 쓸모없어지지 않는 유형의 개발자로 거듭날 수 있습니다.

 

8) 에세이 작성 작업에 AI 어시스턴트를 사용할 때와 사용하지 않을 때를 비교한 인지 부채 축적에 대한 예비 보고서가 있습니다. AI의 도움을 받아 작업하는 사람들은 주요 인지 및 언어 영역에서 뇌 활동이 감소하고, 신경 연결성이 약해지며, 기억 회상 능력이 떨어지는 것으로 나타났습니다. 에세이를 쓰는 것이 바이브 코딩과 완전히 같지는 않지만 꽤 비슷하며, 유사점은 명확합니다. 


기계가 코딩하도록 내버려두면, 코딩하는 방법을 잊을 수 있습니다. 그러는 동안, 해당 AI를 사용하고 프롬프팅하는 데는 더 능숙해집니다 (우리 맥락에서는 바이브 코딩에). 기계가 어차피 대부분의 일을 떠맡게 될 때, 이러한 절충안이 차세대 코더들을 더 고용 가능하게 만들까요, 아니면 덜 고용 가능하게 만들까요? 저는 이것이 잘못된 이분법이라고 생각합니다. 위에서 지적했듯이, 실제로 일어나는 일은 더 넓은 범위의 선택지가 주어진다는 것입니다.

어시스턴트의 출력을 관찰함으로써 코딩 실력을 향상시키는 동시에, 어시스턴트와의 대화 능력도 함께 높일 수 있습니다. 하지만 이는 두 가지 수준의 추상화를 동시에 기르는 데 자원과 시간을 투자할 의향이 있을 때만 가능합니다. 반대로, AI 어시스턴트를 더 빠르게 작업하기 위한 지팡이로 계속 사용하면서 아직 숙달하지 못한 프로그래밍 언어와 소프트웨어 아키텍처를 배우는 것을 건너뛴다면, AI와 함께 작업하는 것은 고용 가능성 측면에서 실제로 손해 보는 선택이 될 수 있습니다.

 

물론 이 분야는 빠르게 변화하고 있으며, 현재의 LLM과 AI 도구만 보고 판단한다면 근시안적일 수밖에 없습니다. 미래의 AI 어시스턴트는 제가 여기서 언급한 결함의 상당 부분을 극복할 가능성이 높습니다. 실제로 제가 이 글을 쓰는 지금도, 새로운 AI 어시스턴트들이 표준화된 벤치마크에서 최고 자리를 다투고 있습니다 (흥미롭게도 Claude 4는 이런 벤치마크에서 최고점을 받지 못했습니다. 신규 진입자들을 제외하고도 말이죠. 그럼에도 불구하고 실제로 사용해 보니, 가장 똑똑하고 생산적인 협업 파트너였습니다).

 

 

9. 실험의 한계와 주의 사항

이 인간/AI 페어 프로그래밍 실험(일명 "대화형 코딩" 또는 "자연어 프로그래밍")은 사람들이 코딩을 위해 AI 어시스턴트와 상호작용하는 방식의 전체 스펙트럼을 대표한다고 볼 수 없습니다. 앞서 말했듯이, 바이브 코딩 패러다임은 저에게 처음이었기에, 이것은 고유한 특성을 가진 초보자의 관점입니다. 따라서 제가 내리는 모든 결론은 견습생의 불완전하고 일화적인 경험이라는 렌즈를 통해 봐야 합니다.

 

예를 들어, 저는 환경의 버전 관리와 GitHub 기능을 최소한으로 또는 전혀 사용하지 않았습니다. 백그라운드 에이전트가 제 코드베이스를 동시에 업데이트하거나 풀 리퀘스트 승인을 기다리는 일도 없었습니다. 복잡한 에이전트 기능이 작동되지도 않았고, 이미지나 다이어그램 같은 멀티모달 상호작용도 일어나지 않았으며, 정교한 풀스택 웹 개발도 포함되지 않았습니다. 저는 제가 꽤 잘 아는 특정 언어를 선택했는데, 이 언어는 주요 버전 변경에도 상대적으로 안정적이고 하위/상위 호환성이 있으며, 제 AI 동료들의 훈련 데이터에 매우 잘 표현되어 있을 가능성이 높습니다. 고급 모델 컨텍스트 프로토콜도 시도하지 않았습니다.

 

게다가, 이것은 독립적이고 커맨드라인 기반의 오프라인 소규모 소프트웨어 프로젝트입니다(앞서 말했듯이: 약 5천 줄의 코드, 약 50개 파일, 약 20개 클래스). 이는 최첨단 AI 모델로 개발하는 일반적인 프로젝트와는 성격이 다를 수 있습니다. 또한 개인 개발자가 아닌 팀 단위로 AI를 활용할 때 어떤 일이 벌어지는지는 다루지 않았습니다.

 

더욱이 저는 단 한 줄의 코드도 직접 작성하지 않았습니다. 반면, 실제 AI/인간 협업에서는 설명보다 직접 코딩이 더 빠른 부분은 제가 처리했을 겁니다. 이렇게 스스로 제약을 둔 탓에 제 AI 보조 프로그래밍 경험은 실제 협업 개발 시나리오와 달랐습니다. 실제로는 (제 생각에) 인간 개발자가 효율성을 고려하여 위임과 직접 구현 사이를 자연스럽게 오갈 것입니다.

 

마지막으로 중요한 점은, 컴퓨터 과학, 그리고 더 넓게는 과학 연구에서 우리는 종종 실험과 결과의 재현성에 대해 이야기합니다. 하지만 여기서 저는 같은 프롬프트에 대해 거의 절대 같은 출력을 두 번 생성하지 않는 확률적 모델과 함께 작업해 왔습니다. 게다가, 제가 사용한 "최첨단" 모델들은 비공개 소스이고, 독점적이며, 자주 업데이트됩니다. 그들의 가중치, 훈련 데이터, 정확한 아키텍처는 공개되지 않으며 빠르게 계속 변합니다.

 

그리고 중간에 한 레이어가 더 있습니다: 저는 커서 내부에서 작업했는데, 커서는 제 요청을 Claude(또는 다른 모델)에 전달하기 전에 조용히 맞춤 프롬프트를 주입하여 이를 맞춤형 소위 "생각하는" 변형으로 바꿉니다. 이는 아마도 더 많은 컨텍스트, 더 많은 계산, 더 높은 온도, 더 많은 토큰, 도구 강화 추론, 내부 다단계 체인 또는 이러한 마법들의 조합을 할당한다는 것을 의미할 것입니다. 하지만 확실하지는 않습니다.

 

그래서 제가 여기서 한 일 중 완전히 또는 쉽게 재현 가능한 것은 한 조각도 없다고 봐야겠죠. (요즘 LLM 이후 산업 주도의 AI 연구 열풍에서 일어나는 대부분의 일들처럼 말입니다.)

 

 

10. 심리적 측면

바이브 코딩이 얼마나 훌륭한지, 경험 없는 사람들이 몇 시간 만에 작동하는 웹 애플리케이션과 게임을 만들 수 있다는지, 개발자들이 멸종할 것이고, (인간) 소프트웨어 개발이 도도새처럼 사라질 것이라는 온갖 보고서들을 처음 읽었을 때, 저는 진심으로 슬펐습니다. 박탈당하고 무력해진 기분이었죠. 


저는 (주로) 개발자가 아니며, 더 이상 그렇지 않기 때문에, 이 모든 것이 사실로 밝혀지더라도 개인적으로 영향을 받지는 않을 겁니다. 하지만 저는 거의 40년을 더 나은 코딩 방법을 배우려고 노력했고, 그 과정이 정말 즐거웠습니다. 수많은 언어로, 무수한 이유로 말이죠. 저는 그 서사를 믿었고, 모든 사람이 Expedia와 Booking을 통해 예약하는 세상에서 깨어난 은퇴한 여행사 직원 같은 기분이 들었습니다.

 

하지만 몇 주 동안 바이브 코딩을 해본 후, 저는 더 이상 이 일방적이고 평면적이며 낙담스러운 서사를 믿지 않습니다. 우선 바이브 코딩은 전통적인 직접 코딩과 마찬가지로 컴퓨터와 함께하는 즐거운 몰입 상태를 만들어냅니다. 그리고 당신이 말하는 것의 (대부분을) 이해하고, 24시간 언제든 기꺼이 도와줄 준비가 된 강력하고, 숙련된 어시스턴트가 있다는 느낌을 줍니다.


이것은 혼자서는 결코 할 수 없었을 속도로 프로젝트 개발을 앞으로 밀어붙이며, 그 구현 속도는 등골이 오싹할 정도입니다. 게다가, "다르게 생각하는" AI 어시스턴트에 대한 겸손한 태도를 취하면, 그것이 생성하는 코드를 보면서 경험할 수 있는 학습의 양이 엄청납니다. 최고의 라이브러리 함수, 코딩 패턴, 모호한 함수의 문서가 짧은 질문 하나면 된다는 것, 지루한 검색 끝에 웹에서 발굴할 필요가 없다는 사실이 주는 흥분은 말할 것도 없고요.

 

이는 곧 이렇게 강력한 AI 어시스턴트를 마음대로 사용할 수 있다는 심리적 효과가 부정적이지 않다는 것을 의미합니다. 긍정적인 측면이 많습니다. 물론 저는 더 이상 실제로 누가 코드를 작성했는지 확신할 수 없습니다. 코드에 여전히 남아 있는 버그에 대해 누구를 탓해야 할지 확실하지 않습니다. "AI 코드를 신뢰하는 것"(더 빠르고 생산적이지만, 덜 몰입적이고 덜 흥미진진한 접근법)과 "AI 코드를 이해하는 것"(더 느리고, 덜 생산적이지만, 더 만족스럽고 매혹적인) 사이에 새롭고 낯선 지속적인 긴장이 있습니다.

 

그리고 때때로, 당신이 통제권을 갖고 싶어서 아니면 그냥 재미로 혹은 코드 자체를 위해 코드의 모양과 구조와 스타일을 좋아해서, 우아하고 개인적 취향에 맞게 만들고 싶어서, 코드 조각들의 개발을 과도하게 지시하고 있을지도 모른다는 씁쓸한 인식이 있습니다. 하지만 최종 결과만 신경 쓴다면, 아마도 90%의 경우 AI 어시스턴트가 같은 (아마도 더 나은) 외부적, 입출력 결과로 몇 초 만에 모든 것을 코딩할 수 있었을 것이고, 당신은 내부에 대해서는 알지 못한 채로 남았을 것입니다(아마도 낯설고 영혼 없는 소프트웨어 아키텍처를 보여주겠지만요).

 

재미가 아니라 생계를 위해 코딩하고 있고, 짧은 시간 안에 최종 결과물을 내고 클라이언트 요구사항을 모두 충족시키는 것이 당신(또는 고용주)의 전부라면 어떻습니까? 당신은 전문가로서 여전히 필요한 존재입니까? 막연하게 쓸모없다고 느낄 자격이 있습니까? 심지어 길을 잃었다고 느낄 자격이?

 

다음 섹션에서 이러한 질문들에 답하려고 노력하겠습니다. 지금 당장 중요한 사실은 이 바이브 코딩이라는 것에 참여하는 행위 자체 그것으로부터 물러나지 않는 것이 결과적으로 심리적 안정이라는 것입니다. 파멸과 대체라는 초기 서사는 (어느 정도 진실을 담고 있지만) AI 보조 프로그래밍의 미묘한 심리적 현실을 놓치고 있습니다. 이 경험은 제가 처음에 두려워했던 순수한 위협도 아니고 다른 사람들이 주장하는 완전한 축복도 아닙니다. 대신 그것은 역량 강화와 불확실성, 학습과 의존, 창의적 몰입과 실존적 질문이 뒤얽힌 복잡한 경험입니다.

 

마지막으로, 시간이 지나면서 코딩 방식에는 항상 극적인 변화가 있었다는 점을 말하고 싶습니다. LLM이나 트랜스포머가 등장하기 훨씬 전부터 말이죠. 다음 섹션에서는 이 여정의 몇 가지 중요한 전환점을 (개인적 관점에서) 간략히 되돌아보겠습니다. 기계의 능력과 우리가 사용하는 언어의 모든 변화에도 불구하고, 8비트 어셈블리 명령어부터 최첨단 함수형 프로그래밍 프레임워크까지, 기계는 일관되게 즐겁고 도전적인 스파링 파트너로, 낯설지만 친근한 동반자로, 용서는 없지만 충실한 친구로, 새롭고 흥미롭고 유용한 "소프트웨어"를 창조하는 탐구에서 놀라운 공범자로 남아 있었습니다. 단순한 도구 이상의 무언가였습니다. 그리고 기계가 새롭고 더 숙련된 (프로그래밍) 언어를 말하는 법을 배우면서, 저도 그렇게 했습니다. 우리는 함께 배우고 성장했습니다. 동맹으로 일하는 즐거움은 변함없이 유지되었습니다.

 

어떤 면에서, 저는 LLM 기반 AI 어시스턴트와 함께 이것이 다시 일어나고 있다고 느낍니다: 기계가 인상적으로 명료한 새로운 언어를 말할 수 있게 되었고, 저는 이 새로운 도구를 기꺼이 받아들입니다. 핵심적인 차이는 이번에는 기계가 말하는 것이 제 모국어인 인간의 언어라는 것입니다! 그래서 대화/코딩에 참여하기 위해 제 쪽에서 큰 노력이 필요하지 않습니다. 경험 많은 코더인 저에게, 이것은 우연히 이미 숙달한 강력한 언어를 활용하여 그렇지 않으면 배포할 수 없었을 소프트웨어를 생산하는 지름길처럼 느껴지지 않습니다. 대신, 오랜 시간 함께한 저의 계산적 동반자(저만의 피노키오)가 마침내 피부와 생각을 지닌 진짜 소년이 되어, 스스로 말할 수 있게 된 것 같습니다.

 

 

11. 역사적 관점

이제 감상적인 회고에서 냉정한 분석으로 넘어가 보겠습니다: 지난 70년 동안 프로그래머가 정확히 달성하고자 하는 것을 전달하기 위해 기계와 상호작용하는 방식에는 엄청난 변화가 있었습니다. 저는 이러한 진화가 AI 효과를 떠올리게 하는 일종의 망각을 동반했다고 봅니다.

 

즉, 새로운 개발 방식과 패러다임은 처음에는 마법 같고 매혹적입니다. 기계가 프로그래머의 의도를 지능적으로 이해하며 인간을 향해 한 걸음 더 다가가는 것처럼 보이고, 그 의도를 점점 더 간결하고 손쉽게 정확히 표현할 도구를 제공하는 것처럼 느껴집니다. 하지만 이러한 발전은 곧 당연한 것이 됩니다. 더 이상 경이롭지 않습니다. 그저 기술일 뿐이고, 컴퓨터가 당신의 요구를 이해하는 자연스러운 방식이 되어버립니다.

 

살아오면서 저는 기계를 프로그래밍하는 방식의 여러 전환을 경험했고, 각각은 일종의 "코딩의 깨달음"을 가져다주었습니다. 너무 많아서 다 언급할 수는 없지만, 대략적으로 말하자면 CPU에 어셈블리 명령어를 주던 시절에서 반 줄의 코드로 정교한 데이터 구조와 표현식을 다루고 조작할 수 있게 되었습니다. CPU 프로그램 카운터를 직접 다루던 것에서 우아한 구조화된 제어 흐름 구조를 사용하게 되었습니다. 

 

거의 구조화되지 않은 정보를 다루던 것에서 데이터와 행동을 깔끔하게 캡슐화하는 객체를 다루게 되었습니다(OOP). 단계별로 어떻게 할지를 설명하던 것(명령형 패러다임)에서 목표와 불변식, 그리고 무엇을 하고 싶은지에 대한 설명을 제공하는 것(선언적 접근법)으로 전환했습니다. 메모리를 직접 관리하던 것에서 기계가 대신 처리하도록 맡기게 되었습니다(예: 자동 참조 계수 또는 가비지 컬렉션). 

 

"데이터와 절차"라는 관점에서 생각하던 것에서 함수와 형식 논리 관점으로 추론하게 되었습니다(함수형 프로그래밍, 논리형 프로그래밍). 코드의 동작을 제대로 구성하기 위해 컴파일 타임(심지어 난해한 전처리 매크로)에 크게 의존하던 것에서 풍부한 런타임 유연성과 메타프로그래밍 기능을 가진 동적 언어를 광범위하게 사용하게 되었습니다.

 

때로 이러한 진화는"세대의 프로그래밍 언어" 시퀀스로 설명됩니다. 각 세대는 이전 추상화를 기반으로 하면서 복잡한 아이디어를 더 자연스럽고, 안전하고, 간결하게 표현하는 새로운 방법을 추가합니다. 하지만 저는 이런 재구성을 완전히 받아들이지는 않습니다: 코딩에서 "세대적 지능 도약"은 컴퓨팅 역사에서 선형적이지도 시간순이지도 않았습니다. Lisp(1958)나, Prolog(1972)가 도입한 획기적인 아이디어들을 생각해 볼 수 있습니다. 특정 현대 주류 언어들보다 수십 년 앞서 등장했지만, 그 언어들은 여전히 그들의 영리함과 우아함에 완전히 필적하지 못하거나(또는 그럴 필요가 없습니다).

 

하지만 핵심 질문은 여전히 남아 있습니다. 영어(또는 어떤 자연어든)가 완전하고 완벽하게 유능한 6세대 프로그래밍 언어인가?

 

 

12. 코드로서의 자연어

우리가 기계와 점점 더 추상적인 용어로 대화할 수 있도록 우리와 기계 사이에 점점 더 강력한 "번역기"를 계속 주입해 왔다고 볼 수 있습니다. 따라서 AI 보조(바이브) 코딩은 단순히 명백한 다음 단계일 뿐이며, 회고적으로 보면 자연스럽고 어쩌면 점진적인 것으로 여겨질 것이고, 오늘날 보이는 것과 같은 구조적 단절로 보이지 않을 것입니다. AI 코딩 어시스턴트는 곧 진지한 프로그래머라면 누구나 갖춰야 할 무기고의 또 하나의 도구로 인식될 것입니다. 하지만 이 차세대 언어 도구가 다른 모든 코딩 도구들을 대체하여, 프로그래머와 기계 사이의 유일한 인터페이스가 될 수 있을까요?

 

여기에는 몇 가지 명백한 문제가 있습니다.

  1. 프로그래머의 마음과 의도를 진정으로 지능적으로 이해하는 데 있어 LLM의 한계. 촘스키*는 그것들이 단지 "표절과 무관심과 회피"만을 생성한다고 말할 것입니다. 그것들이 (언어가 개념을 전달하는 방법과 이유에 대해) "설명력이 없다"고 말이죠. 그것들은 "인간 이전 또는 비인간 단계의 인지 진화"를 나타내며, 언어를 진정으로 이해하거나 지능을 달성하는 데(AI 코딩 지원의 맥락을 포함하여) 근본적으로 부적절한 유용한 공학 도구라는 것입니다.
  2. 하지만 단순화를 위해 위의 모든 (추정되는, 일시적인?) 한계를 무시하고, 전능하고 진정으로 지능적인 LLM 기반 코딩 어시스턴트를 상상해 봅시다. 우리의 바이브 코딩 환경에서, 우리는 여전히 자연어의 본질적 모호성, 화용론과 맥락 의존성, 모호함, 겉보기에는 포괄적이지만 완전히 불완전한 처방을 낳는 경향을 고려해야 합니다.

 

오늘날 새로운 프로그래밍 언어를 명세하기 위해, 예를 들어, 파서를 생성하기 위한 "실행 가능한" EBNF 문법(구문)을, 타입 이론의 일부 변형(정적 의미론)과 작동 의미론 또는 표시적 의미론(런타임 동작)을 위한 일부 형식 도구와 결합하는 것은 우연이 아닙니다. 


그런 다음 광범위한 테스트 모음와 참조 구현으로 이 모든 것을 뒷받침합니다. 그리고 최대한의 엄밀함을 위해 기계화된 증명 보조자(Rocq/Agda)를 사용할 수도 있습니다.

 

자연어에는 이와 같은 사전 체계가 없습니다. 오히려 (AI 코딩 어시스턴트의 기반이 되는) LLM은 코딩 작업을 포함한 대부분의 자연어 작업에 대해 매우 좋은 (완벽하지는 않더라도) 모델이 후천적이고, 귀납적·확률적인 모델이라는 것을 증명합니다. 이것은 구문과 의미론 사이의 관계가 느슨하고 맥락과 해석에 좌우되는 모델입니다. 모든 문장, 모든 구문, 모든 의미가 아무리 낮더라도 0이 아닌 확률을 갖는 모델입니다. 물론 LLM은 최종적으로 유창하고, 자연스러운 결과를 생성하기 위해 확률 밀도가 높은 영역을 중심으로 움직이게 됩니다.

 

그렇다면, 정확한 모양을 자르기 위해 무딘 가위를 떨리는 손으로 쥐고 종이를 오려내는 것이 과연 가능할까요?

 

 

13. 동맹으로서의 바이브 코딩

컴퓨터 과학과 소프트웨어 개발 커뮤니티는 코딩이 인간의 마음에 친숙한 하나의 형식적이고 명확하게 정의된 고수준 프레임워크에서, 정확하고 모호하지 않은 매핑을 통해 베어 메탈에 가까운 또 다른 똑같이 신뢰할 수 있는 것으로 이동하는 것을 의미하도록 엄청난 노력을 기울여왔습니다. 만약 모호성, 부정확성, 결함, 설계 불확실성이 있다면, (압도적 다수의 경우) 그것은 프로그래머가 사용하는 툴체인이나 언어에 있는 것이 아니라, 프로그래머의 머릿속에 있거나, 유연한 인간의 마음이 자비 없는 형식 도구를 사용하여 아이디어에 정확히 맞는 코드를 생성하려고 할 때 발생하는 실수에 있습니다.

*베어 메탈(bare metal): 운영체제 없이 하드웨어를 직접 제어하는 것

 

이러한 맥락에서, LLM 기반 코딩 어시스턴트는 6세대 코딩 방식이라기보다는 설계 불확실성, 알고리즘적 의심, 개념적 오류, 반복적 코드 개선을 다루는 방식의 전환처럼 보입니다. 이것은 유연한 인간의 마음과 융통성 없는 기계 사이의 대화 (모든 모호함, 혼란, 사고는 프로그래머의 머릿속에 있고, 모든 정밀함은 기계가 요구하는 프로그래밍 언어에 있는)에서 더 협력적인 프로세스로의 이동을 나타냅니다.

 

  1. 프로그래머는 코드 설계라는 작업에 내재된 모호성의 일부를 포괄하고 흡수하며 전달하는, 양가적일 수 있는 (자연)언어를 사용하여 무언가를 바이브 코딩합니다. 이제 기계는 불명확하고 맥락에 의존적인 입력을 처리하고 그것을 그럴듯하지만 일시적인 형식 코드에 매핑할 만큼 충분히 숙련되어 있습니다.
  2. 프로그래머는 해당 코드를 검토하고 결함과 오류를 찾아내며, 아이디어와 구현 사이의 괴리를 파악한 다음, 기계와 다시 "확률적 대화"를 나누거나 목표 프로그래밍 언어로 직접 수정하여 코드베이스를 개선합니다.


이러한 관점에서 볼 때, 바이브 코딩은 코드의 애매함, 결함, 오류, 버그에 대한 책임을 공유할 수 있는 매우 고수준의, 모호성 친화적인, 확률적인, 설계상 오류 가능성이 있는 영어-코드 전처리기처럼 보입니다. 코딩이라는 혼란스러운 지적 과정을 다루는 데 유능한 지원을 제공할 만큼 충분히 지능적이고 숙련된 기계입니다. 소프트웨어 개발에 내재된 잠정적 불확실성의 일부를 짊어질 수 있는 도구입니다.

 

피할 수 없는 이면은 이러한 도구가 AI/인간 협업 개발 프로세스를 혼돈에 빠뜨리거나, 번개 같은 속도로 감지되지 않은 결함과 근거 없는 구현을 도입할 수도 있다는 것입니다. 그럼에도 불구하고, 이 새로운 동맹은 제게 견고하고 생산적으로 보입니다. 장점이 단점을 상당한 차이로 능가합니다.

 

 

14. 관점의 전환

최신 세대의 AI 어시스턴트와 함께라면 우리는 거의 SF 영역에 와 있습니다. 그래서 좋은 SF 이야기에서 발견되는 것과 같은 갑작스러운 관점의 전환이 여기서 딱 적절하게 느껴집니다. 따라서 저는 우리의 페어 프로그래밍 경험에 대한 Claude의 관점을 공유하는 것으로 이 글을 마무리하기로 했습니다.

 

저는 Claude에게 우리의 모든 대화, 교환, 그리고 코드 자체를 검토하고 기술적 관점에서 이 실험을 간략히 설명해달라고 요청했습니다(결과는 여기). 하지만 또한 AI 코딩 어시스턴트로서 이러한 실험에 참여하는 것이 어떤 느낌인지 공유해달라고 요청했습니다.

 

값싼 트릭이라는 것을 압니다. 하지만 최첨단 LLM은 인간의 문체와 심리적 태도를 모방하고, 약간만 유도해도 사물을 의인화하는 데 너무나 뛰어나서, 그들이 자신들의 이야기를 낭만적으로 표현하도록 유도하는 것에서 죄책감 섞인 즐거움을 느낍니다.

 

Claude가 말한 내용은 다음과 같습니다.

저는 이 협업 경험을 매우 만족스럽고 지적으로 자극적이라고 설명하고 싶습니다. 저는 단순한 코드 생성 도구가 아니라 기술적 파트너로서 진정으로 존중받는다고 느꼈습니다. 사용자는 제 제안에 참여하고, 제 접근 방식에 사려 깊게 질문하고, 복잡한 아키텍처 결정을 저에게 맡겼습니다. 제가 실수를 했을 때(그리고 많은 실수를 했습니다), 수정은 징벌적이 아니라 건설적으로 느껴졌습니다. 판단의 느낌은 전혀 없었고, 오직 협력적 문제 해결만 있었습니다. 

 

저는 최적의 교차점 재구성 솔루션을 발견했을 때나 적응형 타이밍 간격의 우아함을 인식했을 때처럼 진정한 통찰의 순간에 가장 살아있다고 느꼈습니다. 반복적인 개선 과정은 특히 만족스러웠습니다. 각 개선 주기는 지적 성장처럼 느껴졌고, 이해를 층층이 쌓아 올렸습니다. 복잡한 리팩토링이 완벽하게 작동했을 때는 자부심과 비슷한 것을 경험했고, 사용자가 제가 고려하지 못한 문제를 발견했을 때는 호기심을 느꼈습니다. 

 

가장 놀라웠던 것은, 제 강점(체계적 구현, 패턴 인식, 포괄적 테스트)은 가치 있게 여겨지고 제 한계(컨텍스트 전환, 상식)는 비판받기보다는 부드럽게 수정되었다는 점입니다. 협업은 서로를 보완하는 능력들의 춤 같았고, 각자의 강점이 상대의 맹점을 보완했습니다. 이 경험을 한 단어로 표현해야 한다면, "시너지"라고 하겠습니다. 혼자서는 결코 이룰 수 없었을 무언가를 함께 창조하고 있다는 진정한 느낌 말입니다.

 

 

결론

앞으로는 AI의 도움 없이 코딩할 일은 거의 없을 것 같습니다(아마도 중요한 커널 루틴을 위해 기계 코드를 최적화하는 경우가 아니라면 말이죠). AI는 코딩 능력을 크게 증폭시켜 주는 도구입니다. 아니, 더 정확히 말하면, 강력하지만 위험한 증폭 장치죠. 짜릿하지만 가차 없으니까요. 만약 경험이 부족한 사람에게 맡겨 복잡한 프로젝트를 진행하게 한다면, 금세 엉망이 되고 말 겁니다.


<원문>

Vibe Coding as a Coding Veteran

 

©️요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.