레이블이 개발생산성인 게시물을 표시합니다. 모든 게시물 표시
레이블이 개발생산성인 게시물을 표시합니다. 모든 게시물 표시

2025년 11월 22일 토요일

AI가 코드를 못 짜는 진짜 이유

"ChatGPT한테 로그인 기능 만들어달라고 했는데, 이상한 코드를 줬어요."

최근 이런 불평을 자주 듣습니다. GitHub Copilot, ChatGPT, Claude... AI 도구들이 쏟아지고 있지만, 정작 프로덕션에 쓸 만한 코드는 나오지 않는다는 거죠.

AI가 문제일까요? 아닙니다.

문제는 우리가 AI와 대화하는 방식에 있습니다.

AI에게 부탁한 것 vs 실제로 받은 것

실제 사례를 보겠습니다.

개발자의 요청

"로그인 기능 만들어줘"

AI의 결과

def login(username, password):
    if username == "admin" and password == "password":
        return {"status": "success"}
    return {"status": "failed"}

개발자의 반응

"이게 뭐야? AI 별로네..."

잠깐, 여기서 누가 잘못한 걸까요?

신입 개발자 vs AI: 똑같은 실수

신입 개발자에게 "로그인 기능 만들어"라고만 지시하면 어떻게 될까요?

아마 이런 질문들이 돌아올 겁니다:

  • "어떤 프레임워크 쓰나요?"
  • "DB는 뭐 쓰나요?"
  • "세션? JWT?"
  • "소셜 로그인도 되나요?"
  • "비밀번호 규칙이 있나요?"

그런데 AI는 질문을 하지 않습니다. 그냥 가장 일반적인 답을 줄 뿐입니다.

Garbage In, Garbage Out

컴퓨터 공학의 오래된 격언이 있습니다:
"쓰레기를 넣으면 쓰레기가 나온다"

AI 시대에는 이렇게 바뀌었습니다:
"모호한 요청을 넣으면 모호한 코드가 나온다"

실제 테스트 결과를 보겠습니다:

테스트 1: 모호한 요청

요청: "사용자 관리 기능 만들어줘"
결과: 기본 CRUD 스켈레톤 (30줄)
실용성: 10%

테스트 2: 구체적인 요청

요청: "Django REST Framework로 사용자 관리 API 만들어줘.
- 이메일 인증
- JWT 토큰
- 권한 그룹 (admin, user)
- 프로필 이미지 업로드
- 소프트 삭제
- 페이지네이션"

결과: 완성도 높은 코드 (500줄)
실용성: 85%

차이가 보이시나요?

AI와 대화하는 기술

AI는 컨텍스트의 노예입니다. 우리가 제공한 정보만큼만 이해하고 구현합니다.

좋은 프롬프트의 구조

1. 배경 설명
   - 프로젝트 종류
   - 기술 스택
   - 제약 사항

2. 구체적 요구사항
   - 기능 목록
   - 비기능 요구사항
   - 엣지 케이스

3. 예시나 참고 자료
   - 비슷한 코드
   - API 문서 링크
   - 원하는 출력 형식

실제 예시: 결제 시스템

❌ 나쁜 요청

"결제 기능 만들어줘"

✅ 좋은 요청

Node.js Express 서버에서 Stripe를 사용한 결제 시스템을 구현해줘.

요구사항:
1. 카드 결제 (일회성)
2. 구독 결제 (월간/연간)
3. 웹훅으로 결제 상태 업데이트
4. 실패 시 재시도 로직 (3회)
5. 결제 내역 조회 API
6. 환불 처리

기술 스택:
- Node.js 18+
- Express 4
- TypeScript
- Stripe API v2023
- PostgreSQL

에러 처리:
- 카드 거절
- 잔액 부족
- 네트워크 타임아웃
- 중복 결제 방지

보안:
- API 키 환경변수
- 웹훅 서명 검증
- Rate limiting
- SQL Injection 방어

이렇게 요청하면 실제로 사용 가능한 코드가 나옵니다.

AI가 잘하는 것 vs 못하는 것

AI가 잘하는 것 ✅

  1. 보일러플레이트 코드

    • CRUD 기본 구조
    • 설정 파일
    • 테스트 템플릿
  2. 알고리즘 구현

    • 정렬, 검색
    • 데이터 변환
    • 수학적 계산
  3. 문서화

    • 주석 추가
    • README 작성
    • API 문서
  4. 리팩토링

    • 코드 정리
    • 네이밍 개선
    • 중복 제거

AI가 못하는 것 ❌

  1. 비즈니스 로직 이해

    • 도메인 특화 규칙
    • 회사별 정책
    • 암묵적 요구사항
  2. 아키텍처 결정

    • 확장성 고려
    • 성능 최적화
    • 기술 부채 관리
  3. 창의적 문제 해결

    • 새로운 알고리즘
    • 혁신적 접근
    • 특수한 최적화

실전: AI와 페어 프로그래밍하기

AI를 주니어 개발자로 생각하고 협업하세요.

Step 1: 큰 그림 설명

"우리는 이커머스 플랫폼을 만들고 있어.
주요 기능은 상품 관리, 주문, 결제야.
기술 스택은 Next.js + NestJS + PostgreSQL이고."

Step 2: 구체적 태스크 분할

"먼저 상품 관리 API를 만들 거야.
1. 상품 CRUD
2. 카테고리 관리
3. 재고 추적
4. 이미지 업로드"

Step 3: 하나씩 구현

"상품 생성 API부터 시작하자.
POST /api/products
요청 본문: {name, price, category_id, stock}
검증: 가격 > 0, 재고 >= 0
응답: 201 Created with product object"

Step 4: 점진적 개선

"좋아, 이제 여기에 트랜잭션 추가해줘"
"에러 핸들링 개선해줘"
"단위 테스트 작성해줘"

WBS와 AI의 시너지

여기서 **WBS(Work Breakdown Structure)**가 빛을 발합니다.

WBS로 작업을 잘게 나누면, 각 작업이 AI가 이해하기 쉬운 크기가 됩니다.

WBS 없이 AI 사용

"쇼핑몰 만들어줘"
→ AI: "???" (쓸모없는 코드)

WBS로 분해 후 AI 사용

1. 사용자 인증
   1.1 회원가입 API
      1.1.1 이메일 중복 체크
      1.1.2 비밀번호 암호화
      1.1.3 인증 메일 발송
   1.2 로그인 API
      1.2.1 자격증명 검증
      1.2.2 JWT 토큰 발급
      1.2.3 리프레시 토큰 관리

각 최하위 태스크(1.1.1, 1.1.2...)는 AI가 정확히 구현할 수 있는 크기입니다.

AI 프롬프트 템플릿

제가 실제로 사용하는 템플릿입니다:

## 컨텍스트
- 프로젝트: [프로젝트명]
- 현재 작업: [WBS 번호 및 설명]
- 기술 스택: [언어, 프레임워크, DB]

## 요구사항
### 기능 요구사항
- [ ] 요구사항 1
- [ ] 요구사항 2

### 비기능 요구사항
- 성능: [응답시간, 처리량]
- 보안: [인증, 권한, 암호화]
- 확장성: [동시 사용자, 데이터 증가]

## 제약사항
- [기존 코드와의 호환성]
- [외부 API 제한]
- [라이브러리 버전]

## 예상 입출력
입력: [예시 데이터]
출력: [예상 결과]

## 참고 코드
```[언어]
// 기존 코드나 비슷한 예시
``` {data-source-line="277"}

이 템플릿을 사용하면 AI의 정확도가 3배는 올라갑니다.

AI 도구별 특성

ChatGPT

  • 장점: 설명 잘함, 다양한 언어
  • 단점: 최신 정보 부족
  • 용도: 개념 설명, 알고리즘

GitHub Copilot

  • 장점: IDE 통합, 컨텍스트 이해
  • 단점: 짧은 코드만
  • 용도: 자동완성, 보일러플레이트

Claude

  • 장점: 긴 코드, 정확도 높음
  • 단점: 보수적
  • 용도: 복잡한 로직, 리팩토링

Cursor

  • 장점: 코드베이스 전체 이해
  • 단점: 유료
  • 용도: 대규모 리팩토링

마무리: AI는 도구일 뿐

AI가 개발자를 대체할까요? 절대 아닙니다.

AI는 힘을 증폭시키는 도구입니다. 망치가 목수를 대체하지 못하듯, AI도 개발자를 대체하지 못합니다.

다만, AI를 잘 쓰는 개발자가 못 쓰는 개발자보다 10배는 생산적일 겁니다.

핵심은 명확한 요구사항입니다.

WBS로 작업을 잘게 나누고, 각 작업을 명확히 정의하면, AI는 놀라운 생산성 도구가 됩니다.

"AI가 코드를 못 짠다"고 불평하기 전에, 우리가 요구사항을 제대로 전달했는지 돌아봐야 합니다.

Garbage In, Garbage Out.

명확한 입력, 명확한 출력. 이게 AI 시대의 개발 방법론입니다.


AI와 함께 효율적인 프로젝트 관리가 필요하신가요? Plexo를 확인해보세요.