브라우저에 화면이 정상적으로 열렸습니다. 파일 다운로드도 됐고, 주문 금액 계산도 제대로 나왔습니다.
비개발자인 제 입장에서는 이 정도면 먼저 이런 생각이 듭니다.
“일단 잘 돌아가네.”
그런데 이번에는 여기서 멈추지 않았습니다. AI로 만든 작은 웹앱을 다른 AI에게 다시 보여주고, 화면에서는 보이지 않는 문제가 있는지 확인해봤습니다.
사용한 도구는 Freebuff였습니다.
※ 테스트 기준: 2026년 9월 29일 / Windows 환경 / 별도로 만든 테스트용 웹앱
✓Freebuff는 어떤 도구인가
Freebuff는 무료로 사용할 수 있는 오픈소스 AI 코딩 에이전트입니다. 터미널에서 사용하는 CLI뿐 아니라 Desktop, Web, Cloud 등 여러 형태를 제공하고, 프로젝트의 파일을 찾아 코드를 수정하거나 필요한 검사를 실행하는 작업에 활용할 수 있습니다.
여러 AI 모델을 선택할 수 있다는 점도 특징입니다. 저는 이번 테스트에서 코드를 새로 만드는 용도보다 이미 만든 코드를 한 번 더 검토하는 역할에 관심을 뒀습니다.
AI가 만든 코드가 화면에서 잘 작동하더라도, 정상적인 사용 외의 상황에서 문제가 없는지 한 번 더 확인해보기 위해서였습니다.
Freebuff 직접 설치해서 사용해보기
공식 GitHub가 안내하는 CLI 설치 방법은 간단합니다.
1. Node.js와 npm을 사용할 수 있는 환경을 준비합니다.
2. 터미널에서 Freebuff를 설치합니다.
npm install -g freebuff
3. 검토할 프로젝트 폴더로 이동합니다.
cd 내-프로젝트-폴더
4. Freebuff를 실행합니다.
freebuff
실행한 뒤에는 원하는 작업을 자연어로 요청하면 됩니다. 코드 리뷰가 목적이라면 보안, 입력값 처리, 오류 가능성 등 확인하고 싶은 관점을 구체적으로 알려주는 편이 좋았습니다.
설치 방법과 지원 모델은 변경될 수 있으므로 실제 설치 시 공식 GitHub의 최신 안내를 함께 확인하세요.
✓잘 돌아가던 코드에서 문제가 발견됐습니다
테스트용 웹앱에는 파일 다운로드, 관리자 페이지, 이름 입력, 주문 금액 계산 기능을 넣었습니다. localhost:3000에서 실행했을 때 정상적인 입력에서는 모두 작동했습니다.
하지만 Freebuff로 코드를 다시 확인하자 제가 화면 테스트에서는 보지 못했던 부분이 나왔습니다.
파일 다운로드 경로 처리 · 관리자 인증 토큰 · 스크립트 입력(XSS) · 주문값 검증
가장 이해하기 쉬웠던 것은 파일 다운로드였습니다. 정상적인 파일명에서는 문제가 없었지만, 입력값을 바꿨을 때 허용하지 않은 경로의 파일에 접근할 가능성을 확인했습니다. 개발 용어로는 Path Traversal이라고 합니다.
쉽게 말하면 허용한 서랍만 열어줘야 하는데, 입력값을 바꿔 다른 서랍까지 열 수 있는지를 확인한 것입니다.
지적된 부분을 수정한 뒤 같은 코드를 다시 검사했습니다. 대부분 해결됐지만 관리자 인증 관련 코드는 일부가 남아 있어 한 번 더 수정했습니다.
여기서 확인한 건 간단했습니다. 수정한 결과도 다시 확인해야 했습니다.
✓Freebuff는 ‘두 번째 검토자’로 보는 편이 맞았습니다
이번 테스트만으로 Freebuff가 코드의 안전성을 보증한다고 말할 수는 없습니다. AI 리뷰 역시 문제를 놓치거나, 중요도가 다른 항목을 비슷하게 보여줄 수 있습니다.
그래도 비개발자인 저에게는 의미가 있었습니다. 코드를 한 줄씩 읽지 못하더라도 “정상적인 사용 외의 상황에서는 어떻게 되는가?”를 한 번 더 확인할 수 있었기 때문입니다.
AI로 작성 → 직접 실행 → Freebuff로 리뷰 → 수정 → 재확인
그래서 Freebuff를 ‘완벽한 감리’라기보다 두 번째 검토자에 가깝게 보는 편이 맞았습니다.
Freebuff는 서비스 제공 과정에서 프롬프트, 코드, 파일, 저장소 데이터 등을 처리할 수 있습니다. 실제 회사 코드, API 키, 고객정보가 포함돼 있다면 회사 보안정책과 사용하는 모델의 데이터 처리 조건을 먼저 확인하는 편이 좋습니다.
바이브 코딩에서 필요한 것은 코드를 빨리 만드는 것만이 아니라, 만든 결과를 다시 확인하는 흐름까지 만드는 것이었습니다.
화면이 잘 돌아가는 것을 확인했다면, 저는 이제 한 번 더 묻습니다.
“이 코드, 정상적인 상황 말고도 버틸 수 있을까?”
