묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨나만의 Claude Code 하네스 (SPEC·TDD·CI로 짓는 AI 개발 워크플로우)
강사님 질문있습니다.
나만의 클로드 코드 하네스 강의 커리큘럼 7강 질문입니다. 강의 중에서는 수평 슬라이드가 아니라 수직 슬라이드로 처음부터 이슈를 분해하라고 알려주셨습니다. 미션에서는 수평 슬라이싱으로 먼저 나누고 수직으로 다시 잘라보라고 하셨는데 제가 생각하는 수평 슬라이딩으로 나누고 수직으로 나누라는 말씀이수평 슬라이딩으로 먼저 나눠야 단위테스트 기준으로 나눌 수 있고 거기서 수직으로 나눠야 단위 테스트 위에 수직 슬라이싱이 더 안정적으로 테스트 할 수 있어서일까요?
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
깃허브 이슈 자동화 yaml파일
깃허브 이슈 자동화 yaml파일 공유해주신다고 수업에서 나왔는데 파일을 못찾겠어요
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
auto memory
claude.md 파일에서 auto memory를 주의해야하는 자세한 이유가 궁금합니다!
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
8강 디버깅 하네스는 verification 하네스와 비슷하게 느껴지는데 결정적인 차이가있을까요?
안녕하세요 8강의 디버깅 하네스는 개념적으로 verification하네스의 일부가 아닐까 생각되는데 결정적인 차이가 있을까요?
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
3강 context harness에서 제시하주신 개념들에 대해 소개된 공식문서나 자료가 있을까요?
안녕하세요 개념에 대해 조금 더 조사해보고 싶어서 질문 남깁니다!context harness 개념 소개 강의에서 띄워주신 자료에서 소개해주신 개념들에 대해 소개된 엔트로픽 공식문서나 웹에 공개된 자료가 있다면 소개 부탁드릴 수 있을까요?팀의 하네스 구축하기 위한 근거자료로 삼고 싶어서요 꼭 부탁드립니다!
-
미해결Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
섹션5 강의자료 다운로드
안녕하세요 섹션5 32 강에서, 강의 자료 다운로드 받을 수 있는 탭이나, 링크가 보이지 않습니다.모바일에서는 수업자료가 보이는데, 데스크탑에서는 보이지 않습니다. 혹시 별도로 업로드 해 주실 수 있을까요?
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
Claude skill 과 agent, plugin 관련 질문 드려요.
강의를 정말 잘 듣고 있습니다. 먼저 좋은 강의를 열어주셔서 감사합니다. 인프런의 팬으로 좋은 강의를 만날 때마다 기분이 좋습니다!여러 웹 사이트에서 'skillsmap' 등의 마켓 플레이스에서 전문화된 스킬과 에이전트, 플러그인 등이 존재하는데, 하네시 엔지니어링시 이런 요소들을 어떻게 활용해야 할지, 아니면 활용하지 말아야 할지 고민이 됩니다. 편한 시간에 답변 달아주시면 너무 감사하겠습니다!
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
강의 커리큘럼 추가 문의
최근에 claude fable 5 모델 출시로 인해서 기존에 사람이 지시하는 방식이 아니라 loop 엔지니어링 방식으로 구현을 해야한다는 소식을 듣게 되었습니다. 혹시 loop 엔지니어링에 관해서도 강의 추가 계획이 있으실까요??
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
memory 질문
claude.md에 구현전에 고려해야할 사항을 적어두었습니다.ex)1. 테스트 환경 1-1. DB 접속 방법 1-2. 로그 확인 방법라이브 서비스 환경2-1. 로컬에서 DB 접속 불가 이런식으로 각 환경에 맞게 디버깅하는 방식을 적어두었는데 처음에는 claude.md의 내용을 기억하고 테스트 환경의 DB에 접속하는 등 잘 이행을 하다가 context가 길어지면 라이브 서비스의 DB를 로컬에서 접근 시도하려는등 memory에 문제가 있는것 같습니다. 이런 경우는 어떻게 해결해야할까요?
-
해결됨나만의 Claude Code 하네스 (SPEC·TDD·CI로 짓는 AI 개발 워크플로우)
tdd-red 스킬에 허용 에러 범위에 대한 질문
수업노트로 요청한 tdd-red 스킬의 초안은 다음과 같습니다.아래 내용으로 진행하면 import error, 파일 없음 에러도 정상적인 red 로 인식하고 다음 단계로 진행됩니다.--- name: tdd-red description: 승인된 테스트 시나리오를 실패하는 테스트 코드로 작성한다. TDD Red 단계 시작 시 사용한다. argument-hint: <feature> <이슈 번호> allowed-tools: Read Write Bash --- `$ARGUMENTS`에서 feature 이름과 이슈 번호를 파싱해 해당 이슈의 승인된 시나리오를 실패하는 테스트 코드로 작성한다. ## 시작 전 ### 인자 파싱 `$ARGUMENTS`를 공백으로 분리해 첫 번째 토큰을 `{feature}`, 두 번째 토큰을 `{issue}` 로 사용한다. | 입력 예시 | feature | issue | | ------------------ | -------- | ----- | | `/tdd-red tag 2` | `tag` | `2` | | `/tdd-red search 1`| `search` | `1` | 누락된 값이 있으면 실행 전에 사용자에게 질문한다. - `{feature}`가 없으면: "어떤 기능의 이슈인가요? (예: tag, search, ...)" - `{issue}`가 없으면: "이슈 번호를 알려주세요." 두 값이 확정된 뒤 `docs/features/{feature}/issue-{issue}.md` 를 읽어 시그니처와 테스트 시나리오 목록을 파악한다. - 시그니처 섹션: 테스트 대상 파일 경로 및 함수·컴포넌트명 확인 - 테스트 시나리오 섹션: 작성할 시나리오 목록 전체 수집 파일이 없으면 즉시 멈추고 사용자에게 알린다 (`/test-scenarios {feature} {issue}` 를 먼저 실행해야 한다는 안내 포함). --- ## 단계 1: 테스트 파일 준비 시그니처에서 테스트 대상 파일 경로를 추출하고 테스트 파일 경로를 결정한다. ### 파일 위치 규칙 | 구현 파일 | 테스트 파일 | | ---------------------------------- | ---------------------------------------- | | `src/api/tags.ts` | `src/api/tags.test.ts` | | `src/components/TagInput.tsx` | `src/components/TagInput.test.tsx` | | `src/context/NotesContext.tsx` | `src/context/NotesContext.test.tsx` | - 테스트 파일이 이미 존재하면 기존 내용을 읽어 중복 `describe` 블록을 피한다. - 테스트 파일이 없으면 새로 생성한다. ### 파일 헤더 (신규 생성 시) ```ts import { describe, it, expect, vi, beforeEach } from 'vitest'; // 컴포넌트 파일인 경우에만 추가: // import { render, screen } from '@testing-library/react'; // import userEvent from '@testing-library/user-event'; ``` --- ## 단계 2: 시나리오를 테스트 코드로 작성 시나리오를 하나씩 `it()` 블록으로 변환한다. 한 번에 모두 작성하지 않고 **시나리오 하나 작성 → 실행 → 실패 확인 → 다음 시나리오** 순서를 반복한다. ### 테스트 이름 형식 ``` should [기대 동작] when [조건] ``` ### describe 블록 구조 함수·컴포넌트 단위로 묶는다. ```ts describe('함수명 또는 컴포넌트명', () => { it('should [기대 동작] when [조건]', () => { // Red 단계: 구현이 없으므로 실패하는 코드만 작성 }); }); ``` ### Red 테스트 작성 원칙 - 구현이 존재하지 않으므로 import가 실패하거나 호출이 오류를 던져야 한다. - 억지로 통과시키려 하지 않는다. 실패 자체가 목표다. - `expect`는 실제 기대 동작을 명확하게 표현한다. `expect(true).toBe(false)` 같은 더미 assertion은 사용하지 않는다. **API 함수 예시** ```ts import { addTag } from './tags'; describe('addTag', () => { it('should return updated note when valid tag is added', async () => { const result = await addTag('note-1', 'work'); expect(result.tags).toContain('work'); }); it('should throw when tag is empty string', async () => { await expect(addTag('note-1', '')).rejects.toThrow(); }); }); ``` **컴포넌트 예시** ```ts import { render, screen } from '@testing-library/react'; import { TagInput } from './TagInput'; describe('TagInput', () => { it('should render input when component is mounted', () => { render(<TagInput tags={[]} onAdd={vi.fn()} onRemove={vi.fn()} />); expect(screen.getByRole('textbox')).toBeInTheDocument(); }); }); ``` --- ## 단계 3: 시나리오별 실행 루프 각 시나리오를 작성한 직후 아래 명령으로 해당 테스트 파일만 실행한다. ```bash npx vitest run <테스트-파일-경로> --reporter=verbose ``` - **실패 확인**: `FAIL` 또는 import 오류가 나오면 정상. 다음 시나리오로 이동한다. - **통과**: 테스트가 의도치 않게 통과하면 즉시 멈추고 사용자에게 알린다. 구현 파일이 이미 존재하는지 확인한다. --- ## 단계 4: 전체 확인 모든 시나리오 작성이 끝나면 전체 테스트를 실행한다. ```bash npm test ``` - 작성한 테스트 파일의 모든 케이스가 실패하는지 확인한다. - 기존에 통과하던 테스트가 새로 실패하면 즉시 사용자에게 보고한다. --- ## 제약 - 테스트 파일(`*.test.ts`, `*.test.tsx`)만 생성하거나 수정한다. - `src/` 안의 구현 코드(`*.ts`, `*.tsx`, `*.css` 등 테스트 파일 제외)는 절대 수정하지 않는다. - 테스트가 통과하도록 mock이나 stub으로 우회하지 않는다. --- ## 산출물 - 작성된 테스트 파일 목록 및 경로 - 시나리오별 실패 메시지 요약 - `npm test` 결과: 실패한 테스트 수 / 전체 테스트 수 관련해서, import 에러 및 파일 에러는 없어야한다.(stub 이 있어야 함. Collect 는 모두 성공하고 Test 단계에서 실패해야한다.) 는 점을 고려해서 아래와 같이 스킬을 수정했는데, 피드백 부탁드립니다. --- name: tdd-red description: 승인된 테스트 시나리오를 실패하는 테스트 코드로 작성한다. TDD Red 단계 시작 시 사용한다. argument-hint: <feature> <이슈 번호> allowed-tools: Read Write Bash --- `$ARGUMENTS`에서 feature 이름과 이슈 번호를 파싱해 해당 이슈의 승인된 시나리오를 실패하는 테스트 코드로 작성한다. ## 시작 전 ### 인자 파싱 `$ARGUMENTS`를 공백으로 분리해 첫 번째 토큰을 `{feature}`, 두 번째 토큰을 `{issue}` 로 사용한다. | 입력 예시 | feature | issue | | ------------------- | -------- | ----- | | `/tdd-red tag 2` | `tag` | `2` | | `/tdd-red search 1` | `search` | `1` | 누락된 값이 있으면 실행 전에 사용자에게 질문한다. - `{feature}`가 없으면: "어떤 기능의 이슈인가요? (예: tag, search, ...)" - `{issue}`가 없으면: "이슈 번호를 알려주세요." 두 값이 확정된 뒤 `docs/features/{feature}/issue-{issue}.md` 를 읽어 시그니처와 테스트 시나리오 목록을 파악한다. - 시그니처 섹션: 테스트 대상 파일 경로 및 함수·컴포넌트명 확인 - 테스트 시나리오 섹션: 작성할 시나리오 목록 전체 수집 파일이 없으면 즉시 멈추고 사용자에게 알린다 (`/test-scenarios {feature} {issue}` 를 먼저 실행해야 한다는 안내 포함). --- ## 단계 0: 스텁 생성 테스트 파일을 작성하기 전에, 이슈의 시그니처를 읽어 **아직 존재하지 않는 구현 파일**에 대해서만 최소 스텁을 생성한다. ### 목적 Import Error 때문에 테스트가 실행조차 되지 않으면, 테스트가 무엇을 거부하는지 알 수 없다. 스텁은 빌드를 통과시켜 테스트가 **Assertion Failure로 실패**하도록 만드는 것이 전부다. ### 스텁 작성 규칙 - **기존 파일이 있으면 건드리지 않는다.** 신규 파일만 생성한다. - 시그니처의 파라미터·반환 타입을 그대로 선언한다. 구현 로직은 쓰지 않는다. - 반환값은 타입을 만족하는 최솟값으로 고정한다. | 반환 타입 | 스텁 반환값 | | ------------------ | ------------- | | `string[]` | `[]` | | `string` | `''` | | `boolean` | `false` | | `Promise<T>` | `Promise.resolve(/* 최솟값 */)` | | React 컴포넌트 | `return <div />;` | | `void` | _(반환 없음)_ | ### 스텁 예시 **훅 (`src/hooks/useTagInput.ts`)** ```ts import { useState } from 'react'; export function useTagInput(_initialTags: string[]) { const [tags] = useState<string[]>([]); const [inputValue, setInputValue] = useState(''); return { tags, inputValue, setInputValue, addTag: (_value: string) => {}, removeTag: (_tag: string) => {}, handleKeyDown: (_e: React.KeyboardEvent<HTMLInputElement>) => {}, }; } ``` **컴포넌트 (`src/components/TagInput.tsx`)** ```tsx import { TagInputProps } from '../types'; // 필요 시 인라인 정의 export function TagInput(_props: TagInputProps) { return <div />; } ``` **API 함수 (`src/api/tags.ts`)** ```ts import { Note } from '../types/note'; export async function addTag(_noteId: string, _tag: string): Promise<Note> { return Promise.resolve({} as Note); } ``` --- ## 단계 1: 테스트 파일 준비 시그니처에서 테스트 파일 경로를 결정한다. | 구현 파일 | 테스트 파일 | | -------------------------------- | ----------------------------------- | | `src/api/tags.ts` | `src/api/tags.test.ts` | | `src/components/TagInput.tsx` | `src/components/TagInput.test.tsx` | | `src/context/NotesContext.tsx` | `src/context/NotesContext.test.tsx` | - 테스트 파일이 이미 존재하면 기존 내용을 읽어 중복 `describe` 블록을 피한다. - 테스트 파일이 없으면 새로 생성한다. ### 파일 헤더 (신규 생성 시) ```ts import { describe, it, expect, vi, beforeEach } from 'vitest'; // 컴포넌트 파일인 경우에만 추가: // import { render, screen } from '@testing-library/react'; // import userEvent from '@testing-library/user-event'; ``` --- ## 단계 2: 시나리오를 테스트 코드로 작성 이슈의 시나리오 전체를 한 번에 `it()` 블록으로 변환한다. ### 테스트 이름 형식 ``` should [기대 동작] when [조건] ``` ### describe 블록 구조 함수·컴포넌트 단위로 묶는다. ```ts describe('함수명 또는 컴포넌트명', () => { it('should [기대 동작] when [조건]', () => { // 스텁이 있으므로 import는 통과하고, assertion이 실패한다 }); }); ``` ### Red 테스트 작성 원칙 - `expect`는 실제 기대 동작을 명확하게 표현한다. `expect(true).toBe(false)` 같은 더미 assertion은 사용하지 않는다. - 스텁의 반환값(빈 배열, `<div />` 등)을 기준으로 assertion이 자연스럽게 실패하도록 작성한다. - 테스트가 통과하도록 mock이나 stub으로 우회하지 않는다. **API 함수 예시** ```ts import { addTag } from './tags'; describe('addTag', () => { it('should return updated note when valid tag is added', async () => { const result = await addTag('note-1', 'work'); expect(result.tags).toContain('work'); // 스텁은 {} 반환 → tags 없음 → Assertion Failure }); it('should throw when tag is empty string', async () => { await expect(addTag('note-1', '')).rejects.toThrow(); // 스텁은 throw 안 함 → Assertion Failure }); }); ``` **컴포넌트 예시** ```ts import { render, screen } from '@testing-library/react'; import { TagInput } from './TagInput'; describe('TagInput', () => { it('should render input when component is mounted', () => { render(<TagInput tags={[]} onAdd={vi.fn()} onRemove={vi.fn()} />); expect(screen.getByRole('textbox')).toBeInTheDocument(); // 스텁은 <div /> → textbox 없음 → Assertion Failure }); }); ``` --- ## 단계 3: 실행 및 Red 품질 확인 모든 테스트 파일을 작성한 뒤 파일별로 실행한다. ```bash npx vitest run <테스트-파일-경로> --reporter=verbose ``` ### Red 품질 기준 | 실패 유형 | 판정 | 조치 | | ------------------ | ------------- | ---------------------------------------- | | Assertion Failure | ✅ 올바른 Red | 다음으로 진행 | | Runtime Error | ✅ 허용 | 다음으로 진행 | | Import Error | ❌ 스텁 누락 | 단계 0으로 돌아가 해당 파일 스텁 보완 | | Syntax Error | ❌ 테스트 오류 | 테스트 코드 수정 | - **Import Error가 발생하면 올바른 Red로 인정하지 않는다.** 스텁을 보완한 뒤 다시 실행한다. - 테스트가 의도치 않게 통과하면 즉시 멈추고 사용자에게 알린다. --- ## 단계 4: 전체 확인 모든 파일의 Red 품질이 확인된 뒤 전체 테스트를 실행한다. ```bash npm test ``` - 이슈에서 작성한 테스트 파일의 케이스가 모두 Assertion Failure로 실패하는지 확인한다. - 기존에 통과하던 테스트가 새로 실패하면 즉시 사용자에게 보고한다. --- ## 제약 - 테스트 파일(`*.test.ts`, `*.test.tsx`)은 자유롭게 생성·수정한다. - 단계 0의 스텁은 **존재하지 않는 파일**에 한해서만 신규 생성한다. - **기존 구현 파일은 수정하지 않는다.** --- ## 산출물 - 생성된 스텁 파일 목록 및 최솟값 반환 내용 - 작성된 테스트 파일 목록 및 경로 - 파일별 실패 유형 요약 (Assertion Failure / Runtime Error) - `npm test` 결과: 실패한 테스트 수 / 전체 테스트 수
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
코드 구현을 파이썬으로 하라고 명시했나요?
안녕하세요.강의 주제와 벗어난 질문이지만 궁금해서 문의 드립니다.MD 파일 내용을 보면 특별히 파이썬으로 구현하라는 내용이 없는 것 같은데...어떻게 파이썬 언어을 선택해서 구현 과정이 이뤄지는지 궁금하네요.다음에는 더 좋은 질문 드리도록 하겠습니다.
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
섹션5 수업노트와 실습자료 문의
섹션5 수업노트와 실습자료 (claude.md 파일) 첨부가 어디되어있을까요?
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
claude.md 질문
안녕하세요 실습 과정에서 claude.md에 대해서 질문이 있습니다저는 프로젝트 단위에서 각 패치 서버에 대한 정보를 명시해두었고 어떠한 명령을 해도 해당 claude.md 파일을 참고하여 해당 서버의 환경에 맞는 코드 수정을 원했습니다.하지만 claude.md를 참고하라고 명시해야했고 명시하지않을 경우 전혀 claude.md를 참고하지 않아 특정 서버에 맞게 변경을 하라고해도 하지않는 결과가 나타났습니다. 이런 경우에는 permission이나 deny에서 설정을 하는것이 맞을까요?
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
섹션1의 자료는 따로 없나요?
섹션1에서 보여줬던 내용을 다시 보고 싶은데 매번 다시 강의자료로 보기에는 번거롭네요.
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
37번 강의가 잘못된거 같습니다.
해당 영상 내용이 41번 강의랑 동일한 내용으로 보이네요.
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
섹션 1 강의자료 없나요
섹션 1 강의자료 없나요? 글자가 너무 작아요 확대 축소 이동 하시면 정신이 좀 없어서요 따로 화면 뛰워놓고 보고 싶어요... ..
-
미해결Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
강의 논문 질문
안녕하세요. 강의 잘 보고 있습니다. 감사합니다. 강의 소개글과 강의에서 참고한 논문을 언급하셨는데, 혹시 강의에서 기준으로 삼은 논문 목록을 알 수 있을까요? 강의를 이해하는데 도움이 될 것 같습니다. 감사합니다.
-
해결됨나만의 Claude Code 하네스 (SPEC·TDD·CI로 짓는 AI 개발 워크플로우)
요구사항인터뷰 강의자료 안보임
여기 자료 다운로드 했는데 전체 워크 플로우가 안보입니다 ㅠㅠ 저만 그런가요
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
강의자료 오류
강의자료 다운받으면 비어있습니다. 오류같은데 확인 부탁드립니다.
-
해결됨Claude Code Harness Engineering 클로드코드 심화 CLI 하네스 엔지니어링 실무
code craft와 harness engineering의 차이가 궁금합니다
26강 10분 40초쯤을 보다가 약간 개념이 모호해졌는데, code craft는 하네스 엔지니어링을 하기위한 클로드 코드 기준으로 /plan모드에서 요구사항을 정의하는 방법론이라고 생각하면될까요 ??