AI를 활용한 개발에 대한 시니어 소프트웨어 엔지니어의 관점
A Senior Software Engineers perspective on building with AI
핵심 요약
AI가 생성한 결과물의 품질을 유지하기 위해 자동화된 가드레일과 테스트를 활용하는 실무적인 개발 방법론을 공유합니다.
- UI/UX 품질 관리 — AI의 과도한 장식과 패턴 반복을 막기 위해 구체적인 지침과 개인적 의견을 반영함
- 콘텐츠 작성 주의 — AI가 쓴 글은 기술 매뉴얼처럼 딱딱하므로 사람이 직접 작성하거나 스타일을 모방하도록 유도함
- 가드레일 도입 — AI의 반복적인 실수를 방지하기 위해 특정 패턴을 감지하고 빌드를 차단하는 스크립트를 활용함
- 자동화 테스트 — Git 훅과 CI/CD 파이프라인을 통해 코드 품질을 유지하고 AI가 궤도를 벗어나지 않게 관리함
2002년부터 웹사이트를 만들었는데, 그때는 무료 호스팅이라고 해봐야 Angelfire 아니면 Geocities(Angelfire가 최고였지) 선택지밖에 없었어. marquee 태그는 사방에 널려 있었고, git은 창시자의 머릿속에나 있던 시절이라 배포는 죄다 FTP로 했지. 공룡들이 평화롭게 지구를 누비던 시절이야.
처음엔 AI로 코딩한다는 생각 자체가 영 거부감이 들었거든. 근데 문득 이런 생각이 들더라고. "내가 뭘 안다고 이러나? 예전엔 git도 싫어했고 JS로 백엔드 돌리는 건 말도 안 된다고 생각했는데, 지금은 회사에서 매일 git이랑 React 쓰고 있잖아." 그래서 한번 해보기로 했지. 지난 1년 동안(AI 업계에선 10년 같은 시간이지만) AI로 개발하면서 프로세스를 다듬고, 적절한 도구를 찾고, AI로 최상의 결과물을 뽑아내기 위해 부족한 부분을 채워줄 나만의 도구들을 만들어봤어. 물론 AI가 절대 못 하는 것들도 많지만, 제대로 된 사람이 올바르게 쓰면 꽤 쓸만한 도구가 될 수 있겠더라고(이제는 AI 생각만 해도 질색하진 않아). 그래서 너희가 쓰레기 같은 결과물 만드는 걸 멈추게 도와줄 조언 몇 가지를 적어볼게.
AI는 여전히 UI/UX를 못 해
Fable 5 Max, GTP Sol 5.6 Max, Google Stitch with Gemini 3.1 Pro 등등 안 써본 게 없는데, AI한테 다 맡기면 결국 조잡하고 지저분한 쓰레기 더미만 남게 돼. 좋은 UI는 사용자가 알아야 할 걸 알려주고 굳이 말 안 해도 뭘 해야 할지 보여주는데, AI는 항상 말이 너무 많아. 모든 걸 일일이 설명하고 라벨을 붙이려 들어서 화면이 엄청나게 복잡해지지. 그래서 AI한테 프롬프트를 넣을 때 UI에 대해 구체적이고 상세한 지시를 내려야 해. 안 그러면 엉뚱한 타이밍에 불필요한 정보만 쏟아내서 사용자를 질리게 만드는 개판 오 분 전인 결과물이 나오거든. AI는 패턴을 학습하는 놈이라, 디자인을 전부 AI한테 맡기면 모든 사이트가 똑같이 뻔하고 구린 패턴으로 도배되는 거야. 그 패턴을 깨려면 네 주관을 확실히 밝히고 구체적인 예시까지 곁들여야 해.
AI한테 카피라이팅 맡기지 마!
AI는 사람이 읽을 웹사이트 문구를 쓰는 데는 여전히 젬병이야. 교정이나 맞춤법 검사 정도엔 쓸만하지만, 사이트 문구를 전부 AI한테 맡기면 무슨 기술 매뉴얼 읽는 기분이 들 거야. AI가 보기엔 좀 "불완전"할지 몰라도, 네가 직접 진심을 담아 쓴 글이 사용자의 신뢰를 얻고 사이트를 실제로 쓰게 만드는 데 훨씬 효과적이야. 네 타겟은 AI가 아니라 사람이라고. 블로그 포스트나 기사를 쓸 땐 일단 네가 직접 좀 써보고, 그다음 AI한테 네 스타일을 흉내 내보라고 시켜봐. 완벽하진 않아서 네가 직접 퇴고하고 수정해야겠지만, 그냥 AI한테 다 맡겨버리는 것보단 훨씬 나을 거야.
약쟁이 다루듯이 해라
AI가 똑같은 멍청한 실수를 반복하다가 "맞아요, 제가 기억하고 있었는데 무시했네요. 메모리에 추가할게요..."라고 하는 거 다들 겪어봤지? 그래서 AI의 기억력이 나를 배신하지 못하게 하려고, 똑같은 실수를 두 번 다시 안 보려고 할 때마다 작은 스크립트(난 이걸 가드레일이라고 불러)를 짜서 빌드 단계에서 걸러버려. 하나하나가 그냥 "나쁜 패턴을 grep으로 찾아서, 파일이랑 라인 번호 출력하고, exit 1로 종료"하는 식이야. 이걸 다른 테스트들이랑 같이 pre-push 훅에 넣어두고 돌리지. 지금 한 프로젝트에만 120개 넘게 쌓였는데, 몇 가지 예시를 들어줄게.
- AI 냄새 풀풀 나는 문구. 로봇처럼 똑같은 단어나 구절을 반복해서 쓰는 패턴(일상 대화에선 거의 안 쓰는 말투)이 보이면 그 단어들을 금지해버려.
- 하드코딩된 색상이나 인라인 스타일. 테마 토큰이 아니면 푸시가 안 되게 막아버려.
- 레이어 위반. 프론트엔드 코드가 알면 안 되는 모듈을 임포트하는 경우 같은 거.
- 마케팅 문구. AI가 있지도 않은 환불 정책을 멋대로 지어낸 적이 있어서, 사용자에게 보여주는 문구는 무조건 '진실의 원천(source-of-truth)' 파일에 있는 내용만 쓰도록 체크하는 로직을 추가했어.
Claude.md나 Agents.md에 규칙을 적어두는 것도 유용하고 간편하지만, 이런 안전장치를 git 훅으로 돌리면 보호막이 하나 더 생기는 셈이지. AI가 어떻게든 다 뚫어버릴 수도 있겠지만, 적어도 네가 모르는 사이에 사고가 터질 확률은 확 줄어들어.

