AI 코딩의 함정: 데모는 1시간, 운영은 지옥

AI가 만든 코드를 바로 상용 서비스에 쓸 수 없는 진짜 이유

by SunnyPark

아이디어만 있으면 무엇이든 순식간에 만들 수 있는 시대가 열린 것 같습니다. "AI, 이메일 자동 발송 프로그램 만들어줘." 몇 분 뒤, AI는 놀라울 정도로 완벽하게 작동하는 코드 파일을 내놓습니다. 우리는 환호합니다이 마법 같은 경험은 'AI 도입'에 대한 강력한 확신을 심어줍니다.

하지만 진짜 문제는 그 이후에 시작됩니다. "고객 등급별로 발송 기능을 다르게 해볼까?"라는 작은 기능 추가 요구에, 코드 전체가 흔들리기 시작합니다. 간단한 버그 하나를 수정했을 뿐인데, 예상치 못한 곳에서 에러가 터져 나옵니다. 빠르게 켜졌던 희망의 불씨가 순식간에 '운영 지옥'이라는 절망의 재로 변하는 순간입니다. 작은 기능 하나를 추가하거나 수정하려 해도, 뒤죽박죽 엉킨 코드 전체를 뒤엎어야 하는 상황이 발생하는 것이죠. 이것이 바로 AI 도입 후 겪게 되는 '운영 지옥'의 실체입니다


문제 정의: AI는 왜 정리 안 된 창고(모노리스)를 만들까?

왜 이런 일이 발생할까요? AI에게 '그냥 코딩해줘'라고 요청하면, 대부분의 경우 모든 기능을 한 파일에 쏟아부은 '모노리식(Monolithic)' 구조의 코드를 만들기 때문입니다.

이는 AI가 게으르거나 능력이 부족해서가 아닙니다. AI는 본질적으로 '가장 빠르게 작동하는 예시'를 보여주는 데 최적화되어 있기 때문입니다. 복잡한 설계나 장기적인 유지보수 같은 아키텍처적 맥락을 고려하기보다, 눈앞의 요구사항을 가장 빨리 해결하는 데 집중하는 것이죠.

이해하기 쉬운 비유를 들어보겠습니다.

모노리스코드는 정리 안 된 창고와 같습니다. 모든 물건이 한 방에 뒤죽박죽 쌓여있죠. 어디에 무엇이 있는지 기억하는 창고 담당자(초기 개발자)만 빠르게 물건을 찾을 수 있습니다. 새로운 직원이 오면 적응하는 데 한참 걸리고, 물건 하나를 잘못 빼면 와르르 무너질 위험이 큽니다.

반면, 잘 설계된 모듈러(Modular) 코드는 체계적인 물류 센터와 같습니다. 모든 물건에 라벨이 붙어 지정된 선반에 정리되어 있습니다. 누구나 쉽게 물건을 찾고 교체할 수 있으며, 한 선반에 문제가 생겨도 다른 곳에 영향을 주지 않습니다.

1-3.png [코딩 방법 예시: 모놀리스 Vs 모듈러]

AI는 일단 창고 방 하나에 모든 물건을 쌓아놓고 "여기 다 있어요!"라고 보고하는 성실하지만 요령 없는 신입사원과 같습니다.


실제 사례: 저의 이메일 자동 발송 PoC 이야기

저 역시 최근 '이메일 AI 자동 발송 PoC'를 진행하며 이 문제를 직접 겪었습니다. 처음 AI에게 요청하여 얻은 구조 A(모노리스)는 app.py라는 단일 파일에 데이터 처리, API 로직, 비즈니스 규칙 등 모든 책임이 담겨 있었습니다. 당장 실행은 됐지만, 테스트는 어렵고 변경 영향도를 예측할 수 없었죠.

그래서 저는 '운영'을 고려하여 직접 구조 B(모듈러)로 코드를 리팩토링했습니다. 핵심 비즈니스 로직(core), 데이터 모델(models), API 경로(routes), 테스트 코드(tests) 등 역할을 명확히 분리했습니다. 그 결과, 기능 추가는 쉬워졌고, 테스트는 자동화되었으며, 장애가 발생해도 원인 파악이 빨라졌습니다.

2-3.png [실제 코딩예시: 모놀리스 Vs 모듈러]


해결책: '건축가'처럼 지시하고, '조종사'처럼 점검하라

그렇다면 어떻게 처음부터 AI가 체계적인 물류 센터(모듈러 코드)를 짓게 할 수 있을까요? 정답은 '지시'와 '점검'에 있습니다.

1. 건축가의 설계도: 모듈러 프롬프트

AI에게 "집을 지어줘"라고 막연하게 말하는 대신, 방은 3개, 부엌과 거실은 분리하고, 배관과 전기선은 벽 안에 설치하라는 '설계도(프롬프트)'를 먼저 제시해야 합니다.

역할 부여: "너는 엔터프라이즈급 백엔드 아키텍트다."

산출물 명시: 만들고자 하는 폴더 구조(core, models, tests 등)를 명확히 알려줍니다.

제약 조건 설정: "하드코딩 금지, 데이터베이스 제약 조건 포함, 테스트 코드 반드시 포함" 등 지켜야 할 규칙을 구체적으로 지시합니다.


2. 조종사의 체크리스트: 결과물 검수

최고의 설계도를 주었더라도, 비행 전 조종사가 계기판을 점검하듯 우리는 AI의 결과물을 반드시 '체크리스트'를 통해 검수해야 합니다.

폴더와 파일의 책임이 명확히 분리되었는가?

핵심 비즈니스 로직은 services 폴더 안에 잘 위치해 있는가?

예외 처리나 데이터베이스 트랜잭션은 안전하게 구현되었는가?

테스트 코드는 충분한 커버리지를 확보하고 있는가?


결론: 빠른 데모를 원한다면 모노리스도 괜찮다. 하지만…

빠른 프로토타입 제작이 목표라면 AI가 만들어준 모노리스 코드도 충분히 유용합니다. 하지만 장기적인 '상용 서비스'가 목적이라면, 처음부터 운영을 고려한 '모듈러 프롬프트'와 '체크리스트 검수'는 선택이 아닌 필수입니다.

AI 시대에 우리의 역할은 단순히 코드를 짜는 '코더'에서, AI에게 명확한 설계도를 제시하는 '건축가'이자 결과물의 안정성을 최종 책임지는 '조종사'로 진화하고 있습니다. 이 변화를 이해하는 리더만이 '운영 지옥'의 함정을 피해 성공적인 AI 도입을 이끌 수 있습니다.


동영상 링크를 통해서도 확인할 수 있습니다. [링크] https://youtu.be/8xnsMJJyI1U?si=t9STxVwkeGaZU6BK

이전 04화AI 코딩, 정말 박사급일까? 우리 팀 개발자는 그럼?