묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
plan mode 관련 질문 드립니다.
PlansDirectory에는 plan 모드로 진행한 사항만 저장되는 건가요?
-
해결됨클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
rules 파일 관련 질문입니다!
안녕하세요 강사님!rules 하위에 있는 md 파일(규칙 파일)의 유형에 따라 해당 파일이 로드되는 시점이 궁금해서 질문드립니다!!강사님께서 설명해주신 내용을 보면 규칙 파일 내부에 globs로 paths 경로를 지정해서 해당 경로에 있는 파일만 작성된 규칙을 이행하게끔 할 수 있다고 하셨는데요. 그렇다면, 만약 rules 하위에 paths 경로가 없는 파일(1), 있는파일(2) 이 각각 있다고 하면,클로드 코드의 세션을 시작했을때 (1) 파일은 CLAUDE.md 파일처럼 먼저 세션에 로드 될거같은데(2) 파일도 (1) 파일처럼 클로드 코드 세션 시작할때 처음부터 들고 있나요?OR 그 paths 관련된 경로만 클로드 코드가 미리 세션시작시 들고 있고(frontmatter만 들고 있는???), 작업을 하다가 그 경로에 매칭되는 파일을 건들인다면 그제서야 그 규칙파일을 읽는건가요? -> 만약 이게 맞다면 클로드 코드가 미리 glob 패턴을 알고 있어야 할거같은데..(paths 가 적힌 규칙파일이 언제 어느 시점에 로드 되는지 조금 헷갈립니다!!)
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
51강 7분 custom 스타일 질문
큰 틀에서 이해는 되는데요1.keep-coding-instruction:true이 부분을 추가하면custom 지침이랑 코딩 작업용 지침이랑 동시에 셋팅된다는 말인가요? 2.글쓰기용 만들때는 코딩 작업용을 비활성화 시켜야 하니까 "keep-coding-instruction:true" 해당 부분을 넣지 말라는건가요?3.글쓰기 할때랑 코딩 할때랑 번거롭게 활성 비활성 해야하나요? 코딩용 지침이랑 제가 설정한 custom 지침이랑 상황에 따라서 동시에 인식하게 하려면 어떻게 해야하나요?
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
모델 차이 궁금증
각각의 개념은 뭔지 이해 하고 있는데요 아래2가지 경우엔 어떻게 되나요?어떤게 더 토큰 많이 먹는지 궁금합니다1.사고 모드 끄고 높음 선택 vs 사고 모드 키고 낮음 선택 2.Haiku 사고모드 킨거vs sonnet 사고모드 끈거
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
settings.json 파일
1.settings.json 파일은 목적별로 여러개 만들어도 상관없나요? 아니면 하나 다 넣어야 하나요?2.setting.json 이름은 무조건 이거로 해야하나요?setting.json2로 하니까 {} 이 표시가 없어지네요
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
플러그인 설치 관련
cursor 플러그인 설치하면 적용 범위가 궁금해요해당 디렉토리에만 적용되는건가요?디렉토리 변경 하면 다시 cursor 플러그인 설치해야 하는지 궁금합니다
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
GIT과 VSCODE
GIT을 VSCODE 프로그램을 사용해서 GIT강의가 따라가기 어렵습니다. VSCODE사용자용으로 보강요청드립니다.어느 버튼을 눌러야하는지도 알려주세요.
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
팀& 서브 에이전트 실활용 방법은 어디에서 볼 수 있을까요?
안녕하세요. 팀&서브 에이전트를 어떻게 운영하면 되는지 궁금하여 강의를 수강하였는데요. 커리큘럼상 "팀 에이전트" 부분에는 개요와 이론적인 부분만 있고, 어떻게 설정(ex. tmux 사용법 등) 하고 어떻게 써야하는지는 안보이는 거 같습니다. 혹시 다른 커리큘럼상에 이를 실제로 어떻게 사용하는지 볼 수 있는 부분이 있을까요? 혹 없다면 관련 강의를 추가해주실 수 없으실지 문의드립니다. 감사합니다 🙂
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
선생님 강의토대로 개발중인데 질문이 하나있습니다 급함
현재 정산 에이전트웹을 개발중인데,제가 원하는 방향의 html미리보기는 제대로 랜더링이 되는데 로컬호스트의 next.js 개발환경에서는 계속 원하는 값을 넣어주고해도밑에 그림상처럼 이 같은 화면으로만 계속 나타나는 현상이 있습니다.제가 원하는 화면은 이런화면인데말이죠근데, 로컬호스트 개발환경으로 불러올때는 이런식으로 불러오지를 못해서 어떻게 해결해야하는지 고민입니다.. 방법이 있을까요
-
미해결스프링 부트와 리액트로 구현하는 소셜 로그인
To-Do App
9. 스프링 부트 프로젝트 생성 하고나서 10. 일반 로그인 실행에 To-Do App과 바로 로그인이랑 이런것들 코드를 생성한적이없는데 어떻게 생겨있나요?
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
MCP 서버 설치 내용이 실제와 달라 좀 헷갈립니다.
MCP server 설치 내용이 현재와 달라서, 좀 헷갈립니다. 강의 6분 정도 되는 부분에서 막히기 시작했는데, 이전 Q&A 질문에서 업데이트로 인해 'npx ctx7 setup --claude'로 설치해도 된다는 답글을 확인했는데, MCP server로 설치하고 이후 github 로그인한 후 인증을 받아서 끝났는데, 이후로는 어떻게 해야할지 모르겠습니다 ㅠㅠ위와 같이 해도, .mcp.json 파일이 새로 생기지 않았어요 ㅠㅠ
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
MCP가 토큰을 낭비한다고 뒷쪽에서 설명해주셨는데요.
안녕하세요. MCP가 토큰 46.9% 절감해주고, 컨텍스트엔지니어링의 핵심 도구로 설명해주셨는데요. 뒷쪽에서는 MCP가 불필요한 토큰을 소비한다고 설명해주시는 부분도 있어서 헷갈립니다. 보충 설명 가능할까요? AI 모델 vs AI 코딩 도구: 무엇이 다를까? [UP_260206]
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
[55강 질문] 로컬 커밋관련 질문
안녕하세요. Cursor에서 왼쪽 사이드바에서 레포지토리 초기화를 하였고, 선생님의 영상에서 처럼 커밋을 하려는데, "스테이징에 변경된 사항"에 무려 1000개가 나옵니다. 그간 연습하면서 했던 모든 것들이 나오나? 싶기도 하고요. (선생님 영상에는 6개)이렇게 많으니깐 무엇을 커밋해야 되고 무엇을 하면 안되는지 감이 오지 않습니다. 어떤것이 문제로 작용했을까요? 어떻게 해결 하면 좋을까요? 감사합니다!
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
claude: command not found
커서 AI 클로드 코드 사용하기 (Windows) 따라가는 중 커서 툴 설치 후에 터미널에서 claude 를 실행하면 제목과 같이 오류가 나는데요. 어떻게 조치해야 할까요?
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
git사용자 정보 설정 확인 관련
Git 사용자 정보 설정 확인 시, 아래와 같이 global user.email 명령어 실행시에는 이메일이 출력되지 않으며, global user.name 실행시에는 이름이 아닌 이메일이 출력됩니다. 사용하는데 문제 없는 걸까요?
-
해결됨나만의 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` 결과: 실패한 테스트 수 / 전체 테스트 수
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
claude code 실행시간
안녕하세요,mission 4 과제를 진행중인데 클로드 코드의 프롬프트 수행 속도가 약 7분 이상으로 상당히 느립니다. 원래 속도가 이런 건지, 제 컴퓨터가 느리게 돌아가는 건지 여쭤봅니다..!
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
플랜모드에 대해 업데이트 내용이 있었던 것 같습니다!
플랜모드에 대해 업데이트가 있는것 같아요!강의 화면과 조금 달라요~!
-
해결됨클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
서브에이전트 질문입니다.
서브에이전트 강의 듣던중 궁금증이 생겨 문의 드립니다.병렬처리를 할때 전체 작업에대한 md파일을 하나 만들고클로드 코드를 n개 켜서 진행 하는거로 알고 있었는데요.서브에이전트롤 활용하면 (별도의 thread? 같은 개념인가..) 여려개의 클로드 코드를 실행하지 않고하나의 클로드코드에서 병렬처리를 할수 있을까요?할수 있다면 어떤게 더 효율적인지 궁금합니다.
-
미해결클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지
PRD 파일에 대해서
CLAUDE에서 init 명령어를 통해서 해당 프로젝트에 대한 내용과 구조를 파악해서 claude.md 파일을 만드는 것으로 알고 있는데 PRD 파일을 따로 만들어야하는 이유가 뭔가요?CLAUDE.MD 와 PRD.MD 간의 차이가 뭔지 잘 이해가 안되네요