DaleSchool

코드 작성의 재발명

입문20분

학습 목표

  • 자연어로 새로운 코드를 생성할 수 있다
  • 기존 코드의 리팩토링을 요청할 수 있다
  • 좋은 프롬프트와 나쁜 프롬프트의 차이를 이해한다

동작하는 코드

빈 디렉토리에서 Claude Code를 시작하고 이렇게 요청해보세요:

> Express.js로 간단한 REST API 서버를 만들어줘.
> GET /api/health 엔드포인트가 { status: "ok" }를 반환하면 돼.

Claude가 package.json, server.js 등 여러 파일을 생성합니다. 이번에는 기존 코드를 리팩토링해봅시다:

> server.js에서 라우트를 별도의 routes/ 디렉토리로 분리해줘

Claude가 파일 구조를 재배치하고, import 경로도 알아서 수정합니다.

직접 수정하기

리팩토링 요청의 품질을 비교해보세요:

나쁜 프롬프트:

> 코드 좀 정리해줘

좋은 프롬프트:

> server.js의 에러 처리 미들웨어를 Express의 모범 사례에 맞게 리팩토링해줘.
> 구체적으로: 1) 커스텀 에러 클래스 분리, 2) 에러 핸들러 미들웨어 분리, 3) async/await 에러 래핑

두 결과의 차이를 비교해보세요. Claude에게 구체적으로 요청할수록 결과가 좋습니다.

"왜?" — 프롬프트 작성의 원칙

Claude Code에게 코드를 요청할 때는 동료 개발자에게 요청하듯이 하세요.

좋은 프롬프트의 공식

  1. 무엇을 — 어떤 작업인지
  2. 어디에 — 어떤 파일/위치인지
  3. 어떻게 — 구체적인 요구사항이나 제약 조건
> src/utils/date.ts에 날짜 포맷 유틸 함수를 추가해줘.
> ISO 8601 문자열을 받아서 "2025년 3월 15일" 형태로 변환.
> dayjs 같은 라이브러리 없이 Intl.DateTimeFormat을 사용해줘.

코드 생성 vs 리팩토링

| 작업 | 프롬프트 예시 | | ------------ | -------------------------------------- | | 새 코드 생성 | "~를 만들어줘" | | 리팩토링 | "~를 ~방식으로 바꿔줘" | | 타입 추가 | "이 함수에 TypeScript 타입을 추가해줘" | | 패턴 적용 | "이 코드를 Strategy 패턴으로 바꿔줘" |

심화 학습

Claude가 만든 코드를 무조건 수락해도 될까요?

아닙니다. Claude가 생성한 코드는 반드시 리뷰해야 합니다. 특히:

  • 보안 관련 코드 (인증, 입력 검증)
  • 데이터베이스 쿼리 (SQL 인젝션 가능성)
  • 외부 API 호출 (키 노출, 에러 처리)

diff를 꼼꼼히 읽는 습관이 중요합니다. 이 자체가 코드 리뷰 실력을 키워줍니다.

  1. 빈 디렉토리에서 "TODO 앱의 백엔드 API를 만들어줘"라고 요청해보세요.
  2. 생성된 코드를 리뷰하고, 개선할 점을 찾아 리팩토링을 요청해보세요.
  3. 같은 요청을 두 가지 다른 수준의 구체성으로 해보세요. 결과 차이를 비교해보세요.

Q1. 다음 중 가장 좋은 프롬프트는?

  • A) "코드 짜줘"
  • B) "좋은 코드 짜줘"
  • C) "src/api/users.ts에 사용자 목록 조회 API를 추가해줘. Prisma로 DB 조회하고 페이지네이션 지원해야 해."
  • D) "최고의 코드를 작성해줘, 아주 좋은 코드로"