코딩을 그만두었습니다. 제 앱은 3일 만에 출시되었습니다.
3개월 전, 저는 풀스택 SaaS 대시보드를 구축했습니다. 인증, 데이터베이스, REST API, 그리고 UI가 포함되어 있었습니다.
저는 약 200줄의 코드만 작성했습니다. 나머지는 AI가 했습니다. AI가 코드를 작성하고, 검토하고, 수정까지 했습니다.
앱은 현재 운영 중입니다. 사용자들은 비용을 지불합니다. 저는 새벽 2시에 이해하지도 못하는 버그를 고치느라 밤을 지새우지 않습니다.
이건 자랑이 아닙니다. 경고입니다.
개발자의 역할은 빠르게 변하고 있습니다. 승리하는 개발자는 이러한 변화에 맞서 싸우지 않습니다. 변화를 주도할 것입니다.
AI를 단순한 자동 완성 도구로 생각하는 것을 멈추십시오. 그것은 구시대적인 방식입니다.
AI 네이티브 개발은 새로운 사고 모델입니다. 단순히 더 빨리 쓰기 위해 AI를 사용하는 것이 아닙니다. 여러분이 아키텍처와 판단을 담당하는 동안, AI가 구현을 담당하도록 하는 것입니다.
변화의 양상은 다음과 같습니다:
- 기존 모델: 여러분이 코드를 작성합니다. AI는 더 빠르게 타이핑하도록 도와줍니다.
- 새로운 모델: 여러분이 "무엇을(what)" 그리고 "왜(why)"를 정의합니다. AI가 "어떻게(how)"를 처리합니다. 여러분은 검증하고 방향을 잡습니다.
저는 제 앱을 구축하기 위해 정확히 이 워크플로우를 사용했습니다:
- Next.js나 Prisma와 같은 표준 도구를 사용하여 프로젝트의 스캐폴딩(Scaffold)을 잡습니다.
- 데이터 모델을 자연어(plain English)로 설명합니다.
- AI가 스키마를 생성하게 합니다.
- 상세한 프롬프트를 사용하여 서버 액션(server actions)과 로직을 생성합니다.
저는 함수를 직접 작성하지 않았습니다. 대신 검토하고, 테스트하고, 에러 메시지를 조정했습니다.
그것이 새로운 업무 방식입니다.
AI가 코드를 작성한다면, 여러분의 가치는 메타 스킬(meta-skills)에서 나옵니다. AI는 패턴에는 강하지만, 의사결정에는 약합니다.
AI는 다음을 결정할 수 없습니다:
- 서버 액션이 필요한지, 아니면 API 라우트가 필요한지.
- 상태(state)를 어디에 두어야 하는지.
- 모노레포(monorepo)를 사용해야 하는지 여부.
이러한 결정에는 컨텍스트(context)가 필요합니다. AI는 컨텍스트가 부족하지만, 여러분은 가지고 있습니다.
이제 주니어 개발자와 시니어 개발자의 차이는 프롬프트의 정밀도에 있습니다.
- 약한 프롬프트: "Rate limiter를 작성해줘."
- 강력한 프롬프트: "Next.js API 라우트를 위한 Redis 기반의 rate limiter를 작성해줘. IP당 분당 요청 수를 10개로 제한해줘. 초과 시 429 에러를 반환하고, 관리자는 제외해줘. 이벤트는 Prisma에 로그로 남겨줘."
두 번째 프롬프트는 즉시 프로덕션 수준의 코드를 가져다줍니다.
또한 '조용한 실패(silent failures)'를 주의해야 합니다. AI 코드는 겉보기에는 멀쩡해 보이지만 미묘한 버그를 포함하고 있는 경우가 많습니다. AI의 결과물을 주니어 개발자가 보낸 풀 리퀘스트(pull request)처럼 취급하십시오. 회의적인 시각으로 검토해야 합니다.
코드를 적게 쓰는 것에 최적화하지 마십시오. 코드 주변의 기술(skills around the code)에 최적화하십시오.
개발자 A는 모든 것을 직접 작성하며 느린 속도에 머물러 있습니다. 개발자 B는 세부 사항에 AI를 활용하고 시스템 설계에 시간을 투자합니다.
Developer B가 새로운 표준입니다.
이번 주에는 이렇게 해보세요:
- 코드를 작성하기 전에 기능에 대한 전체 명세(spec)를 작성하세요.
- 그 명세를 프롬프트로 사용하세요.
- 시니어 엔지니어가 주니어를 리뷰하듯 결과물을 검토하세요.
목표는 개발자가 되기를 그만두는 것이 아닙니다. 더 나은 개발자가 되는 것입니다.
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi