작년부터 바이브 코딩 (Vibe Coding) 이라는 말이 나오기 시작하더니 올해는 정말 많이들 이야기 하고 있다.

지난 10여년간 오로지 vim 편집기로만 코딩을 하고 IDE는 일체 쓰지 않던 나로써는 정말 상상할 수 없는, 선호하지도 않는 방식이긴 하지만, 최근 새로운 프로그램을 새로운 언어로 개발을 하려고 보니 시간이 많이 소요 될 것 같아서, IDE 및 AI 어시스턴스를 셋팅해보았다.

처음에 느낀 소감은 ‘와 이거 진짜 대박인데..?’ 였다. 요구사항만 말해도 눈앞에서 코드가 쭉쭉 완성될때는 ‘생산성이 정말 폭발적으로 오르겠구나’라는 생각이 들었다. 특히 최근 몇년간 파이썬으로만 개발을 하다가 Go언어로 다시 개발을 해야 할때, 어디서부터 시작해야 할지 막막했는데, AI가 PoC 코드를 정말 빠르게 작성해주었다.

하지만, 2주 정도 사용해보니 두 가지를 깨닫게 되었다.

첫째, 동작하지 않는 코드를 너무 많이 뱉어낸다. 처음에는 모델의 성숙도가 떨어져서라고 생각했는데, 그보다는 ‘내가 프롬프트를 어설프게 작성해서’가 주요 원인 같았다. 물론, 주요 기능들은 명확하게 이야기해서 곧잘 구현하지만, ‘테스트 코드 짜줘’ ‘개선할 점을 찾아줘’ 같은 모호한 표현을 썼을때는 상당히 이상한 방향으로 코드를 뱉어냈다. 하지만, 이 부분은 내가 개발하려는 언어의 숙련도를 높이거나 프롬프트를 작성하는 요령이 생기면 개선될여지가 보였다.

사실 두번째 이유를 말하고 싶어서 이 글을 작성하게 되었는데, 동작하는 코드를 뱉어내도 문제이다. 이게 무슨 말이냐면, 결국 해당 코드로 단순한 업무를 하거나 아니면 일회성 업무를 하는게 아니라면 유지보수를 하고, 기능을 추가/삭제하고, 디버깅을 해야 한다. 그러기 위해서는 ‘코드를 이해해야 한다’, ‘동료가 물어보면 설명할 수 있어야 한다.’ 하지만, 내가 관찰한 대부분의 사람들은 AI가 뱉어준 코드들을 ‘이해하고 있다고 착각한다’.

모두들 한 번쯤은 학창시절 숙제를 스스로 풀지 않고 답안지 혹은 친구것을 보고 베껴서 제출한 경험이 있을 것이다. 이때, 답안지를 보고 답을 베낄때는 내가 해당 문제를 이해한 것처럼 보이지만, 실제론 단순히 외운것이라 조금만 응용해도 풀지 못하는 경우가 부지기수다.

바이브 코딩은 이런 것이다. 결국, 당장 동작하는 코드를 뱉어냈을때, 순간적으론 생산성이 높아진 것처럼 느껴지겠지만, 결국 그것은 기술부채이다. 해당 내용을 완전히 내것으로 만들어야 하지만, 대부분은 스스로 안다고 착각한다.

결국 ‘정답지’를 보는 식으로 AI를 쓰게 된다면 본인의 실력은 유지는 커녕 점점 떨어지게 될것이다.

그렇다면 어떡해야 할까? 내것으로 만들려고 해야 한다.
어떡하면 내 것으로 만들 수 있을까?
내가 많이 사용하는 방법을 공유하겠다.

첫째로는 빈칸채우기 혹은 퀴즈 맞추기이다. AI의 기술 부채를 해결하기 위해 AI를 사용하는게 아이러니하지만, 아주 효과가 좋았던 방법이다. 내 코드를 주면서 핵심내용에 빈칸을 만들어서 나에게 문제를 내고, 해당 내용을 내가 구현 후 맞았는지 틀렸는지 알려주는 방식이었다. 혹은 퀴즈를 내달라는 방법도 아주 좋았다.

두번째로는 다른 방식으로 구현하거나, 다른 방식과 비교해보기이다. AI는 보편적인 방법을 구현해줄때가 많아, 현 상황에서 최적인 코드를 구현하지 않을때가 더러 있다. 그렇기 때문에 맹목적으로 믿지 말고 계속 해당 코드를 어떻게 다른 식으로 구현 할 수 있을지를 생각해보아야 한다.

마지막으로, 처음부터 내가 다시 구현해보기이다. 수학문제도 한 번만 풀었다고 내 것으로 할 수 없는 것처럼, 해당 프로그램을 여러번 다시 구현해본다면 완전히 내것으로 만들 수 있다. 물론, 이는 프로그램 사이즈에 따라 시간이 상당히 소요될 수 있으므로 매번 할 수 있는 방법은 아니다.

어떤 기술을 사용할때는 기술의 장단점을 확실히 파악하고 이용하는 것이 중요하다.
은총알은 없다.
https://worrydream.com/refs/Brooks_1986_-_No_Silver_Bullet.pdf

댓글남기기