저는 한국 서울에서 1인 법인 개발 스튜디오(주식회사 CPC AI)를 운영하고 있습니다. AI 에이전트에게 상당량의 코드를 작성하게 하여 웹/앱 MVP를 3~5일 만에 출시하는 작업을 하고 있습니다.
이 글은 'AI로 빠르게 작성하는 방법'에 대한 이야기가 아니라, AI가 작성해도 망가지지 않도록 미리 구조화해 두는 것에 대한 이야기입니다.
결론부터 말하자면, 필요한 것은 단 네 가지입니다. 엄격한 TypeScript 설정, 탈출구를 막아주는 linting, E2E 테스트 1개, 그리고 이들을 필수적으로 요구하는 CI(지속적 통합)입니다. 이 네 가지를 첫날에 갖추느냐 마느냐가, 3일 만에 만든 결과물이 '3주 동안 고치기 어려운 것'이 될지를 결정합니다.
AI는 타입 에러를 any나 as로 없애려고 합니다. 나중에 엄격하게 검사하면 수정 비용이 급증하므로, 처음부터 엄격해야 합니다. 효과적인 것은 단순히 strict만은 아닙니다.
noUncheckedIndexedAccess를 활성화하면 arr[0]가 T | undefined가 됩니다. AI가 작성한 '값이 존재한다고 가정'하는 코드는 컴파일 단계에서 실패하므로, null 체크를 임의로 생략할 수 없게 만듭니다.
exactOptionalPropertyTypes는 'undefined를 전달하는 것'과 '키 자체가 없는 것'을 구분하게 합니다. API 요청 구성 시 흔히 발생하는 버그를 타입으로 막을 수 있습니다.
noUnusedLocals와 noUnusedParameters는 AI가 지우는 것을 잊은 변수를 그대로 남기지 않기 위한 최소한의 기준입니다.
AI가 타입을 느슨하게 하는 방향으로 도망가지 못하도록, linting을 통해 금지합니다. 핵심은 세 가지입니다.
@typescript-eslint/no-explicit-any는 any를 금지하고, @typescript-eslint/no-non-null-assertion는 !를 금지합니다. 그리고 @typescript-eslint/consistent-type-assertions에 assertionStyle: "never"를 지정하면 as가 사용되지 못하게 합니다.
as를 사용할 수 없게 되면, AI는 타입을 수정하거나, 타입 가드(Type Guard)를 작성하거나, 설계를 변경하는 세 가지 중 하나를 선택할 수밖에 없습니다. 이것이 효과적입니다. 테스트 파일만은 any를 허용합니다 (모의 객체(Mock)에서 막히면 본론 진행이 어려워지기 때문입니다).
화면을 만들기 시작하기 전에, 로그인 → 주요 작업 수행 → 결과 표시까지의 단일 흐름을 만듭니다. Playwright 기준으로 약 20줄 정도입니다.
셀렉터(Selector)는 반드시 role과 label로 작성합니다. getByRole("button", { name: "저장" })처럼 작성해 두면, AI가 레이아웃을 변경해도 테스트는 살아남습니다. 클래스 이름이나 DOM 구조에 의존하게 되면, '테스트가 통하지 않으니 테스트를 고치자'라는 본말전도(本末転倒)가 시작됩니다.
CI에서는 npm ci → tsc --noEmit → lint → playwright test 순서로 흐르게 하고, 모두 필수적으로 만듭니다.
npm ci가 은근히 효과적입니다. AI가 의존성을 임의로 추가할 경우, 락 파일(lock file)과의 불일치로 CI가 실패하므로, '조용한 의존성 추가'를 막을 수 있습니다.
- 의존성 추가: 에러를 없애기 위해 라이브러리를 추가하는 행위 → 락 파일의 차이점은 리뷰 필수
- 통과만 하는 테스트:
expect(true).toBe(true)와 같은 테스트가 섞이는 경우 → 커버리지 대신 주요 흐름의 E2E로 판단
- 타입의 구멍:
any / as / !로 에러를 없애는 행위 → linting으로 금지
- 예외 처리 무시: 빈
catch 블록으로 묻어버리는 경우 → 빈 catch를 금지하고 로그를 필수화
AI는 '작성하는 사람'이지 '책임을 지는 사람'이 아닙니다. 망가지면 반드시 실패하도록 시스템을 미리 구축해 두면, 단기 개발에서도 품질은 보장할 수 있습니다.
이 구성으로 웹 앱/모바일 앱의 MVP를 3~5일 만에 출시하고 있습니다. 문의사항은 여기로 연락 주십시오.
스튜디오 (일본어): https://cpcai-studio.netlify.app/ja/
문의: [email protected]