← AI 엔지니어링 심화

0 실습 환경 준비

Setting Up Your Hands-On Environment
기반 · 실습 환경개념 29세션 3실습 3▶ 실무 따라하기

프롬프트·컨텍스트·하네스·헤르메스·메타 엔지니어링을 손으로 실습하기 위한 공통 개발환경(VSCode·Node·Git·터미널·API 키)을, 공무원 PC의 관리자권한·프록시·망분리 제약을 정면으로 반영해 안전하게 세우는 기반 챕터.

4컷으로 보기 — 요리 실습 전에 주방을 차리는 일과 같다

실습 환경 준비 4컷 설명 웹툰
  1. 11컷: 주방이 잠겼다?! 관리자권한 없는 공무원 PC
  2. 22컷: 등장! 손질된 밀키트 - 무설치 플레이그라운드
  3. 33컷: 도마·칼(VSCode)·불(Node)·레시피백업(Git) 순서대로 세팅
  4. 44컷: 망분리도 문제없이 완주하는 실습 주방 완성

왜 중요한가

이후 모든 실습(프롬프트 4요소, 컨텍스트 주입, 하네스 자동화, 오케스트레이션)은 코드를 '내 손으로' 돌려봐야 체득된다. 그러려면 코드를 담을 작업대(VSCode), 실행 엔진(Node), 되돌리기 안전장치(Git), 명령 통로(터미널), 인증 열쇠(API 키)가 먼저 갖춰져야 한다. 동시에 공무원 현장의 관리자권한 제한·사내 프록시·망분리는 예외가 아니라 다수 시나리오이므로, 설치가 막혀도 학습이 끊기지 않는 무설치·오프라인 경로를 함께 세워야 한다. 무엇보다 이 챕터에서 API 키·개인정보 같은 비밀을 다루는 안전 습관을 처음부터 몸에 익혀야, 이후 실습에서 유출·과금 사고를 원천 차단할 수 있다.

행정 실무 비유

요리 실습 전에 주방을 차리는 일과 같다. 도마와 칼(VSCode 에디터), 불(Node 런타임), 실수해도 되돌아갈 레시피 백업(Git), 재료를 꺼내는 손동작(터미널 명령), 그리고 아무에게나 주면 안 되는 금고 열쇠(API 키)를 순서대로 갖춘다. 주방을 못 쓰게 하는 상황(관리자권한 없음=주방 잠김, 프록시=배달 차단, 망분리=식자재 반입 불가)에 대비해, 미리 손질된 밀키트(무설치 /playground, 오프라인 워크북 PDF)로도 똑같이 완주할 수 있게 준비해 둔다.

🖐 실무 따라하기 — 복붙해서 따라 하면 됩니다

상황 경상북도 민원실 주무관 홍길동은 반복되는 야간 공사 소음 민원(합성 접수번호 MW-2026-0001)의 회신 초안을 AI로 자동 작성하는 작은 도구를 만들려 한다. 그러려면 먼저 내 PC에 '실습용 폴더'를 만들고, AI 열쇠(API 키)를 금고(.env.local)에 넣어 실수로 외부에 올라가지 않게(Git 커밋 차단) 안전하게 준비해야 한다.
목표 민원 회신 도구용 첫 프로젝트 폴더를 만들고, Node 실행 확인 → API 키를 .env.local에 안전 저장 → Git 커밋에서 키가 빠지는지 검증 → 저장한 키로 회신 초안 한 줄 생성까지 끝낸 '작동하는 개발환경'을 완성한다. (설치가 어려우면 5단계 무설치 프롬프트만 웹에 붙여넣어도 같은 결과를 얻는다.)
준비물 Windows/Mac PC의 터미널(Windows는 PowerShell, Mac은 '터미널' 앱)과 VSCode. Node.js(node -v로 확인, 없으면 nodejs.org의 LTS 설치 — 설치에 관리자권한이 막히면 무설치 대안 사용). ★무설치·망분리 PC라면 1~4단계를 통째로 건너뛰고, 5단계 맨 아래 '무설치 대안' 프롬프트를 이 플랫폼의 /playground 또는 Claude 웹(claude.ai) 채팅창에 붙여넣기만 하면 회신 초안이 나온다. 망분리·프록시 환경이면 API 호출(5단계 코드)이 차단될 수 있으니 그 경우에도 /playground·웹 대안을 사용.
⚠ .env.local에 넣는 실제 API 키는 대외비 열쇠다 — 캡처·메신저·이메일·화면공유로 노출 금지, .gitignore로 커밋 차단(4단계 git check-ignore)을 확인한 뒤에만 git 사용. 실습 데이터는 전부 합성이다(민원인은 '홍길동', 접수번호는 'MW-2026-0001'만 사용) — 실제 민원인 이름·연락처·주소·접수번호는 절대 입력하지 말 것. 접수번호도 다른 정보와 결합하면 개인 식별이 가능하므로 실무에서는 [접수번호]로 가린다. 5단계 API 호출은 프롬프트가 외부(Anthropic)로 전송되므로 대외비·개인정보를 넣지 말 것. 망분리/프록시 PC에서 호출이 차단되면 /playground 또는 claude.ai 무설치 대안을 사용.
  1. 1실습용 폴더 만들고 Node가 도는지 확인

    터미널을 연다(Windows: 시작메뉴에서 'PowerShell' 검색 → 실행 / Mac: Spotlight에서 '터미널' 검색 → 실행). 아래를 '자기 OS 블록'만 골라 한 줄씩 복붙해 실행한다. 바탕화면에 minwon-tool 폴더를 만들고 그 안으로 들어간 뒤, 버전을 확인하고 첫 실행 파일을 돌려본다. (한국어 Windows도 $HOME\Desktop이 실제 바탕화면 경로라 그대로 동작한다.)

    터미널 명령
    # ===== Windows(PowerShell) 전용 — 이 5줄을 위에서부터 =====
    cd $HOME\Desktop
    mkdir minwon-tool
    cd minwon-tool
    node -v ; npm -v ; git --version
    node -e "console.log('민원 도구 개발환경 OK:', new Date().toLocaleString('ko-KR'))"
    
    # ===== Mac(터미널) 전용 — 위 Windows 블록 대신 이 5줄을 =====
    cd ~/Desktop
    mkdir minwon-tool
    cd minwon-tool
    node -v ; npm -v ; git --version
    node -e "console.log('민원 도구 개발환경 OK:', new Date().toLocaleString('ko-KR'))"

    → 결과 node -v 는 v20 이상이면 정상(예: v24.15.0 — 숫자가 20 이상이기만 하면 됨), npm -v 는 10~11.x, git --version 은 2.x대가 출력된다. 마지막 줄에서 '민원 도구 개발환경 OK: (현재 날짜·시각)'처럼 지금 시각이 찍히면 Node가 정상 실행된 것(시각 값은 실행할 때마다 달라지는 게 정상). 만약 'node: command not found'(Mac) 또는 ''node'은(는) ... 인식할 수 없습니다'(Windows)가 나오면 Node 미설치 → nodejs.org의 LTS 설치 후 새 터미널에서 재시도. 설치에 관리자권한이 막히면 이 챕터의 5단계 '무설치 대안'으로 바로 이동.

  2. 2프로젝트 초기화(package.json) + VSCode로 열기

    1단계에서 만든 minwon-tool 폴더 안에서, 폴더를 정식 프로젝트로 만들고(package.json 생성) VSCode에서 연다. code 명령이 없으면 VSCode를 직접 실행해 '파일 > 폴더 열기 > minwon-tool'로 연다.

    터미널 명령
    npm init -y
    code .

    → 결과 npm init -y 실행 후 화면에 방금 생성된 package.json 내용이 출력되고, 그 안에 "name": "minwon-tool" 줄이 보인다. 이어서 code . 로 VSCode 창이 열리며 좌측 탐색기에 minwon-tool 폴더와 package.json이 나타난다. ('code' 명령을 못 찾으면: Mac은 VSCode에서 Cmd+Shift+P → 'Shell Command: Install code command in PATH' 실행 후 재시도, Windows는 VSCode를 직접 켜고 '파일 > 폴더 열기'로 minwon-tool을 선택.)

  3. 3API 키 금고(.env.local) 만들고 커밋 차단 규칙(.gitignore) 작성

    VSCode 좌측 탐색기의 빈 공간을 우클릭 → 'New File(새 파일)'로 파일 두 개(.gitignore, .env.local)를 각각 만든다. 아래 두 블록을 '해당 파일에만' 그대로 붙여넣고 저장한다(Ctrl/Cmd+S). .env.local의 sk-ant-... 부분만 나중에 진짜 키로 교체한다(지금은 그대로 둬도 이후 검증이 된다). 진짜 키는 콘솔 화면 캡처·메신저 공유 금지 — 이 파일 안에만 둔다.

    설정
    # ===== 파일 1: .gitignore  (이 5줄을 .gitignore 파일에 저장) =====
    node_modules
    .env
    .env.local
    .env*.local
    
    # ===== 파일 2: .env.local  (아래 1줄을 .env.local 파일에 저장) =====
    ANTHROPIC_API_KEY=sk-ant-여기에-진짜-키-붙여넣기

    → 결과 저장 후 VSCode 좌측 탐색기에 .gitignore와 .env.local 두 파일이 새로 보이면 성공(이 단계에서는 파일 2개가 생성됐는지만 확인한다 — 파일명이 흐리게(회색) 처리되는 무시 표시는 Git 저장소로 만든 다음 단계(4단계) 이후에 나타나므로 지금 회색이 아니어도 정상). 진짜 키는 console.anthropic.com 로그인 → 왼쪽 메뉴 API Keys → Create Key 로 발급받아 sk-ant-... 자리(등호 뒤 전체)에 붙여넣고 다시 저장한다.

  4. 4Git 시작 후 '키가 정말 커밋에서 빠지는지' 검증(핵심 안전 단계)

    이 폴더를 Git으로 관리 시작하고, 커밋 후보 목록에 .env.local이 안 보이는지 두 가지 명령으로 확인한다. 이게 이번 실습의 핵심 안전 검증이다. (Windows·Mac 공통, minwon-tool 폴더 안에서 실행)

    터미널 명령
    git init
    git add -A
    git status --short
    git check-ignore .env.local

    → 결과 git status --short 결과 목록에 .gitignore, package.json 등은 보이지만 .env.local 은 절대 보이지 않아야 한다(안 보이면 성공). 마지막 git check-ignore .env.local 이 '.env.local' 한 줄을 그대로 되돌려주면 = '이 파일은 확실히 무시된다'는 확정 신호(아무것도 출력 안 되면 무시가 안 걸린 것 → 3단계 .gitignore 철자·저장을 다시 확인). 또한 git init 이후에는 VSCode 탐색기에서 .env.local 파일명이 흐리게(회색)로 바뀌는데, 이것도 커밋 차단이 걸렸다는 시각 신호다. (여기까지는 git add로 로컬 스테이징만 했을 뿐 외부 전송은 전혀 없음 — 안전.)

  5. 5환경 검증: 저장한 키로 민원 회신 초안 한 줄 생성

    준비한 환경이 실제로 작동하는지, 홍길동 주무관의 소음 민원 회신 초안을 뽑아 마무리한다. (1) 먼저 터미널에서 라이브러리 하나를 설치하고, (2) VSCode에서 draft.mjs 파일을 만들어 아래 코드를 통째로 붙여넣은 뒤, (3) 터미널에서 실행한다. 인터넷/프록시가 막혀 실패하면, 이 코드 맨 아래 '무설치 대안 프롬프트'를 복사해 /playground나 claude.ai 채팅창에 붙여넣어 동일한 결과를 얻는다.

    코드
    # (1) 터미널에서 먼저 실행 — 라이브러리 설치 (한 번만)
    npm i dotenv
    
    # (2) VSCode에서 draft.mjs 파일을 만들어 아래 전체를 붙여넣고 저장
    // draft.mjs — 터미널에서 실행: node draft.mjs
    import 'dotenv/config';
    const key = process.env.ANTHROPIC_API_KEY || '';
    if (!key.startsWith('sk-ant-')) {
      console.log('키 미설정 — 이 파일 맨 아래 [무설치 대안 프롬프트]를 /playground 또는 claude.ai에 붙여넣으세요.');
      process.exit(0);
    }
    const res = await fetch('https://api.anthropic.com/v1/messages', {
      method: 'POST',
      headers: {
        'content-type': 'application/json',
        'x-api-key': key,
        'anthropic-version': '2023-06-01'
      },
      body: JSON.stringify({
        // 콘솔(console.anthropic.com > Models)에서 사용 가능한 최신 모델명을 확인해 넣으면 노후화에 안전
        model: 'claude-opus-4-8',
        max_tokens: 400,
        messages: [{
          role: 'user',
          content: '경상북도 민원 회신 초안을 공문 말투로 4~5문장 작성하라. 접수번호 MW-2026-0001, 민원인 홍길동, 내용: 야간 공사 소음. 담당부서가 현장 소음측정과 야간작업 시간제한 안내를 하겠다는 취지로. (실제 개인정보 금지, 합성값만 사용)'
        }]
      })
    });
    const data = await res.json();
    console.log(data.content?.[0]?.text ?? JSON.stringify(data, null, 2));
    
    /* ===== [무설치 대안 프롬프트] — API가 막히면 이 따옴표 안 문장만 복사해 /playground·claude.ai에 =====
    경상북도 민원 회신 초안을 공문 말투로 4~5문장 작성하라. 접수번호 MW-2026-0001, 민원인 홍길동, 내용: 야간 공사 소음. 담당부서가 현장 소음측정과 야간작업 시간제한 안내를 하겠다는 취지로.
    ============================================================================================ */

    → 결과 터미널에서 (1) npm i dotenv 가 'added N packages'처럼 끝나면 설치 성공. (3) node draft.mjs 를 실행하면 '홍길동 님께서 접수하신 민원(MW-2026-0001)에 대하여...'로 시작하는 공문체 회신 초안 4~5문장이 출력된다 → 이게 나오면 개발환경 전체(폴더·Node·키 저장·API 호출)가 정상 완성된 것. 키를 안 넣었거나 네트워크가 막히면 '키 미설정 —...' 안내 문구가 뜨는데, 그 경우 코드 맨 아래 [무설치 대안 프롬프트]의 따옴표 안 문장을 /playground 또는 claude.ai 채팅창에 붙여넣으면 같은 초안을 얻는다. (참고: 401 authentication_error 가 나오면 .env.local의 키가 잘못된 것, 404 not_found_error 가 나오면 model 문자열을 콘솔 Models에서 확인해 교체.)

✅ 완주하면 바탕화면에 minwon-tool 프로젝트 폴더(package.json, .gitignore, .env.local, draft.mjs)가 생기고, API 키가 .env.local 금고에 저장된 채 Git 커밋에서 자동 제외되며, 홍길동 민원(MW-2026-0001) 회신 초안이 실제로 출력되는 재사용 가능한 개발환경. (무설치 경로로 왔다면: /playground·claude.ai에서 같은 프롬프트로 회신 초안을 얻은 결과물.) · 성공 판정: (1) node -v/npm -v/git --version이 모두 버전을 출력하고(node는 v20 이상), (2) git status --short 목록에 .env.local이 없으며 git check-ignore .env.local이 '.env.local'을 반환하고, (3) node draft.mjs가 민원 회신 초안(또는 키 미설정 시 무설치 대안 안내)을 출력하면 완주. 무설치 경로라면 (3) 대신 /playground·claude.ai에서 회신 초안이 나오면 완주.

스택 내 위치

스택의 0계층(기반). 이후 모든 계열(prompt-eng·context-eng·harness-eng·hermes-eng·orchestration-eng·meta-eng) 실습의 공통 선행조건이다. 이 챕터가 세운 환경(또는 무설치 대안) 위에서 다른 모든 실습이 돌아간다.

핵심 개념 (29)

VSCode(Visual Studio Code)
Visual Studio Code

마이크로소프트가 무료·오픈소스로 배포하는 코드 에디터. 기본은 가벼운 에디터지만 확장을 붙이면 IDE처럼 커진다. 이 챕터의 기본 작업대로, 파일 편집·통합 터미널·Git·환경변수를 한 창에서 다룬다.

💡 이후 모든 실습 코드를 여기서 열고 고치고 실행한다. 한 화면에 도구를 모아 '지금 무슨 창인지 몰라 생기는 오류'를 줄인다.

User Installer vs System Installer
User vs System Installer (Windows VSCode)

Windows용 VSCode 설치본 두 종류. System은 PC 전체(관리자권한 필요, Program Files), User는 내 계정 폴더(관리자권한 불필요, AppData)에만 설치된다.

💡 공무원 PC의 관리자권한 제한을 정면으로 넘는 첫 갈림길. 권한이 없으면 User Installer가 기본 선택이다.

확장(Extension)·위장 확장
VSCode Extension / Impersonation Extension

VSCode에 언어지원·포매터·Git도구·AI도우미 등을 추가하는 플러그인. 유명 도구를 흉내 낸 위장 확장이 마켓플레이스에 올라오므로, 이름만 보지 말고 게시자·검증 배지·설치 수를 대조해 설치한다.

💡 게시자 대조를 건너뛰면 자격증명·코드가 탈취될 수 있다. '진짜를 가짜로, 가짜를 진짜로' 오인하지 않는 것이 확장 설치의 핵심 안전 규칙이다.

Node.js·런타임
Node.js Runtime

브라우저 밖에서 자바스크립트를 실행해 주는 프로그램(런타임). 코드는 '글자'일 뿐이고 런타임이 있어야 동작한다. 이 플랫폼도 npm run dev로 Node 위에서 뜬다.

💡 실습 코드를 내 PC에서 직접 돌리는 실행 엔진. Node가 없으면 npm·npx·Claude Code CLI 어느 것도 쓸 수 없다.

npm·npx
npm / npx

npm은 Node에 딸려 오는 라이브러리 설치·버전 관리자(Node를 깔면 자동으로 함께 설치됨). npx는 설치하지 않고 도구를 '한 번만' 실행하는 명령으로, npm에 동봉되어 별도 설치 대상이 아니다.

💡 남이 만든 도구를 내려받고(npm), 전역설치로 PC를 어지럽히지 않고 한 번만 실행(npx)하는 두 손잡이. 관리자권한 없는 환경에서 npx·로컬 설치가 안전한 기본값이다.

nvm / nvm-windows
Node Version Manager

Node 여러 버전을 깔고 갈아 끼우는 버전 관리자. macOS/Linux는 nvm(nvm-sh, --lts 플래그 지원), Windows는 별개 프로그램인 nvm-windows(coreybutler)를 쓴다. 둘은 이름만 비슷할 뿐 서로 다른 프로그램이며 명령 문법도 다르다.

💡 관리자권한 없이 사용자 영역에 Node를 깔 수 있어 공무원 PC에 적합. 단 nvm-windows는 'lts' 키워드를 인자로 받지 않으므로 버전 번호를 확인해 설치해야 한다.

LTS(장기지원)
Long-Term Support

오래 안정적으로 유지·보수되는 릴리스 계열. 실습·업무용 기본 선택이다. 특정 숫자를 외우지 말고 'LTS 최신'을 받은 뒤 node -v로 실제 값을 확인·기록한다.

💡 버전 숫자를 문서에 못박으면 곧 낡는다. '확인·기록'으로 각자 환경의 실제 버전을 근거 삼는 습관이 이 챕터의 검증 철학이다.

package.json·node_modules·package-lock.json
package.json / node_modules / package-lock.json

package.json은 프로젝트 신분증(이름·scripts·dependencies), package-lock.json은 설치된 정확한 버전 도장, node_modules는 라이브러리 실물 폴더다. 앞 둘은 커밋하고, node_modules는 무겁고 재생성되므로 .gitignore로 제외한다.

💡 npm init으로 프로젝트를 만들고 npm install로 라이브러리를 복원하는 흐름의 뼈대. 무엇을 커밋하고 무엇을 빼는지 구분이 첫 프로젝트의 핵심.

Git·버전관리
Git / Version Control

파일 변경 이력을 스냅샷(커밋)으로 저장하고 원하는 시점으로 되돌리는 분산 버전관리 프로그램. 인터넷 없이 로컬에서도 동작한다.

💡 바이브 코딩에서 AI가 코드를 꼬아 놓아도 직전 정상 상태로 한 번에 되돌리는 안전장치. 되돌릴 수 있어야 마음 놓고 실험한다.

Git 기본 워크플로
Git Workflow (add/commit/push/pull/log)

status로 변경 확인 → add로 커밋 대상 지정 → commit으로 스냅샷 확정 → push로 원격 업로드 → pull로 최신 내려받기 → log로 되돌릴 지점 조회. clone은 원격을 로컬로 복제한다.

💡 이 6~7개 명령이 실습에서 되돌리기·협업의 전부다. main은 안정 보관용, 실험은 작업 브랜치에서.

GitHub·인증(gh/PAT)
GitHub / Authentication

Git 원격 저장소를 웹에서 호스팅하는 서비스. HTTPS 인증은 gh auth login(브라우저 인증, 복붙 없음)이 1순위이며, PAT(Personal Access Token)는 대안이다. PAT는 fine-grained·최소 권한·짧은 만료를 쓰고, 발급 화면을 닫으면 값을 다시 볼 수 없다.

💡 토큰 수작업 복붙은 유출 위험이 크므로 브라우저 인증을 우선한다. 이 우선순위가 비밀 유출 차단이라는 챕터 주제와 정합한다.

터미널·셸
Terminal / Shell

터미널은 명령을 글자로 입력하고 결과를 글자로 돌려받는 창, 셸은 그 명령을 해석·실행하는 프로그램. Windows 기본 셸은 PowerShell, macOS는 zsh다. 권장 실습 표준은 OS 무관 VSCode 통합 터미널이다.

💡 node·git·code 같은 도구는 대부분 이 검은 창에서 실행된다. 읽기·이동·목록 명령은 아무것도 망가뜨리지 않고, Ctrl+C가 언제나 탈출구임을 알면 두려움이 사라진다.

경로·기본 명령
Path & Basic Commands

경로는 파일·폴더의 주소로 절대경로(최상위부터)와 상대경로(현재 위치 기준 ./ ../)가 있고 구분자는 Windows \ vs macOS/Linux /. 최소 명령셋은 pwd(위치)·cd(이동)·ls/dir(목록)·mkdir(생성)·Ctrl+C(중단).

💡 '파일이 없다'는 오류의 대부분은 현재 위치 착각이다. 실행 전 pwd로 위치를 확인하는 습관이 오류 절반을 없앤다.

PATH·환경변수(셸)
PATH & Shell Environment Variables

PATH는 셸이 명령(node·git·code)의 실행파일을 찾아다니는 '폴더 목록' 환경변수다. 목록에 없으면 설치했어도 command not found가 난다. Windows PATH는 절대 setx로 만지지 말고 GUI(사용자 변수 → Path → 편집 → 새로 만들기)에서 항목 추가로만 편집한다.

💡 '설치는 했는데 node를 못 찾는다'의 99%가 PATH 문제다. setx는 값 길이 1024자 제한이 있어 긴 PATH를 조용히 잘라 시스템을 망가뜨리므로 PATH 편집에 쓰면 안 된다.

command not found·터미널 재시작
command not found / terminal restart

입력한 명령을 셸이 못 찾았다는 오류(오타·미설치·PATH 미반영). 환경변수는 프로세스 시작 시 한 번 읽히므로, 설치가 PATH를 바꿔도 이미 열린 터미널·앱은 옛 값을 쓴다. 새 터미널 → VSCode 재시작 → 재로그인 순으로 시도한다.

💡 이 오류의 절반 이상이 '새로 안 열어서'다. 재설치보다 재시작·재로그인이 먼저다.

프로젝트 .env.local vs 셸 환경변수
Project .env.local vs Shell Env Var

셸 환경변수(setx/export)는 컴퓨터 셸 전체에 적용되는 설정이고, .env.local은 프로젝트 폴더 안의 비밀·설정 파일(KEY=값)이다. 이 플랫폼은 .env.example을 .env.local로 복사해 API 키를 여기 넣고, 앱은 process.env로 읽는다.

💡 둘을 혼동하면 키를 엉뚱한 곳에 두어 유출된다. API 키는 셸이 아니라 프로젝트 파일(.env.local)에 두고 .gitignore로 커밋을 막는다.

API 키·토큰
API Key / Token

외부 AI 서비스가 '이 요청이 누구 것인지' 인증하는 비밀 토큰. 웹사이트 비밀번호와 같아 노출되면 남이 내 계정으로 호출하고 내 앞으로 요금을 발생시킨다. 생성 순간 딱 한 번만 전체 값이 보이므로 그 자리에서 .env.local에 저장한다.

💡 실습에서 앱이 실제로 Claude를 호출하려면 키가 필요하다. 키는 서버 전용이며 브라우저·화면·채팅·스크린샷에 절대 노출하지 않는 것이 안전의 출발점이다.

.gitignore·비밀 커밋 차단
.gitignore / Secret Commit Block

Git이 추적하지 말아야 할 파일 목록. 이 플랫폼 .gitignore는 node_modules·.env·.env.local·.env*.local·data/app.db를 이미 차단한다. .env.local이 git status에 안 보이면 정상이다.

💡 키 파일이 한 번 커밋되면 이력에 영구히 남는다. 사전 차단이 유일하게 확실한 예방이며, 이미 커밋됐다면 키 재발급이 우선이다.

비밀 유출 대응(폐기·재발급)
Secret Leak Response

키가 커밋·노출됐다고 의심되면 히스토리 삭제보다 콘솔에서 키를 즉시 폐기(revoke)·재발급하는 것이 우선이다. 한 번 push된 키는 이미 노출된 것으로 간주한다.

💡 이력에서 지워도 이미 노출된 키는 안전하지 않다. 폐기·재발급만이 확실한 조치다.

요금·사용량·PII 관리
Usage Billing & PII Safety

대부분의 AI API는 종량제(쓴 만큼 과금)라 무한루프·과다 호출이 곧 비용이다. 콘솔에서 예산 알림·소액 한도를 켜고, 실습 입력은 실제 개인정보(PII) 대신 합성 데이터(예: 홍길동, 010-0000-0000)만 쓴다.

💡 외부 AI로 전송되는 순간 PII는 유출이다. 이 플랫폼은 전송 전 서버에서 주민번호·카드번호를 차단하지만, 근본 방어선은 애초에 진짜 정보를 넣지 않는 것이다.

합성 데이터·외부 전송 고지
Synthetic Data / External-AI Notice

실제 개인정보 대신 지어낸 가짜 예시 데이터로 실습하는 원칙. 입력이 외부 AI 서버(제3자)로 전송된다는 사실을 상시 고지하고, 전송 전 PII를 스캔·차단한다.

💡 AI 코딩 도구는 하나같이 코드·프롬프트를 외부로 전송한다. '무엇을 입력하느냐'가 '어떤 도구를 쓰느냐'보다 중요하다.

AI 코딩 도구(웹AI·Cursor·확장·Claude Code)
AI Coding Tools

세 갈래다. 대화형 웹 AI(무설치·브라우저), 에디터 내장(Cursor·VSCode AI 확장), 터미널 CLI(Claude Code, 에이전트형). 설치 문턱과 자동화 힘이 반대로 움직인다.

💡 설치가 막히면 웹 AI/플랫폼 샌드박스, VSCode가 있으면 AI 확장(문턱 최저), 본격 자동화가 필요하면 Claude Code CLI로 고른다. Claude Code의 정확한 패키지명·명령은 Anthropic 공식 문서에서 확인한다.

무설치 대안(/playground)
No-install Alternative (/playground)

이 플랫폼의 브라우저 실습 화면. 교육용 서버에 API 키가 구성돼 있을 때만 실제 AI를 호출하며, 키가 없으면 503 'AI backend not configured'를 반환한다. 사용자는 개인 키를 직접 다루지 않는다.

💡 관리자권한·프록시로 설치가 막혔지만 인터넷이 되는 경우의 실습 경로. 단 서버 키가 구성돼 있을 때만 실 호출되므로, 503이 뜨면 강사·운영자에게 문의하고 개인 키를 넣지 않는다.

오프라인·망분리 경로(워크북 PDF·모의 투어)
Offline / Air-gapped Path

완전 인터넷 차단(망분리)에서는 사전 반입된 워크북 PDF만 동작한다(사이트·웹AI·마켓플레이스 모두 불가). 제한적 교육용 인터넷망이 있으면 /playground·/tour(실 호출 없는 모의 투어)도 가능하다.

💡 aiedu 플랫폼 자체가 외부 도메인의 웹앱이라 진짜 망분리 PC에서는 접속조차 안 된다. 망분리 청사에서는 워크북 PDF 사전 반입·배포가 기본 시나리오다.

설치 승인 요청·프록시
Install Approval & Proxy

정보화·전산 담당 제출용 표에 도구명·용도·공식 배포처 URL·버전 확인법·데이터 처리 범위·오프라인 대안을 채워 승인을 요청한다. 프록시는 담당이 준 공식 값만 설정하고 임의 우회는 금지한다.

💡 공무원 PC의 설치 승인 절차를 우회하지 않고 정식으로 넘는 경로. 프록시 인증정보가 .npmrc/.gitconfig에 평문 저장될 수 있으니 이 파일을 커밋·공유하지 않는다.

권한 거부·관리자권한 제한
Permission Denied

관리자권한이 없어 설치·쓰기가 거부되는 증상(EACCES, '관리자 권한 필요'). 사용자 영역 설치(User Installer·winget --scope user·nvm)로 우회하고, 안 되면 승인 요청, 그래도 안 되면 무설치로 간다.

💡 공무원 PC의 관리자권한 제한을 예외가 아니라 다수 시나리오로 전제하는 3단 대안의 첫 단추.

검증 명령·설치 점검
Verification Command / Install Check

node -v · npm -v · npx --version · git --version · code -v처럼 도구가 설치·인식됐는지 스스로 확인하는 명령. '값(버전 문자열)이 출력되면 OK'가 판정 기준이고 특정 숫자를 외우지 않는다.

💡 '된 것 같다'가 아니라 명령의 출력으로 판정한다. 이 값을 노트에 기록해 각자 환경의 실제 버전을 근거로 삼는다.

트러블슈팅
Troubleshooting

증상→원인→조치를 좁혀 해결하는 과정. command not found(PATH), 프록시·인증서 오류, 권한 거부, 버전 불일치, 확장 미표시, 포트 충돌이 대표 유형이다. 재설치는 맨 마지막이다.

💡 혼자 막혔을 때 빠져나오는 안전망. 오류는 겁줄 대상이 아니라 진단 정보이며, 대부분 표의 첫 조치로 풀린다.

에러 검색·도움 요청 위생
Error Search / Help-request Hygiene

오류 메시지를 그대로 복사해 검색·AI 질문하되, 키·개인정보·경로 속 사용자명 같은 민감정보는 지우고 묻는 습관. 공식 문서를 먼저 본다.

💡 오류를 질문하다 키를 노출하는 사고를 막는다. '이 오류가 뜬다:(메시지) / 환경:Windows, 관리자권한 없음, 사내 프록시'처럼 제약을 함께 주면 답이 정확해진다.

학습 목표

L1 입문
  • VSCode·Node·Git·터미널·API 키가 각각 무엇이고 왜 필요한지 한 문장으로 설명한다
  • 버전 숫자를 외우지 않고 검증 명령(node -v·npm -v·git --version·code -v)의 출력으로 설치를 판정한다
  • 공식 배포처 주소를 직접 입력해 위장 사이트·위장 확장을 피한다
  • API 키를 코드·채팅·스크린샷·공유문서에 붙여넣지 않아야 하는 이유를 설명한다
  • 무설치 경로(/playground)와 오프라인 경로(워크북 PDF)의 차이를 구분한다
L2 실무
  • 관리자권한이 없는 PC에 User Installer·winget --scope user·nvm으로 사용자 영역 설치를 수행한다
  • 연습 폴더를 만들고 npm init → hello.mjs → node 실행으로 첫 프로젝트를 돌린다
  • clone→status→add→commit→push→pull→log 워크플로를 1회 완주하고 gh auth login으로 인증한다
  • cp .env.example .env.local로 키 파일을 만들고 git status·git check-ignore로 커밋 차단을 검증한다
  • command not found를 PATH 문제로 진단하고 새 터미널·재로그인으로 해결한다
  • 프록시·망분리·승인 절차에 막혔을 때 승인 요청 양식을 채워 제출한다
L3 심화
  • OS별(Windows/macOS) 설치 문법 차이(nvm-windows 버전번호 vs nvm --lts, dir vs ls)를 정확히 구분해 적용한다
  • 비밀 유출 사고 시 히스토리 삭제가 아니라 키 폐기·재발급이 우선임을 판단하고 실행한다
  • 프록시 인증정보가 .npmrc/.gitconfig에 평문 저장되는 새로운 유출 경로를 인지하고 차단한다
  • 망분리(완전 차단) vs 제한적 교육용 인터넷망을 구분해 각 환경에 맞는 실습 경로를 설계한다
  • 이 챕터의 환경이 이후 계열(prompt-eng·harness-eng·orchestration-eng) 실습의 어느 지점에서 어떻게 쓰이는지 연결한다

세션 구성

회차주제시수내용산출물
1작업대와 실행 엔진 세우기 — VSCode·Node·터미널3h자가진단 3문항(관리자권한·승인절차·인터넷)으로 시작해 각자 경로를 정한다. 공식 배포처 code.visualstudio.com을 주소창에 직접 입력해 VSCode를 설치하고(Windows: User/System Installer 구분, macOS: .zip 드래그), 도움말>정보로 버전을 확인한다. 통합 터미널(Ctrl+백틱)을 열어 pwd·cd·ls/dir·mkdir 최소 명령을 손에 익히고, PATH 개념과 command-not-found→새 터미널 재시작을 실습한다. Node는 nvm(Windows는 nvm list available로 버전 확인 후 nvm install <버전>, macOS는 nvm install --lts) 또는 공식 인스톨러로 사용자 영역에 설치한다. 관리자권한이 없으면 User Installer·winget --scope user 경로를 밟고, 막히면 승인 양식을 작성한다.code -v·node -v·npm -v가 값을 출력하고, 그 값을 노트에 기록한 상태. 통합 터미널에서 mkdir로 연습 폴더를 만들 수 있음.
2첫 프로젝트와 되돌리기 — npm·Git·GitHub3h연습 폴더에서 npm init -y로 package.json을 만들고 hello.mjs에 console.log 한 줄을 저장해 node로 실행한다. package.json·package-lock.json은 커밋하고 node_modules는 .gitignore로 빼는 이유를 설명할 수 있게 한다. Git을 설치(git-scm.com, Git Bash 포함)하고 git config로 이름·이메일(노출 부담 시 noreply)을 1회 설정한다. GitHub 계정을 만들고 gh auth login(브라우저 인증, 복붙 없음) 1순위로 인증한다(PAT는 fine-grained·최소권한·짧은 만료 대안). clone→status→add→commit→push→pull→log를 1회 완주한다.node hello.mjs가 'hello node'를 출력하고, git 워크플로 1회를 완주하며, git --version과 git config --global --list가 정상 출력됨.
3안전 우선 — API 키·.env.local·보안·무설치 대안3hcp .env.example .env.local(Windows copy)로 키 파일을 만들고 자리표시자 형태(ANTHROPIC_API_KEY=여기에_콘솔에서_복사한_키_붙여넣기)를 실제 값으로 채운다. git check-ignore·git status로 .env.local이 커밋에서 차단됨을 확인하고(macOS는 chmod 600), 키를 코드·채팅·스크린샷에 넣지 않는 원칙과 예산 알림·합성 데이터·PII 차단을 익힌다. AI 코딩 도구(VSCode AI 확장→Cursor→Claude Code CLI)를 문턱 낮은 순으로 연결하되 게시자·검증 배지를 대조한다. 마지막으로 설치가 막힌 학습자는 무설치(/playground, 서버 키 구성 시)·오프라인(워크북 PDF) 경로로 동일하게 수료 판정을 받는다. 1절 마스터 체크리스트로 최종 점검한다.git status에 .env.local이 안 보이고, 마스터 체크리스트 전 항목이 값 출력 또는 체크됨. 설치가 막힌 경우 무설치·오프라인 경로로 완주 확인.

실습 랩

🧪랩 A — 첫 프로젝트 폴더 만들고 node로 실행

목표 · 터미널·Node·프로젝트 초기화를 한 흐름으로 연결해, 내 PC(또는 무설치 대안)에서 코드가 실제로 도는 것을 눈으로 확인한다.

  1. VSCode에서 통합 터미널을 연다(Ctrl+백틱). 먼저 pwd(Windows cmd는 cd만 입력)로 현재 위치를 확인한다.
  2. 홈으로 이동(Windows: cd $HOME / macOS: cd ~) 후 mkdir aiedu-practice로 연습 폴더를 만들고 cd aiedu-practice로 들어간다.
  3. npm init -y를 실행해 package.json이 생기는지 확인한다(프로젝트 신분증).
  4. VSCode로 hello.mjs 파일을 만들어 console.log('hello node') 한 줄을 저장한다(Ctrl+S).
  5. node hello.mjs를 실행해 'hello node'가 출력되는지 확인한다.
  6. (선택) npx cowsay 안녕을 실행한다. 설치 확인(y/N) 프롬프트가 뜨면 y로 진행한다. 단 프록시·망분리 환경이면 이 검증은 생략한다.

✅ 성공 기준 · 터미널에 'hello node'가 출력되고, 폴더에 package.json이 생성돼 있다. node -v·npm -v가 값을 출력한다.

↗ 확장 · npm install dayjs로 라이브러리를 설치해 node_modules와 package-lock.json이 생기는 것을 관찰하고, node_modules를 왜 커밋에서 빼는지 설명해 본다. 설치가 막히면 이 스트레치는 건너뛰고 /playground로 개념을 대체 학습한다.

🧪랩 B — VSCode + Claude Code로 첫 바이브코딩

목표 · AI 코딩 도구를 문턱 낮은 순으로 연결하고, 게시자 대조·로그인 인증 같은 안전 습관을 몸에 붙인 채 첫 AI 제안을 받아본다.

  1. 가장 문턱 낮은 경로부터: VSCode 확장 아이콘(Ctrl+Shift+X / Cmd+Shift+X)에서 AI 코딩 확장을 검색한다.
  2. 결과에서 게시자(Publisher) 이름·파란 검증 배지·설치 수 세 가지를 대조한다. 여기서 멈춰 확인하는 것이 이 랩의 핵심이다(위장 확장 회피).
  3. 공식 게시자가 맞으면 Install → 안내에 따라 로그인(브라우저) 인증을 먼저 시도한다(키를 직접 다루지 않아 유출 위험이 낮다).
  4. 아무 코드 파일을 열고 타이핑해 회색 인라인 제안이 뜨면 Tab 수락·Esc 거절을 해 본다. 사이드 AI 채팅에 합성 데이터로 질문한다.
  5. (선택·Node 준비된 경우) Claude Code CLI: node -v·npm -v로 선행 확인 후, 정확한 패키지명·설치 명령은 Anthropic 공식 문서에서 확인해 설치하고, cd로 실습 폴더에 들어가 실행한다.
  6. 설치가 원천 차단됐다면: 대화형 웹 AI 또는 /playground로 동일한 프롬프트 실습을 완주한다.

✅ 성공 기준 · 게시자·검증 배지를 대조한 뒤 확장을 설치했고, 로그인 인증으로 AI 제안(인라인 또는 채팅)을 한 번 받아봤다. 입력에 실제 PII를 넣지 않았다.

↗ 확장 · 같은 요청을 VSCode 확장·웹 AI·(가능하면) Claude Code CLL 세 경로로 각각 보내 보고, 자동화 힘과 설치 문턱이 반대로 움직인다는 것을 체감한다.

🧪랩 C — API 키를 .env.local에 안전 저장하고 커밋 차단 검증

목표 · 이 챕터의 핵심 보안 조치를 손으로 실행해, 키가 절대 커밋되지 않음을 명령의 출력으로 증명한다.

  1. VSCode에서 프로젝트 루트를 연다. 터미널에서 견본을 복사한다(Windows: copy .env.example .env.local / macOS·Linux: cp .env.example .env.local).
  2. .env.local을 열어 자리표시자를 실제 값으로 채운다. 예: ANTHROPIC_API_KEY=여기에_콘솔에서_복사한_키_붙여넣기 → 콘솔이 발급 시 보여주는 값을 그대로 붙여넣는다. 등호 양옆에 공백·따옴표를 넣지 않는다.
  3. git check-ignore .env.local을 실행한다. 파일명이 되돌아오면 정상(커밋 안 됨)이다.
  4. git status를 실행해 목록에 .env.local이 보이지 않는지 확인한다. VSCode 소스 제어 창에서도 추적 대상으로 뜨지 않으면 정상이다.
  5. macOS/Linux는 chmod 600 .env.local로 본인만 읽게 권한을 좁힌다(ls -l → -rw-------). Windows는 파일을 개인 폴더에 두고 공용·공유 폴더에 두지 않는다.
  6. 콘솔에서 예산 알림·소액 사용 한도를 켠다. 실습 입력은 합성 데이터(홍길동, 010-0000-0000)만 쓴다.

✅ 성공 기준 · git check-ignore가 .env.local을 되돌려주고, git status·소스 제어 창 어디에도 .env.local이 보이지 않는다. 키를 코드·채팅·스크린샷에 노출하지 않았다.

↗ 확장 · 실수로 .gitignore보다 먼저 git add .를 한 상황을 재현하고, git rm --cached .env.local로 추적만 해제한 뒤 git status로 사라짐을 확인한다. 만약 키가 이미 push됐다면 '삭제'가 아니라 '콘솔에서 폐기·재발급'이 먼저임을 서술한다.

운영체제별 설치 순서

🪟 Windows

  1. 자가진단: 관리자권한·설치 승인·인터넷(망분리) 여부를 먼저 확인한다.
  2. VSCode: code.visualstudio.com 주소창 직접 입력 → User Installer(권한 없으면) 또는 System Installer 다운로드 → 설치 시 'PATH에 추가' 체크 → 도움말>정보로 버전 확인. 대안 winget install -e --id Microsoft.VisualStudioCode --scope user.
  3. 한국어화·확장: Extensions(Ctrl+Shift+X)에서 Korean Language Pack·Prettier·ESLint·GitLens·EditorConfig를 게시자·검증 배지·설치 수 대조 후 설치.
  4. Node: nvm-windows(coreybutler) 설치 → 새 셸 → nvm list available로 LTS 계열 최신 버전 번호 확인 → nvm install <버전> → nvm use <버전>. 대안: nodejs.org LTS .msi 인스톨러.
  5. 검증: 새 터미널에서 node -v·npm -v가 값을 출력하는지 확인·기록.
  6. 첫 프로젝트: 연습 폴더에서 npm init -y → hello.mjs 저장 → node hello.mjs.
  7. Git: git-scm.com에서 Git for Windows(Git Bash 포함) 설치, 기본 브랜치 main, 에디터 VSCode. 권한 없으면 'Install for me only' 또는 winget install --id Git.Git -e --scope user.
  8. Git 설정: git config --global로 user.name·user.email(노출 부담 시 noreply) 1회 설정 → git --version 검증.
  9. GitHub 인증: gh auth login(브라우저 인증) 1순위. PAT는 fine-grained·최소 scope·짧은 만료 대안(화면 닫으면 값 못 봄).
  10. API 키: copy .env.example .env.local → 자리표시자를 콘솔 발급값으로 채움 → git check-ignore .env.local·git status로 커밋 차단 확인 → 개인 폴더 보관.
  11. 막히면: User 설치·winget --scope user → 승인 요청 양식 제출 → 무설치(/playground, 서버 키 구성 시)·오프라인(워크북 PDF). 완전 망분리는 반입 워크북 PDF만 유효.

🍎 macOS

  1. 자가진단: 관리자권한·설치 승인·인터넷(망분리) 여부를 먼저 확인한다.
  2. VSCode: code.visualstudio.com에서 macOS .zip 다운로드 → 압축 해제 → Applications 폴더로 드래그 → 실행. 대안 brew install --cask visual-studio-code.
  3. code 명령 등록: 명령 팔레트(Cmd+Shift+P)에서 'Shell Command: Install ...'을 부분 검색해 실행(PATH 등록). code -v는 이 등록 뒤에 확인.
  4. 한국어화·확장: Extensions(Cmd+Shift+X)에서 Korean Language Pack·Prettier·ESLint·GitLens·EditorConfig를 게시자·검증 배지 대조 후 설치.
  5. Node: nvm(nvm-sh) 공식 설치 스크립트 → 새 셸(zsh) → nvm install --lts → nvm use --lts. 대안: nodejs.org LTS .pkg 인스톨러.
  6. 검증·첫 프로젝트: 새 터미널에서 node -v·npm -v 확인·기록 → npm init -y → hello.mjs 저장 → node hello.mjs.
  7. Git: 터미널에 git --version 입력 시 Xcode CLT 설치 팝업, 또는 brew install git → git config --global로 신원 설정.
  8. GitHub 인증: gh auth login(브라우저 인증) 1순위. PAT는 fine-grained·최소권한·짧은 만료 대안.
  9. API 키: cp .env.example .env.local → 자리표시자를 콘솔 발급값으로 채움 → git check-ignore·git status로 차단 확인 → chmod 600 .env.local(-rw-------).
  10. 막히면: 사용자 권한 설치·Homebrew → 승인 요청 → 무설치(/playground, 서버 키 구성 시)·오프라인(워크북 PDF). 완전 망분리는 반입 워크북 PDF만 유효.

설치 점검 체크리스트

  • VSCode 설치: 도움말>정보(Help>About)에 버전이 보이고, PATH 등록 뒤 code -v가 값을 출력한다 (통합 터미널은 Ctrl+백틱으로 연다)
  • Node: 새 터미널에서 node -v가 버전 문자열을 출력한다(값을 노트에 기록)
  • npm: npm -v가 값을 출력한다
  • npx: npx --version이 값을 출력한다 (npx는 npm 설치 시 함께 제공되며 별도 설치 대상이 아님)
  • Git: git --version이 버전 문자열을 출력한다
  • Git 신원: git config --global user.name / git config --global user.email이 값을 출력한다
  • 확장: code --list-extensions에 Korean Language Pack·Prettier·ESLint·GitLens·EditorConfig가 있고, 각 게시자·검증 배지를 마켓플레이스에서 대조했다
  • GitHub 인증: gh auth login 또는 (대안) PAT로 인증을 마쳤다
  • Git 워크플로: clone→status→add→commit→push→pull→log를 1회 완주했다
  • 첫 프로젝트: npm init -y로 package.json이 생기고 node hello.mjs가 'hello node'를 출력한다
  • 비밀 차단: git check-ignore .env.local이 파일명을 되돌려주고, git status·소스 제어 창에 .env.local이 보이지 않는다
  • 권한·PII: (mac/Linux) chmod 600 .env.local 적용 / (Windows) 개인 폴더 보관. 콘솔에서 예산 알림·소액 한도를 켜고 실습 입력은 합성 데이터만 쓴다
  • (설치가 막힌 경우) /playground(서버 키 구성 시)·/tour·워크북 PDF 중 내 환경에 맞는 대체 경로를 확보했다(완전 망분리는 반입 워크북 PDF)

트러블슈팅

증상해결
command not found / '용어가 인식되지 않습니다'(node·git·code)PATH 미반영이 대부분. ① 새 터미널 열기 → ② VSCode 완전 종료 후 재실행 → ③ Windows 로그아웃·재로그인/재부팅. 재설치는 맨 마지막.
nvm-windows에서 nvm install lts / nvm use lts가 동작하지 않음nvm-windows는 'lts' 키워드를 인자로 받지 않는다. nvm list available로 LTS 계열 최신 버전 번호를 확인 → nvm install <버전> → nvm use <버전>. (macOS/Linux nvm만 nvm install --lts 지원.)
타임아웃 / ECONNREFUSED / UNABLE_TO_GET_ISSUER(인증서 오류)사내 프록시·인증서 문제. 정보화 담당의 공식 프록시 주소·사내 CA로만 npm/git/환경변수를 설정한다. 프록시 URL에 계정·비밀번호를 넣게 되면 .npmrc/.gitconfig를 커밋·공유하지 말 것. strict-ssl 임의 해제·개인 핫스팟 우회는 보안규정 위반.
EACCES / '관리자 권한이 필요합니다' (설치 거부)User Installer·winget --scope user·nvm 사용자 설치로 우회 → 안 되면 승인 요청 양식 제출 → 그래도 안 되면 무설치(/playground) 또는 오프라인(워크북 PDF).
macOS에서 code 명령이 없다고 나옴명령 팔레트(Cmd+Shift+P)에서 'Shell Command: Install ...'을 부분 검색해 실행하면 PATH에 등록된다. 그 뒤 code -v로 확인.
확장이 안 뜨거나 동작 안 함워크스페이스 신뢰(Trust) 허용 → VSCode 재시작. 게시자·검증 배지를 다시 대조해 위장 확장이 아닌지 확인.
port ... in use / EADDRINUSE (개발서버 포트 충돌)초보자는 PC 재시작 또는 다른 포트로 실행까지만. (고급/담당자용) netstat|findstr(win)·lsof(mac)로 PID를 찾아 종료 — 엉뚱한 PID 종료는 다른 작업을 잃으니 주의.
/playground에서 503 'AI backend not configured' 화면이 뜸교육용 서버에 API 키가 구성돼 있지 않은 상태. 강사·운영자에게 문의하고 개인 키를 절대 넣지 말 것. 대신 /tour(모의) 또는 워크북 PDF로 완주.
망분리 PC에서 aiedu 사이트·웹AI·마켓플레이스가 아예 안 열림정상이다. 이들은 모두 인터넷 연결이 전제다. 완전 차단 청사에서는 사전 반입한 워크북 PDF만 유효 → 청사에 PDF를 미리 반입·배포한다. 제한적 교육용 인터넷망이 있으면 /playground·/tour 가능.
실수로 .env.local(키)을 커밋·push했다히스토리 삭제가 아니라 콘솔에서 해당 키 즉시 폐기(revoke)·재발급이 먼저다. 새 키를 .env.local에만 넣고 .gitignore 차단을 재확인한 뒤, 이력 정리는 그다음. 커밋 전이면 git rm --cached .env.local로 추적만 해제.

흔한 실패 · 안티패턴

  • nvm-windows에 'nvm install lts'/'nvm use lts'를 그대로 입력한다. nvm-windows는 'lts' 키워드를 인자로 받지 않는다 → nvm list available로 LTS 계열 최신 버전 번호를 확인한 뒤 nvm install <버전>·nvm use <버전>. macOS/Linux nvm만 nvm install --lts를 지원한다.
  • 확장을 이름·아이콘만 보고 설치한다 → 게시자 ID·검증 배지·설치 수를 반드시 현장에서 대조한다. 게시자명은 변동 가능하므로 특정 문자열을 맹신하지 말고 마켓플레이스에서 공식 게시자인지 직접 확인한다.
  • Windows PATH를 setx로 편집한다 → setx는 값 1024자 제한으로 긴 PATH를 조용히 잘라 다른 도구를 깨뜨린다. PATH는 반드시 GUI(사용자 변수 → Path → 편집 → 새로 만들기)에서 항목 추가로만 편집한다. setx는 PATH 외 신규 변수에만 쓴다.
  • API 키를 코드에 하드코딩하거나 AI 채팅·스크린샷·공유문서에 붙여넣는다 → 커밋·공유 즉시 유출이다. 키는 .env.local에만 두고 .gitignore로 차단하며, 코드는 process.env로 변수 이름만 참조한다.
  • 키가 커밋·push된 뒤 히스토리 삭제만 하고 안심한다 → 한 번 노출된 키는 폐기·재발급이 유일하게 확실한 조치다. 삭제는 그다음이다.
  • 무설치 /playground를 만능으로 여긴다 → /playground는 교육용 서버에 API 키가 구성돼 있을 때만 실 호출된다. 키가 없으면 503 'AI backend not configured'가 뜬다. 이 화면이 나오면 강사·운영자에게 문의하고 개인 키를 넣지 않는다.
  • 망분리(완전 차단) PC에서 /playground·웹AI·마켓플레이스가 열릴 것으로 기대한다 → aiedu 사이트·claude.ai·vscode.dev·마켓플레이스 모두 인터넷 연결이 전제라 접속조차 안 된다. 완전 차단 청사에서는 사전 반입한 워크북 PDF만 유효하다.
  • 프록시 URL(http://user:pass@host:port)에 계정·비밀번호를 넣어 .npmrc/.gitconfig에 평문 저장한다 → 새로운 유출 경로다. 이 파일들을 커밋·공유하지 말고, 가능하면 정보화 담당이 시스템 프록시를 구성하게 한다. 화면공유·스크린샷 시 프록시 URL 노출도 주의한다.
  • PAT를 수작업 복붙하는 것을 최우선 인증으로 삼는다 → 복붙은 유출 위험이 크다. gh auth login(브라우저 인증, 복붙 없음)이 1순위, PAT는 대안이다. PAT를 쓸 땐 fine-grained·최소 scope·짧은 만료를 쓰고, 발급 화면을 닫으면 값을 다시 못 본다.
  • 설치 직후 열려 있던 터미널에서 검증하고 command not found를 오류로 오인한다 → 환경변수는 프로세스 시작 시 한 번 읽힌다. 새 터미널을 열거나 재로그인해야 PATH가 반영된다.
  • macOS에서 code 명령이 없다고 재설치한다 → 명령 팔레트(Cmd+Shift+P)에서 'Shell Command: Install ...'을 부분 검색해 실행하면 등록된다. code -v는 PATH 등록을 마친 뒤에 확인한다.
  • 포트 충돌(EADDRINUSE)에서 곧바로 netstat·lsof로 PID를 찾아 프로세스를 죽인다 → 엉뚱한 PID를 종료하면 다른 작업을 잃는다. 초보자는 PC 재시작 또는 다른 포트로 실행까지만 한다(PID 종료는 고급/담당자용).

읽을거리 · 도구

  • VSCode 공식 사이트 (code.visualstudio.com) — VSCode 다운로드·설치 문서. User/System Installer 구분과 Setup 가이드. (반드시 주소창에 직접 입력해 접속. 검색 결과 상단 광고·유사 도메인은 위장 사이트일 수 있다.)
  • Node.js 공식 사이트 (nodejs.org) — LTS 인스톨러(Windows .msi / macOS .pkg) 배포. nvm이 막힐 때의 공식 대안. (버전 숫자를 못박지 말고 'LTS 최신'을 받은 뒤 node -v로 실제 값을 확인·기록한다.)
  • nvm-windows (github.com/coreybutler/nvm-windows) — Windows용 Node 버전 관리자. README에 실제 명령 문법(nvm list available·nvm install <버전>). (macOS/Linux의 nvm(nvm-sh)과 이름만 같고 문법이 다르다. 'lts' 키워드를 인자로 받지 않는다.)
  • Git 공식 사이트 (git-scm.com) — Git for Windows(Git Bash 포함) 다운로드와 설치 옵션(기본 브랜치 main, 에디터 VSCode). (macOS는 git --version 실행 시 Xcode CLT 설치 팝업 또는 brew install git.)
  • Anthropic Console·공식 문서 — API 키 발급, 예산 알림·사용 한도 설정, Claude Code CLI의 정확한 패키지명·설치 명령·최소 Node 요건. (패키지명·명령을 임의로 지어내지 말고 반드시 공식 문서에서 확인한다. 키 전체 값은 생성 순간 한 번만 보인다.)
  • 이 플랫폼 무설치 경로 — /playground · /tour · 워크북 PDF — 설치가 막혔을 때의 실습 대안. /playground(서버 키 구성 시 실 호출), /tour(모의 투어), public/book/aiedu-workbook.pdf(오프라인). (/playground는 서버에 API 키가 구성돼 있을 때만 실 호출된다. 완전 망분리에서는 사전 반입한 워크북 PDF만 동작한다.)

다른 계층과의 연결

프롬프트 엔지니어링이 챕터가 세운 VSCode·터미널·API 키(또는 무설치 /playground) 위에서, 프롬프트 4요소(역할·맥락·형식·조건)를 직접 짜서 sandbox에 넣어 실행·채점한다. 환경이 준비돼야 프롬프트를 '실행'해 볼 수 있다.
컨텍스트 엔지니어링.env.local로 안전하게 다룬 키와 프로젝트 폴더 구조가, 컨텍스트(파일·문서)를 프롬프트에 주입하는 실습의 재료가 된다. package.json·node_modules 구분이 컨텍스트 범위 설계의 기초다.
하네스 엔지니어링Node·npm·npm run 스크립트가 하네스(반복 자동화 코드)를 실행하는 엔진이다. 예산 알림·maxTokens 상한 습관이 하네스의 반복 호출 비용을 통제하는 안전장치로 이어진다.
헤르메스 엔지니어링Git의 되돌리기(commit/log)와 .gitignore 비밀 차단이, 도구 간 메시지·산출물을 주고받는 헤르메스 실습에서 산출물 버전관리·비밀 격리의 기반이 된다.
오케스트레이션·에이전트 엔지니어링Claude Code CLI 같은 에이전트형 도구와 터미널·환경변수 다루기가, 여러 도구·에이전트를 엮는 오케스트레이션의 실행 계층이다. 자동 실행·자동 커밋 주의가 오케스트레이션 안전 규칙으로 확장된다.
메타 엔지니어링검증 명령으로 '값이 나오면 OK'라 판정하는 습관과 트러블슈팅 절차가, 프롬프트·시스템 자체를 개선·평가하는 메타 엔지니어링의 관찰·검증 태도로 이어진다.

🤖 AI 해설

AI 해설은 이 항목의 근거에 기반한 보조 자료입니다. 중요한 수치·사실은 원문 출처로 검증하세요.