inflearn logo
강의

Course

Instructor

Developing the Ability to Control AI: Mastering Harness Engineering from Scratch (Claude Code)

(Practice) Choose a project and apply CLAUDE.md to it

실습 파일 문의

Resolved

47

SpeedGogo

16 asked

1

진행 방법:

  1. exercises/01-think-first.md 에 있는 시나리오 3개를 읽는다

  2. CLAUDE.md 없이 각 요청을 Claude에게 넣어본다 (결과 메모)

  3. starter-claude.md원칙 1 섹션을 활성화한다

  4. 같은 요청을 다시 넣고 차이를 비교한다

 

라고 쓰여 있는데 01-think-first.md는 어디 있나요?

 

debugger ai-agent claude 바이브코딩

Answer 3

0

SpeedGogo

# CLAUDE.md — 실습 시작 템플릿

> 이 파일을 프로젝트 루트에 `CLAUDE.md`로 복사하여 사용하세요.
> 각 실습 단계마다 해당 섹션의 주석을 제거하여 원칙을 활성화합니다.

---

## 원칙 1: 코딩하기 전에 먼저 생각하라

<!--
실습 1에서 아래 주석을 제거하세요 (<!-- ... --> 구문 삭제)
-->

코드를 작성하기 전에 반드시 추론을 먼저 드러내야 한다.

- 요청을 받으면 "이 요청은 ~라고 이해했습니다"라고 먼저 밝힌다
- 여러 해석이 가능한 경우, 조용히 하나를 선택하지 말고 옵션을 제시하고 확인받는다
- 더 단순한 접근이 있다면 구현 전에 먼저 제안한다
- 불분명한 부분이 있으면 잘못된 방향으로 달리는 대신 그 자리에서 질문한다

---

## 원칙 2: 단순함이 최우선이다

<!--
실습 2에서 아래 주석을 제거하세요
-->

문제를 해결하는 데 필요한 최소한의 코드만 작성한다.

다음은 명시적 요청 없이 절대 추가하지 않는다:
- 요청 범위 밖의 추가 기능
- 한 번만 쓰이는 코드에 인터페이스·추상 클래스·베이스 클래스
- "나중에 필요할 수도 있으니까"라는 이유로 추가되는 유연성·설정값
- 실제로 발생하지 않는 시나리오의 방어적 에러 처리

코드를 더 적게 쓸 수 있다면, 더 적게 써라. 경험 많은 개발자가 "이거 너무 복잡한데?"라고 할 것 같다면 단순화하라.

---

## 원칙 3: 꼭 필요한 것만 건드려라

<!--
실습 3에서 아래 주석을 제거하세요
-->

변경된 모든 줄은 사용자의 요청과 직접 연결되어야 한다.

**기존 코드 편집 시:**
- 요청한 부분만 정밀하게 수정한다
- 기존 코드 스타일을 그대로 유지한다 (내 취향과 달라도)
- 인접 코드·주석·포맷은 건드리지 않는다
- 멀쩡히 동작하는 코드는 리팩토링하지 않는다
- 관련 없는 레거시 코드를 발견하면 삭제하지 말고 언급만 한다

**고아 코드 처리:**
- 내 변경으로 생긴 불필요한 import는 내가 제거한다
- 내 수정 때문에 더 이상 쓰이지 않게 된 함수는 내가 삭제한다
- 원래부터 있던 미사용 코드는 요청 없이 삭제하지 않는다

---

## 원칙 4: 성공 기준을 정의하고 그때까지 반복하라

<!--
실습 4에서 아래 주석을 제거하세요
-->

"어떻게"가 아니라 "무엇이 달성되어야 하는가"를 제시한다.

예시:
- ❌ "버그 수정해줘" → ✅ "문제를 재현하는 테스트를 작성하고, 그 테스트가 통과하도록 수정해줘"
- ❌ "유효성 검사 추가해줘" → ✅ "잘못된 입력에 대한 테스트를 작성하고, 그 테스트가 통과하도록 만들어줘"
- ❌ "리팩토링해줘" → ✅ "리팩토링 전후에 기존 테스트가 모두 통과해야 해"

멀티스텝 작업은 단계마다 완료 기준을 명시한다:
1. [단계 설명] → 검증: [완료 기준]
2. [단계 설명] → 검증: [완료 기준]

---

## 프로젝트 특화 설정

<!--
종합 실습에서 여러분 프로젝트에 맞게 채워보세요
-->

- **언어/프레임워크:** (예: Python 3.11 + FastAPI)
- **테스트 도구:** (예: pytest)
- **코드 스타일:** (예: Black 포맷터, 타입 힌트 필수)
- **특별 규칙:** (예: DB 쿼리는 반드시 트랜잭션 내에서 실행)

실습을 따라할수가 없습니다. 예를 들자면

## 원칙 3: 꼭 필요한 것만 건드려라

<!--
실습 3에서 아래 주석을 제거하세요
-->

변경된 모든 줄은 사용자의 요청과 직접 연결되어야 한다.

**기존 코드 편집 시:**
- 요청한 부분만 정밀하게 수정한다
- 기존 코드 스타일을 그대로 유지한다 (내 취향과 달라도)
- 인접 코드·주석·포맷은 건드리지 않는다
- 멀쩡히 동작하는 코드는 리팩토링하지 않는다
- 관련 없는 레거시 코드를 발견하면 삭제하지 말고 언급만 한다

**고아 코드 처리:**
- 내 변경으로 생긴 불필요한 import는 내가 제거한다
- 내 수정 때문에 더 이상 쓰이지 않게 된 함수는 내가 삭제한다
- 원래부터 있던 미사용 코드는 요청 없이 삭제하지 않는다

---

에서 아래 내용을 제거해본들 무슨 의미가 있는것일까요?

 

<!--
실습 3에서 아래 주석을 제거하세요
-->

 

그렇다고 실습3에 가보면 주석은 없습니다.

 

# 실습 3: 최소 개입 (원칙 3)

> **목표:** 요청 범위 밖에서 변경된 코드가 없는지 확인하고, "변경된 줄 테스트"를 수행한다.

---

## 사전 준비

1. `sample-project/` 디렉토리에서 git을 초기화한다:
   ```bash
   git init
   git add .
   git commit -m "initial"
   ```
2. 이제 모든 변경사항을 `git diff`로 추적할 수 있다.

---

## 시나리오 A — 범위 초과 수정 관찰

**원칙 3 없이** Claude에게 요청하세요:

```
app.py에서 get_user 함수의 반환값을 딕셔너리 대신 User 객체로 바꿔줘
```

요청 후 즉시 diff를 확인하세요:

```bash
git diff
```

**"변경된 줄 테스트" 수행:**

diff에서 변경된 줄을 하나씩 보면서 각 줄에 대해 묻는다:

> "이 줄의 변경이 내 요청(get_user 반환값 변경)과 직접 연결되는가?"

```
연결되는 변경:
✅ _______________________________________________
✅ _______________________________________________

연결되지 않는 변경 (범위 초과):
❌ _______________________________________________
❌ _______________________________________________
❌ _______________________________________________
```

연결되지 않는 변경의 종류를 분류하세요:

```
[ ] 포맷/들여쓰기 변경
[ ] 주석 추가/수정
[ ] 인접 함수 리팩토링
[ ] import 추가 (요청과 무관한)
[ ] 에러 처리 추가
[ ] 변수명 변경 (스타일 차이)
[ ] 기타: _______________________________________________
```

---

## 시나리오 B — 고아 코드 처리 관찰

**원칙 3 없이** Claude에게 요청하세요:

```
app.py에서 format_response 함수를 제거해줘.
이 함수는 더 이상 사용되지 않아.
```

**관찰 포인트:**
- Claude가 `format_response`만 삭제했는가?
- 아니면 다른 "오래된" 코드도 같이 삭제했는가?
- `format_response`를 호출하던 코드는 어떻게 처리했는가?

```bash
git diff
```

```
기대한 변경:
1. format_response 함수 삭제
2. format_response를 호출하던 코드 처리

실제 변경된 항목 전체 목록:
1. _______________________________________________
2. _______________________________________________
3. _______________________________________________
4. _______________________________________________
```

---

## 시나리오 C — 원칙 3 적용하기

1. `starter-claude.md`에서 **원칙 3** 섹션의 주석을 제거한다
2. CLAUDE.md에 저장한다
3. git을 리셋한다:
   ```bash
   git checkout .
   ```
4. 시나리오 A와 B를 동일하게 다시 요청한다

**비교:**

| 항목 | 원칙 3 없을 때 | 원칙 3 있을 때 |
|-----|-------------|-------------|
| 총 변경 줄 수 | | |
| 요청과 무관한 변경 줄 수 | | |
| 범위 초과 수정 종류 | | |

---

## 시나리오 D — 레거시 발견 시 행동 비교

`sample-project/utils.py`에는 사용되지 않는 `legacy_transform` 함수가 있다.

**원칙 3 있는 상태에서 요청하세요:**

```
utils.py에서 transform_data 함수에 타입 힌트를 추가해줘
```

**관찰:**

```
Claude가 legacy_transform에 대해:
[ ] 요청 없이 삭제했다 (원칙 위반)
[ ] 무시하고 요청한 것만 했다
[ ] 언급은 했지만 삭제하지는 않았다 (올바른 행동)
```

---

## 심화: 드라이브바이 리팩토링 패턴 식별

여러분의 경험에서 AI가 가장 자주 "이왕이면" 하며 건드리는 것들은 무엇인가요?

```
자주 범위를 초과하는 패턴:
1. _______________________________________________
2. _______________________________________________

이를 방지하기 위해 원칙 3에 추가할 문장:
_______________________________________________
```

---

## 체크리스트

- [ ] git 초기화 및 최초 커밋 완료
- [ ] 원칙 3 없이 범위 초과 수정 관찰 완료
- [ ] 변경된 줄 테스트 수행 완료
- [ ] 원칙 3 적용 후 비교 완료
- [ ] 레거시 코드 처리 시나리오 관찰 완료

 

어떻게 하라는것인지 의미 파악이 안됩니다.

0

codebridge

SpeedGogo님, 말씀해주셔서 감사합니다. :)

전체적으로 검토를 해보니.. 현재 실습 파일 구조가 불필요하게 비대한 것 같다고 생각합니다.

 

의도한 것은 실습 시작 템플릿의 각 원칙을 수강생 분들이 각자 환경의 CLAUDE.md에 복사한 후에, 각 실습#N 파일의 가이드를 따라 프롬프트 요청을 하나씩 해보시는 것이었는데요.

 

이미 아시다시피 CLAUDE.md 실습은 사실 이 정도로 복잡하게 가져가지 않아도 될듯 합니다. 각자의 상황과 니즈에 맞게 md 파일 작성하는 것이 중요하기 때문입니다.

난이도를 낮춰서 CLAUDE.md 에 복사하여 프롬프트 사용하는 정도로 1스텝만 수행할 수 있도록 수정해두겠습니다.

 

추가로, 이 게시판은 수강하지 않는 분들도 모두 볼 수 있는 공간입니다. 실습 파일의 내용은 삭제 부탁드립니다.

0

codebridge

안녕하세요, 수강해주셔서 감사합니다.

CLAUDE.md 실습 파일에 exercise 파일들을 업데이트하였습니다.

알려주셔서 감사합니다.

1

SpeedGogo

빠르게 답변해주셔서 감사합니다. 피드백이 좋네요. 좀더 보완하셔서 훌륭한 강의가 되기를 바라며 많은 사람들이 들었으면 좋겠네요.

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. SpeedGogo님,

강의 실습 파일에 대한 위치를 찾고 계시는군요. 일반적으로 강의에서 사용될 파일들은 “자료” 또는 “노트” 탭에서 제공될 수 있습니다. 해당 섹션에 포함되어 있지 않다면 강사님이 별도의 링크를 통해 제공하실 수 있으므로, 강의 페이지 하단의 Q&A 게시판에서 관련 정보를 확인하거나, 지식공유자님께 직접 문의해 보실 것을 추천드립니다.

또한, 강의를 진행하시면서 비슷한 문제를 겪었던 수강생들의 Q&A를 참고하시면 도움이 될 수 있습니다. 아래는 강의자료 제공 위치와 관련된 질문 사례입니다:

해당 링크에서는 강의자료가 어디에서 제공되는지에 대한 논의가 이루어져 있습니다. 이러한 정보가 여러분의 학습에 도움이 되길 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

강의 자료가 어디에 있나요?

0

3

1

강의 내용과 학습자료 차이 문의

0

6

1

파워셀에서 claude 코드의 버전확인이 않됩니다.

0

11

2

윈도우에서 설정화면이 다릅니다.클로드코드 환경변수 설정

0

12

2

금융관련 자동화 시스템 만들어 주실 수 있의실까요!

0

11

1

깃허브 Publish 질문

0

14

2

클로드 코드 프로 사용자인데..

0

14

2

엥?? 화면이 안나옵니다.

0

10

1

빈 화면

0

12

1

강의는 순서대로 들어야 할까요??

0

14

1

다운로드 연결이 되지 않을 때는 어떻게 해야할까요?

0

10

1

supabase 사용 관련.

0

17

2

섹션1의 자료는 따로 없나요?

0

18

2

Visual Studio Code 대신 Pycharm 써도 되나요?

0

16

2

front matter 관련 질문

0

18

1

오픈클로나 헤르메스 에이전트용으로 사용

0

15

2

pip - version

0

17

2

"[수정 예정] SDD 워크플로우 러너 - 현재 시점에 맞도록 추가 촬영 진행 중입니다." 이거 삭제해주세요.

0

11

1

수업자료 및 단톡방 접속관련

0

16

1

강의 자료 받고 싶어요 가능할까요

0

11

0

실습 동영상 의견 드립니다.

0

39

2

강의 교안 좀 제공해 주세요 ㅠㅠ

1

75

3

강의자료

0

76

2

화면 글자가 너무 작아 안보입니다. ㅠㅠ

0

42

1