가상의 상황을 하나 보겠습니다.
한 기획자가 바이브 코딩으로 사내용 조회 화면을 만들었습니다.
로그인하면 본인 정보만 보이도록 설계했고, 실제로 화면은 그렇게 작동했습니다. 그런데 몇 주 뒤, 요청 주소에 있는 번호 하나를 다른 숫자로 바꿔서 접속해본 사람이 있었습니다. 그러자 다른 직원의 정보가 그대로 떴습니다.
화면은 분명 본인 정보만 보여주고 있었습니다. 문제는 화면이 아니라, 그 뒤에서 요청을 실제로 막고 있었는지 였습니다.
바이브 코딩으로 뭔가 만들어본 기획자라면, 이런 이야기가 남 일 같지 않을 겁니다. 화면은 완성됐는데, 화면 뒤에서 무슨 일이 일어나는지는 정작 아무도 확인하지 않은 채로요.
"돌아간다"와 "안전하다"는 다릅니다.
개발자도 화면이 도는 걸 확인하고 나서 바로 배포하지 않습니다. 권한이 없는 사람이 접근할 수 있는지, 이상한 값을 넣어도 버티는지, 데이터가 엉뚱한 곳으로 새지는 않는지를 따로 확인하는 절차를 거칩니다. 바이브 코딩은 이 절차를 생략하기 쉽게 만듭니다. 화면이 뜨고 원하는 결과가 나오면, 그걸로 다 됐다고 느껴지기 때문입니다.
화면에서 가리는 것과, 실제로 접근을 막는 것은 다릅니다.
두 가지 사례가 더 있습니다.
첫번째는 입력값 검증입니다.
화면에서는 수량을 1개에서 10개 사이로만 입력하도록 제한했습니다. 그런데 그 화면을 거치지 않고 조작된 요청을 직접 보내면, 화면의 제한과 상관없이 이상한 값이 그대로 저장됐습니다. 정상적으로 화면을 눌러서 입력했을 때 잘 작동한다는 것만으로는, 이상한 값이 들어왔을 때도 안전하다는 뜻이 아니었습니다.
두번째 사례는 조금 다릅니다. 겉으로는 아무 문제 없이 잘 작동하는데, 문제가 다른 곳에 있었습니다.