45년 차 개발자가 AI와 코딩하며 느낀 점: AI를 다루는 법
After today's AI-assisted coding session, I asked Clod how my 45 years of experience moved the needle
핵심 요약
AI 코딩 시 무비판적인 수용 대신, 경험을 바탕으로 아키텍처와 품질을 직접 통제해야 한다는 45년 차 개발자의 조언.
- 아키텍처 통제 — AI가 제안하는 불필요한 인프라를 거부하고 실질적인 필요성을 검증함
- 검증 중심 — AI의 결과물을 맹신하지 않고 스크린샷 루프 등을 통해 직접 확인하고 수정함
- 재사용성 확보 — 중복 코드를 방지하고 재사용 가능한 모듈로 설계하도록 AI를 유도함
- 경계 설정 — 모호한 가이드라인 대신 API 경계에서 입력을 검증하여 오류를 원천 차단함
오늘, 바닥부터 새로 사이트 하나를 뚝딱 만들었다. 말 그대로 뉴스 사이트니까, 뭐 "새로운 뉴스(new news)"라고 해야 하나... 세상에 뉴스가 더 필요하긴 하니까. 아무튼 기술 스택은 Linux, Django, Postgres, nginx. 서버에는 딱 이것만 돌아간다.
몇 시간 동안 키보드 두들기다가, Clod(수정: 아 젠장, 맞다! 의도적인 오타라고... 아이고 세상에!)한테 물어봤다. 순수하게 '바이브코딩(vibecoding)'만 하는 놈들은 절대 몰랐을, 내가 직접 개입해서 결과가 바뀐 지점들이 어디인지 말이야. 그래야 커뮤니티 사람들이 보고 실력을 좀 키울 수 있을 테니까.
아래 항목들은 내가 AI한테 운전대 다 맡기지 않고 직접 핸들을 꺾었던 순간들이다. 이게 바로 AI 보조 코딩과, 그냥 AI가 시키는 대로 하다가 AICrapola.com 같은 쓰레기 사이트나 만드는 바이브코딩의 차이다.
아키텍처의 절제
그냥 냅두면 이놈은 사이트에 있지도 않은 인프라를 자꾸 갖다 붙이려 한다. 트래픽도 없는 사이트 앞에 Cloudflare를 달자고 하질 않나, Postgres에 다 들어갈 캐시를 굳이 Redis로 돌리자고 하질 않나. 엔드포인트 4개짜리에 DRF 툴링을 산더미처럼 쌓아 올리려고 하길래.
전부 다 쳐냈다. "도대체 왜 Cloudflare가 아웃풋을 캐싱해야 하는데?" "그거 티어 넘어가면 돈 내야 하잖아." 보면 알겠지만, 난 Claude한테 꽤나 직설적으로 말한다. 좀 엄하게 안 하면 자꾸 딴소리하더라고.
기술 잘 모르는 바이브코더들은 AI가 제안하는 스택을 그냥 다 받아들인다. 뭘 알아야 반박을 하지. 그냥 추천해 주는 대로 가는 거다. Redis 내부 구조까지는 몰라도 "이거 지금 진짜 필요한가?"라고 물어볼 정도는 돼야지. 그런 반사 신경이 필요하다. "이 결정들 하나하나 다 근거를 대봐. V1에 꼭 필요한가? 나중에 다 뜯어고치지 않고도 추가할 수 있는 거 아냐?"
토큰 아끼려는 사람들을 위해 한마디 하자면, 거절한 레이어 하나하나가 곧 돈 주고 사야 할 설정 파일, 문서, 디버깅 지옥 몇천 줄을 줄이는 거다.
관심사의 분리, 처음부터 명시하기
이 사이트의 첫 번째 가정은, 긁어온(scraped) 콘텐츠가 사이트 내부에서 실시간으로 생성될 거라는 거였다.
나는 콘텐츠가 Django 앱 내부에 스크래핑 로직을 박아넣는 방식이 아니라, 외부 에이전트가 API를 통해 들어와야 한다고 판단했다.
코드를 짜기도 전에 문장 하나로 딱 정했다. 그 문장 하나 덕분에 수집 API, 검증 게이트, 소싱 정책 컨트랙트가 사이트 코드랑 엉키지 않고 깔끔한 경계 뒤에 자리 잡을 수 있었다. 나중에 이거 분리하려면 다 뜯어고쳐야 한다.
아키텍처 결정은 처음 프롬프트 짤 때는 껌값이지만, 40번째 프롬프트쯤 가면 엄청나게 비싸진다.
주장이 아닌 검증
이놈이 자꾸 흉측한 배너 광고를 가져오길래, 여기 좀 찔러보고 저기 좀 찔러보다가 결국 빡쳐서 한마디 했다.
"매번 네 눈으로 직접 확인해. 제대로 나올 때까지 수정해."
그 한마디에 작업 방식이 바뀌었다. 전에는 렌더링 결과물 확인도 안 하고 "완료"라고 보고하더니, 이제는 스크린샷 루프를 돌린다. Headless Chrome 띄우고, 렌더링하고, PNG 확인하고, 고치고, 다시 찍고.
그 루프 덕분에 내가 직접 확인 안 했으면 그대로 배포했을 버그들을 다 잡았다. 회사 웹사이트 스크린샷이 로고로 박혀 있질 않나, 로고가 단어 중간에서 잘려 있질 않나, 리더보드 광고 텍스트가 접힌 사이드바 밖으로 삐져나오질 않나.
순수 바이브코딩은 AI가 "성공"이라고 말하는 걸 그대로 믿는다. 코드가 그럴싸해 보이니까 작동할 거라고 생각하는 거지. 하지만 내가 직접 시키기 전까지는 그 누구도 최종 결과물을 제대로 본 적이 없다.
장인 정신
히어로 이미지를 새로 줄 때마다, 이놈이 리사이즈/크롭/WebP 로직을 매번 일회용 스크립트로 짜면서 Pillow를 설치했다 지웠다 하는 꼴을 세 번이나 봤다. 결국 Pillow를 의존성으로 하는 명령어 하나로 정리했다.


