바이브 코딩으로 짠 코드, 자꾸 에러가 나고 산으로 간다면 정답은 하네스(Harness)에 있다.
최근 개발 생태계는 '바이브 코딩(Vibe Coding)'이라는 새로운 패러다임에 열광하고 있다. 자연어로 "이런 기능 만들어줘", "이 페이지 디자인을 이렇게 바꿔줘"라고 말만 하면 AI가 뚝딱 코드를 만들어내는 시대다. 개발 속도는 이전과는 비교할 수 없을 정도로 비약적으로 빨라졌다.
하지만 실무 프로젝트에 AI를 본격적으로 도입해 본 사람이라면 깊이 공감할 것이다. AI는 강력하지만, 동시에 아주 위험하다. 기존 코드의 규칙을 무시하거나, 전혀 엉뚱한 아키텍처를 도입해 프로젝트 전체를 망가뜨리기도 한다.
이 문제를 완벽하게 해결할 수 있는 현대 AI 코딩의 핵심 키워드 '하네스 엔지니어링(Harness Engineering)'에 대해 아주 상세하게 파헤쳐 보자.
1. 프롬프트 엔지니어링의 한계: "제발 이러지 마"의 굴레
AI가 실수를 할 때, 우리는 보통 어떻게 대처할까? 대다수의 사람들은 프롬프트를 수정한다.
- "이전에 작성한 A 코드는 건드리지 말고 B만 수정해."
- "반드시 React의 최신 훅(Hook) 문법만 사용해서 작성해."
- "데이터베이스 스키마는 절대 변경하지 마."
이것이 바로 우리가 흔히 아는 프롬프트 엔지니어링(Prompt Engineering)이다. AI에게 무엇을 해야 할지, 그리고 무엇을 하지 말아야 할지 '말로' 꼼꼼하게 지시하는 것이다. 하지만 프로젝트의 규모가 커지고 복잡도가 올라가면, AI는 이 수많은 지시사항을 잊어버리거나 문맥을 오해하여 결국 치명적인 에러를 발생시킨다.
프롬프트만으로는 통제가 불가능한 순간이 반드시 찾아온다. AI라는 강력한 엔진을 얻었지만, 브레이크와 핸들이 없어 언제 사고가 날지 모르는 레이싱카를 타는 것과 같다.
2. 하네스 엔지니어링이란 무엇인가?
여기서 등장하는 구원투수가 바로 하네스 엔지니어링(Harness Engineering)이다. '하네스(Harness)'는 원래 등반할 때 몸을 지탱해 주는 안전벨트나, 동물을 통제하기 위한 마구를 뜻한다.
소프트웨어 개발에서의 하네스 엔지니어링이란, AI에게 "이건 절대 하지 마!"라고 말로 타이르는 대신, "만약 네가 실수하더라도 여기서 걸러질 수밖에 없어"라는 물리적이고 시스템적인 안전장치(가드레일)와 작업 레일을 설계하는 기술을 말한다.
프롬프트 vs 하네스: 결정적 차이
- 프롬프트 엔지니어링: "안전선 밖으로 나가지 마!" 라고 경고 표지판을 세우는 것
- 하네스 엔지니어링: 안전선 밖으로 넘어갈 수 없도록 튼튼한 유리 벽을 설치하는 것
즉, 하네스는 AI가 규칙 내에서만 움직일 수 있도록 환경 자체를 통제한다. 코드를 작성하는 것은 AI일지라도, 그 AI가 활동할 수 있는 '모래상자(Sandbox)'의 경계를 설정하는 것이 바로 개발자의 새로운 몫이 된 것이다.
3. 시스템이 AI의 실수를 스스로 교정하게 만들다
그렇다면 하네스를 적용하면 실제 개발 프로세스는 어떻게 달라질까? 가장 핵심적인 변화는 AI가 스스로 실수를 인지하고 교정하는 구조가 만들어진다는 점이다.
사람이 AI가 짠 수백 줄의 코드를 일일이 검수하는 것은 불가능에 가깝다. 하지만 잘 설계된 하네스(예: 강력한 자동화 테스트 코드, 린터(Linter), 타입 체커, CI/CD 파이프라인 등)가 구축되어 있다면 이야기가 다르다.
- AI가 코드를 작성하여 제출(Commit)한다.
- 하네스 시스템이 코드를 자동 검증하다가 에러(기존 로직 파괴, 룰 위반)를 발견한다.
- 시스템은 AI 에이전트에게 에러 로그와 함께 "테스트 실패함. 다시 수정해"라고 피드백을 보낸다.
- AI는 에러를 확인하고 "어? 내가 기존 룰을 어겼구나" 스스로 인지한 뒤 코드를 재수정한다.
이 사이클이 돌아가면서, 개발자는 지루한 코드 리뷰와 디버깅에서 해방될 수 있다. 시스템이 알아서 AI의 멱살을 잡고 올바른 길로 이끌어주기 때문이다.
4. 개발자의 역할 진화: '코드 타이피스트'에서 '시스템 아키텍트'로
하네스 엔지니어링의 부상은 개발자의 본질적인 역할이 변하고 있음을 시사한다. 단순한 로직 구현이나 타이핑은 AI가 사람보다 훨씬 빠르고 효율적으로 해낸다.
이제 개발자의 핵심 역량은 "이 AI 에이전트가 어떤 범위까지 우리 시스템에 접근할 수 있게 할 것인가?", "AI가 생성한 코드를 어떤 테스트 케이스로 검증할 것인가?", "AI가 절대 건드리면 안 되는 코어 비즈니스 로직을 어떻게 격리할 것인가?"를 고민하고 설계하는 데 있다.
폭주하는 AI를 두려워할 필요는 없다. 그 폭발적인 에너지를 우리가 원하는 방향으로 안전하게 이끌 수 있는 튼튼한 하네스만 잘 엮어둔다면, 개발 생산성은 우리가 상상했던 그 이상으로 높아질 것이다.
