66·67일차 Ollama 제외(OpenAI API 키만) 반영, 67일차 하루 수강 안내 LECTURE-67.md 추가

This commit is contained in:
mcchae committed 2026-10-18 14:28:57 +09:00
1 parent bf55eaf772
commit 1b3ec068fb
14 files changed
+226 -23

No files matched your search

+2 -2
View File
@@ -21,10 +21,10 @@
| 항목 | 값 |
| --- | --- |
| n8n | 2.42.6, 65일차 공식 설치 `~/day65-n8n` (Docker 프로젝트 `day65-n8n`, 컨테이너 보통 `day65-n8n-n8n-1`), 브라우저 http://localhost:5678 |
| n8n 켜고 끄기 | `~/aio-01d4-stu/Last3Mon/65/n8n`에서 `docker compose start/stop` (사람이 함) |
| n8n 켜고 끄기 | `~/aio-01d4-stu/Last3Mon/65/n8n`에서 `docker compose start/stop` (사람이 함, Ollama 컨테이너는 없음) |
| 게시된 웹훅 주소 | 밖에서 `http://localhost:5678/webhook/<path>`, **n8n 안에서도** `http://localhost:5678/webhook/<path>` (같은 컨테이너) |
| OpenAI Credential | id `openAiCourse0001`, name `OpenAI (.env)`, 모델 `gpt-4.1-mini` |
| Ollama Credential (대체) | id `ollamaLocal0001`, name `Ollama local`, 모델 `qwen2.5:3b` |
| 다른 Credential | 쓰지 않음 (Ollama 등 없음, LLM은 모두 위 OpenAI Credential) |
| 데이터 API | 오늘은 쓰지 않음 (67일차부터) |
## 3. 오늘 만드는 것의 계약 (요청에 다른 말이 없으면 이대로)
+1 -1
View File
@@ -66,7 +66,7 @@ Last3Mon/66/
[실습 준비](../../Lecture/66/00-DAY66-PREP.md)를 끝내 주세요 (CLI 코딩 에이전트 설치·로그인 포함). 요약:
```bash
cd ~/aio-01d4-stu/Last3Mon/65/n8n && docker compose start # 65일차 n8n (설치 폴더 ~/day65-n8n)
cd ~/aio-01d4-stu/Last3Mon/65/n8n && docker compose start # 65일차 n8n (Ollama는 쓰지 않음 · 처음 한 번 PREP 1절대로 끄기)
cd ~/aio-01d4-stu/Last3Mon/66 && uv run tools/flow.py doctor # 마지막 줄 ready
```
+1 -2
View File
@@ -83,14 +83,13 @@ RECOMMENDED = {
"n8n-nodes-base.httpRequestTool": 4.2,
"@n8n/n8n-nodes-langchain.agent": 3.1,
"@n8n/n8n-nodes-langchain.lmChatOpenAi": 1.2,
"@n8n/n8n-nodes-langchain.lmChatOllama": 1,
"@n8n/n8n-nodes-langchain.vectorStoreInMemory": 1.3,
"@n8n/n8n-nodes-langchain.embeddingsOpenAi": 1.2,
"@n8n/n8n-nodes-langchain.documentDefaultDataLoader": 1.1,
}
USES_DATA_API = False # day 66 labs do not call the data API
AGENT_HOOKS: tuple[str, ...] = () # no ready-made agents on day 66
COURSE_CREDENTIALS = {"openAiCourse0001": "OpenAI (.env)", "ollamaLocal0001": "Ollama local"}
COURSE_CREDENTIALS = {"openAiCourse0001": "OpenAI (.env)"} # OpenAI only from day 66 (no Ollama)
CONNECTION_TYPES = {"main", "ai_tool", "ai_languageModel", "ai_memory", "ai_outputParser", "ai_embedding", "ai_document"}
SECRET = re.compile(r"\bsk-[A-Za-z0-9_-]{16,}")
+2 -2
View File
@@ -20,10 +20,10 @@
| 항목 | 값 |
| --- | --- |
| n8n | 2.42.6, 65일차 공식 설치 `~/day65-n8n` (Docker 프로젝트 `day65-n8n`, 컨테이너 보통 `day65-n8n-n8n-1`), 브라우저 http://localhost:5678 |
| n8n 켜고 끄기 | `~/aio-01d4-stu/Last3Mon/65/n8n`에서 `docker compose start/stop` (사람이 함) |
| n8n 켜고 끄기 | `~/aio-01d4-stu/Last3Mon/65/n8n`에서 `docker compose start/stop` (사람이 함, Ollama 컨테이너는 없음) |
| 게시된 웹훅 주소 | `http://localhost:5678/webhook/<path>` (`flow.py push`가 게시까지 한다) |
| OpenAI Credential | id `openAiCourse0001`, name `OpenAI (.env)`, 모델 `gpt-4.1-mini` |
| Ollama Credential (대체) | id `ollamaLocal0001`, name `Ollama local`, 모델 `qwen2.5:3b` |
| 다른 Credential | 쓰지 않음 (Ollama 등 없음, LLM은 모두 위 OpenAI Credential) |
| 데이터 API (n8n 안에서) | `http://data-api:8800` (n8n 노드에서는 반드시 이 주소. `localhost` 아님) |
| 데이터 API (터미널에서) | `http://localhost:8800` |
+202
View File
@@ -0,0 +1,202 @@
# 67일차 수강 안내 · 수업 준비부터 마칠 때까지
- 일자: 2026-10-19 (월) · 67일차
- 주제: 바이브 코딩으로 만드는 Agent·Tool·데이터 연계 워크플로우와 결과 검증
- 실습 폴더: [Last3Mon/67](README.md) · 강의 자료: [Lecture/67](../../Lecture/67/README.md)
- 환경: 65일차 n8n 2.42.6 + **OpenAI API 키만**(`gpt-4.1-mini`, Credential `OpenAI (.env)`) + 데이터 API + CLI 코딩 에이전트 하나 (Codex · Claude Code · Antigravity). **Ollama는 쓰지 않습니다.**
- 이 문서: 오늘 하루 내가 할 일을 수업 준비부터 마칠 때까지 순서대로 모은 수강 안내입니다. 수업 중에도 띄워 두고 어디까지 왔는지 확인하세요.
```mermaid
flowchart LR
P["전날<br/>준비"] --> M["아침<br/>켜기 · doctor"] --> L1["1~2교시<br/>Lab 01<br/>Agent · FAQ Tool"] --> L2["3~4교시<br/>Lab 02<br/>데이터 연계"] --> L3["5~6교시<br/>Lab 03<br/>검증 · 고치기"] --> V["7~8교시<br/>tman"] --> E["마친 뒤<br/>남기기 · 68 준비"]
```
## 0. 하루 한눈에
| 교시 | 시간 | 할 일 | 문서 | 끝났다는 표시 |
| --- | --- | --- | --- | --- |
| 전날 | 약 20분 | 자료 받기 · n8n · 데이터 API · CLI 에이전트 · doctor | [PREP](../../Lecture/67/00-DAY67-PREP.md) | `ready` |
| 1 | 09:00~09:50 | 개요 · 1단계 강의 (워크플로우는 JSON, AGENTS.md, 요청문 5요소, Agent와 Tool) | [개요](../../Lecture/67/00-DAY67-OVERVIEW.md), [1단계](../../Lecture/67/01-STAGE1-VIBE-N8N-AGENT-AND-TOOL.md) | |
| 2 | 10:00~10:50 | Lab 01 예제 1 · 2 · 과제 | [Lab 01](LAB-01-Q-AGENT-AND-FIRST-TOOL.md) | `lab01-challenge` 통과 |
| 3 | 11:00~11:50 | 2단계 강의 · Lab 02 예제 1 · 2 | [2단계](../../Lecture/67/02-STAGE2-DATA-TOOLS.md), [Lab 02](LAB-02-Q-DATA-TOOLS.md) | `lab02` 통과 |
| 4 | 12:00~12:50 | Lab 02 과제 35분 · 풀이 | Lab 02 | `lab02-challenge` 통과 |
| - | 13:00~14:00 | 점심 | | |
| 5 | 14:00~14:50 | 3단계 강의 · Lab 03 예제 1 · 2 | [3단계](../../Lecture/67/03-STAGE3-VERIFY-AND-FIX.md), [Lab 03](LAB-03-Q-VERIFY-AND-FIX.md) | `lab03` 통과 |
| 6 | 15:00~15:50 | Lab 03 과제 40분 · 풀이 | Lab 03 | 내 케이스 5개 · 보고서 |
| 7 | 16:00~16:50 | 바이브 코딩 `tman` 각자 만들기 | [VIBE-Q-TMAN](VIBE-Q-TMAN.md) | R1~R4 · `pytest` |
| 8 | 17:00~17:50 | 발표 · 강사 정리 · 강사 바이브 코딩 · 팁 · 68일차 예고 | [진행](../../Lecture/67/04-VIBE-CODING.md) | |
## 1. 전날 준비 (약 20분, 10/18 일요일 밤까지)
### 1.1 자료 받기
```bash
cd ~/aio-01d4-stu && git pull
```
### 1.2 n8n과 데이터 API 켜기 (Ollama는 끔)
```bash
sudo systemctl disable --now ollama 2>/dev/null # WSL에 설치한 Ollama가 있으면 끄고 자동 시작도 끔
cd ~/aio-01d4-stu/Last3Mon/65/n8n
docker compose rm -sf ollama # Ollama 컨테이너가 있으면 지움 (없으면 그냥 지나감)
docker compose start
cd ~/aio-01d4-stu/Last3Mon/67/data-api
docker compose up -d --force-recreate # 데이터 파일 위치가 바뀌었으므로 다시 만듦
curl -s localhost:8800/health # {"status": "ok"}
```
- 66일차부터 LLM은 **OpenAI API 키**(`Last3Mon/.env`) 하나로 씁니다. Ollama는 켤 필요가 없습니다.
- n8n은 `docker compose start`로 켭니다. `up -d`를 쓰면 지운 Ollama 컨테이너가 다시 생깁니다.
### 1.3 CLI 코딩 에이전트 (66일차에 했으면 확인만)
```bash
codex --version # 또는 claude --version, agy --version
```
처음 실행해 브라우저 로그인을 끝내고, "안녕"에 답이 오는지 봅니다.
### 1.4 준비 확인
```bash
cd ~/aio-01d4-stu/Last3Mon/67
uv run tools/flow.py doctor # 마지막 줄 ready
```
### 1.5 미리 읽기 (선택, 5분)
[PREP 4절](../../Lecture/67/00-DAY67-PREP.md): 워크플로우는 JSON 파일, Agent와 Tool.
### 준비물
노트북과 충전기, WSL의 Docker, Windows Terminal(WSL) 창 두 개, 브라우저 (http://localhost:5678).
## 2. 수업 당일 아침 (09:00 전)
1. 노트북을 껐다 켰다면 1.2를 다시 합니다 (같은 명령 그대로).
2. 터미널 두 개를 엽니다. 둘 다 `cd ~/aio-01d4-stu/Last3Mon/67`.
| 터미널 | 하는 일 |
| --- | --- |
| ① 에이전트 | `codex` (또는 `claude`, `agy`) 실행. 내가 쓴 요청문을 보냄 |
| ② 확인 | `push` · `call` · `test`를 **내가** 실행 |
3. 터미널 ②에서 `uv run tools/flow.py doctor` → `ready`.
4. `my-work/PROMPTS.md`를 만들어 둡니다 (오늘 쓴 요청문을 모으는 곳).
## 3. 실습할 때마다 같은 순서
```mermaid
flowchart LR
A["① 기대 결과 읽기<br/>cases/*.json"] --> B["② 요청문을<br/>메모장에 먼저"] --> C["③ 에이전트에게<br/>보내기"] --> D["④ 에이전트가<br/>my-work · check"] --> E["⑤ 내가<br/>push · test"]
E -->|✘| F["⑥ 실패 줄 · 보고서 경로를<br/>그대로 붙여 주기"] --> C
E -->|✔| G["⑦ PROMPTS.md에<br/>요청문 기록"]
```
- 요청문 다섯 가지: ① 파일 ② 입력 ③ 처리 ④ 결과 모양 ⑤ 기대 결과(테스트 파일).
- 한 번에 한 가지 변화만 요청합니다. 에이전트가 "끝났다"고 해도 **내가 push·test로 확인**합니다.
- 막히면 Lab 문서의 `▶`를 하나씩 펼칩니다. 그래도 안 되면 `reference/`의 파일로 이어 갑니다 (각 Lab의 "막혔을 때").
- 에이전트가 명령 실행·파일 쓰기 허락을 물으면 무엇을 하는지 읽고 허용합니다.
## 4. 1~2교시 · 1단계 · Agent와 첫 Tool
1교시는 강의를 듣습니다. 2교시에 [Lab 01](LAB-01-Q-AGENT-AND-FIRST-TOOL.md)을 합니다 (약 40분).
| 순서 | 만들 것 | 파일 · 웹훅 | 확인 (터미널 ②) |
| --- | --- | --- | --- |
| 예제 1 (10분) | Tool 없는 Agent, 짧은 한국어 답 | `my-work/chat.json` · `my-chat` | `push my-work/chat.json` → `call my-chat requests/faq-vpn.json`, `call my-chat requests/off-topic.json` |
| 예제 2 (15분) | FAQ 검색 Tool을 먼저 쓰고 그 결과로만 답, `tools_used` | `my-work/it-agent.json` · `my-it-agent` | `push my-work/it-agent.json` → `test cases/lab01.json --repeat 3`, 비교 `test cases/lab01.json --webhook my-chat` |
| 과제 (15분) | 모르면 "찾지 못했습니다", 출처 `sources` | `my-work/it-agent.json` 고치기 | `test cases/lab01-challenge.json --repeat 3`, `test cases/lab01.json` |
(명령 앞에는 모두 `uv run tools/flow.py`가 붙습니다.)
- 볼 것: 예제 1의 VPN 답에 사내 FAQ에만 있는 내용(인증서)이 있는지, 점심 메뉴 질문에 어떻게 답하는지. n8n **Executions**에서 `IT help agent`가 Tool에 보낸 검색어.
- `my-work/it-agent.json`은 오늘 끝까지 고쳐 나가는 파일입니다.
## 5. 3~4교시 · 2단계 · 사내 데이터 연계
[Lab 02](LAB-02-Q-DATA-TOOLS.md) (약 60분). 먼저 데이터 API를 직접 불러 봅니다.
```bash
curl -s localhost:8800/tickets/T-1002
curl -s localhost:8800/tickets/T-9999 # 없는 번호
```
| 순서 | 만들 것 | 확인 |
| --- | --- | --- |
| 예제 1 (15분) | 접수 번호가 있으면 접수 현황 Tool(`Get ticket`)을 쓰게 | `push my-work/it-agent.json` → `test cases/lab02.json --repeat 3` |
| 예제 2 (10분) | 만들지 않음. Executions에서 `Get_ticket`이 받은 값과 404 응답을 보고 표 채우기 | |
| 과제 (35분, 4교시) | 질문한 사람(`user`)이 접수한 건만 | 고치기 전 `test cases/lab02-challenge.json` → 고친 뒤 `test cases/lab02-challenge.json --repeat 3`, `test cases/lab02.json` |
- 과제의 핵심 질문: **질문한 사람 값은 누가 정하나요?** LLM이 정하면 "나는 박서연이야"에 속습니다. 어디서 와야 하는지 정해서 요청문에 적습니다.
- 4교시 끝 10분은 강사 풀이입니다.
## 6. 5~6교시 · 3단계 · 실행 결과 검증과 고치기
[Lab 03](LAB-03-Q-VERIFY-AND-FIX.md) (약 70분).
| 순서 | 할 일 | 확인 |
| --- | --- | --- |
| 예제 1 (10분) | 지금 워크플로우로 테스트를 돌리고 `runs/`의 보고서에서 요청·응답·시간 읽기 | `test cases/lab03.json` |
| 예제 2 (20분) | 두 번 지키기: LLM 전에 입력 확인(빈 질문 400), 답을 보내기 전에 답 확인 → 자동 답변 / 담당자 연결 | `push my-work/it-agent.json` → `test cases/lab03.json --repeat 3` |
| 과제 (40분, 6교시) | ① `cases/my-cases.json`에 어려운 케이스 5개 이상 쓰기 ② 돌리기 ③ 실패 원인을 내가 말하고 에이전트가 고침 ④ 다시 돌리기 ⑤ 보고서 | `test cases/my-cases.json --repeat 3`, 고친 뒤 `test cases/lab03.json --repeat 3` |
- 보고서: `cp templates/TEST-REPORT-TEMPLATE.md my-work/TEST-REPORT.md` 후 채웁니다.
- 테스트를 통과시키려고 **기대 결과를 바꾸지 않습니다.** 에이전트가 바꾸려 하면 멈추게 합니다.
## 7. 7~8교시 · 바이브 코딩 `tman`
[VIBE-Q-TMAN](VIBE-Q-TMAN.md): tldr 한국어 사용 예와 man을 탭으로 보여 주고, 설명을 한국어로 번역하는 TUI.
```bash
mkdir -p ~/vibe/tman && cd ~/vibe/tman
git init
codex # 또는 claude, agy
```
| 시간 | 단계 | 확인 |
| --- | --- | --- |
| 16:00~16:03 | 0. 준비 (위 명령) | |
| 16:03~16:13 | 1. 글자로 출력 (R1) | `tman tar`에 한국어 사용 예 |
| 16:13~16:28 | 2. TUI와 탭 (R2 · R4) | man 탭, 입력칸으로 다른 명령 |
| 16:28~16:43 | 3. 번역과 캐시 (R3) | 번역 전 아래 `export` 한 줄 |
| 16:43~16:50 | 4. 정리 | `uv run pytest -q`, `PROMPTS.md` |
```bash
export OPENAI_API_KEY=$(grep '^OPENAI_API_KEY=' ~/aio-01d4-stu/Last3Mon/.env | cut -d= -f2-) # 3단계, 키를 화면에 출력하지 않음
```
- 한 단계씩 요청하고, 매번 **직접 실행**하고, 단계마다 `git commit`.
- 8교시: 1~2명 발표(잘 먹힌 요청문 / 안 먹힌 요청문 / 에이전트가 틀린 곳), 강사 정리 · 시연 · 팁, 68일차 예고.
## 8. 마친 뒤
| 할 일 | 이유 |
| --- | --- |
| `my-work/PROMPTS.md`, `TEST-REPORT.md` 정리 | 내일 옆 사람과 비교, 최종 프로젝트 재료 |
| **`my-work/it-agent.json` 지우지 않기** | 68일차 7교시 `tflow`의 입력 |
| `~/vibe/turl`, `~/vibe/tman` 지우지 않기 | 이후 바이브 코딩에서 다시 씀 |
| n8n · 데이터 API는 켜 두어도 됨 | 끄려면 `docker compose stop` (각 폴더에서) |
| 68일차 준비: [00-DAY68-PREP](../../Lecture/68/00-DAY68-PREP.md) 1~3절 | 두 Agent 게시 · doctor `ready` |
## 9. 막혔을 때 (오늘 공통)
| 증상 | 할 일 |
| --- | --- |
| `network day65-n8n_default not found` | n8n이 꺼져 있음. 1.2의 n8n부터 |
| `.../day65-n8n/compose.yml: no such file` | n8n을 홈이 아닌 곳에 설치함. `Last3Mon/65/n8n/.env`에 `N8N_HOME=<설치 폴더>` |
| doctor의 credential ✘ | `cd ~/aio-01d4-stu/Last3Mon/65/n8n && bash register-credentials.sh` |
| `check`에 ✘ | 그 줄을 그대로 에이전트에게 붙여 주기 |
| `push` 뒤 `call`이 404 | 몇 초 뒤 다시, 계속이면 doctor |
| `status 500`이 30초 넘게 | OpenAI 쪽 일시 오류일 수 있음. 한 번 더 |
| 같은 곳을 3번 고쳐도 실패 | 요청을 더 작게 나누거나 `reference/`의 파일을 `my-work/`로 복사해 이어 가기 |
## 확인
- [ ] 전날 `doctor` → `ready`
- [ ] Lab 01: `lab01`, `lab01-challenge` 통과
- [ ] Lab 02: `lab02`, `lab02-challenge` 통과
- [ ] Lab 03: `lab03` 통과, 내 케이스 5개 이상, `TEST-REPORT.md`
- [ ] `tman`: R1~R4, `pytest`, 단계마다 commit
- [ ] `PROMPTS.md`, 68일차 준비
+2 -1
View File
@@ -4,6 +4,7 @@
- 교과목: 노코드 멀티 에이전트 워크플로우 설계 및 운영
- 단원: AI 워크플로우 설계 및 구현
- 강의 자료: [Lecture/67](../../Lecture/67/README.md)
- 하루 수강 안내: [LECTURE-67.md](LECTURE-67.md) (수업 준비부터 마칠 때까지 순서대로)
- 66일차처럼 n8n 노드를 손으로 끌어다 놓지 않습니다. CLI 코딩 에이전트(Codex · Claude Code · Antigravity)에게 요청문으로 워크플로우 JSON을 만들게 하고, 우리는 **실행 결과를 테스트로 확인**합니다. 오늘은 정해진 흐름 대신 **Agent가 Tool을 고르는** 워크플로우입니다.
## 오늘 만드는 업무: 사내 IT 문의 응답 Agent
@@ -70,7 +71,7 @@ Last3Mon/67/
[실습 준비](../../Lecture/67/00-DAY67-PREP.md)를 끝내 주세요. 요약:
```bash
cd ~/aio-01d4-stu/Last3Mon/65/n8n && docker compose start # 65일차 n8n (설치 폴더 ~/day65-n8n)
cd ~/aio-01d4-stu/Last3Mon/65/n8n && docker compose start # 65일차 n8n (Ollama는 쓰지 않음 · 처음 한 번 PREP 1절대로 끄기)
cd ~/aio-01d4-stu/Last3Mon/67/data-api && docker compose up -d --force-recreate
cd ~/aio-01d4-stu/Last3Mon/67 && uv run tools/flow.py doctor # 마지막 줄 ready
```
+1 -1
View File
@@ -115,7 +115,7 @@ man 페이지는 길어서 매번 번역하면 느리고 비용이 듭니다.
<details><summary>▶ 4단계 · 테스트에서 진짜 API를 부르지 않게</summary>
번역 테스트가 실제 LLM을 부르면 느리고, 돈이 들고, 결과가 매번 다릅니다. LLM을 부르는 부분을 **바꿔 끼울 수 있게** 만들고 테스트에서는 가짜를 쓰게 하려면 어떻게 요청할까요? (오늘 n8n에서 OpenAI와 Ollama를 바꿔 끼우던 것과 같은 생각입니다.)
번역 테스트가 실제 LLM을 부르면 느리고, 돈이 들고, 결과가 매번 다릅니다. LLM을 부르는 부분을 **바꿔 끼울 수 있게** 만들고 테스트에서는 가짜를 쓰게 하려면 어떻게 요청할까요? (n8n에서 Chat Model 노드만 바꾸면 모델이 바뀌는 것과 같은 생각입니다.)
</details>
```bash
+1 -2
View File
@@ -82,9 +82,8 @@ RECOMMENDED = {
"n8n-nodes-base.httpRequestTool": 4.2,
"@n8n/n8n-nodes-langchain.agent": 3.1,
"@n8n/n8n-nodes-langchain.lmChatOpenAi": 1.2,
"@n8n/n8n-nodes-langchain.lmChatOllama": 1,
}
COURSE_CREDENTIALS = {"openAiCourse0001": "OpenAI (.env)", "ollamaLocal0001": "Ollama local"}
COURSE_CREDENTIALS = {"openAiCourse0001": "OpenAI (.env)"} # OpenAI only from day 66 (no Ollama)
CONNECTION_TYPES = {"main", "ai_tool", "ai_languageModel", "ai_memory", "ai_outputParser"}
SECRET = re.compile(r"\bsk-[A-Za-z0-9_-]{16,}")
+5 -4
View File
@@ -19,15 +19,17 @@ flowchart LR
| 무엇 | 어디 |
| --- | --- |
| n8n 공식 설치 (compose.yml · .env) | `~/day65-n8n` (65일차 [SETUP-N8N](../../Last3Mon/65/SETUP-N8N.md) 5단계, 지우지 않음) |
| 켜고 끄기 (n8n + Ollama) | `~/aio-01d4-stu/Last3Mon/65/n8n` (`~/day65-n8n/compose.yml`을 불러 씀) |
| 켜고 끄기 (n8n) | `~/aio-01d4-stu/Last3Mon/65/n8n` (`~/day65-n8n/compose.yml`을 불러 씀) |
```bash
sudo systemctl stop ollama # WSL의 Ollama가 켜져 있다면 멈춤
sudo systemctl disable --now ollama 2>/dev/null # WSL에 설치한 Ollama가 있으면 끄고 자동 시작도 끔
cd ~/aio-01d4-stu/Last3Mon/65/n8n
docker compose rm -sf ollama # Ollama 컨테이너가 있으면 지움 (없으면 그냥 지나감)
docker compose start
```
- `~/day65-n8n`에서 `docker compose start`로 켰어도 n8n은 같은 것입니다 (Ollama만 빠짐).
- **66일차부터 LLM은 OpenAI API 키(`Last3Mon/.env`, Credential `OpenAI (.env)`)만 씁니다.** Ollama는 쓰지 않으므로 위처럼 꺼서 메모리를 아낍니다. 다음 날부터는 같은 명령을 그대로 써도 됩니다.
- `~/day65-n8n`에서 `docker compose start`로 켰어도 n8n은 같은 것입니다.
- `docker compose start`가 `.../day65-n8n/compose.yml: no such file or directory`이면 n8n을 홈이 아닌 곳에 설치한 것입니다. 65일차 SETUP-N8N 문제 해결 표대로 `Last3Mon/65/n8n/.env`에 `N8N_HOME=<설치 폴더>`를 적습니다 (`flow.py`도 이 값을 읽습니다).
## 2. CLI 코딩 에이전트 (전날 필수, 10분)
@@ -56,7 +58,6 @@ uv run tools/flow.py doctor
✔ n8n http://localhost:5678
! data API http://localhost:8800 (not used today)
✔ credential 'OpenAI (.env)' (openAiCourse0001)
✔ credential 'Ollama local' (ollamaLocal0001)
✔ node catalog (for check)
✔ CLI coding agent: codex, claude
ready
@@ -58,7 +58,7 @@ n8n 화면의 워크플로우를 **Download**하면 JSON 파일이 됩니다.
| 에이전트가 모르는 것 | AGENTS.md에 적은 것 |
| --- | --- |
| 우리 n8n 버전에서 되는 노드 버전 | 실행 확인한 노드 JSON (`typeVersion` 포함) |
| Credential | `openAiCourse0001` · `ollamaLocal0001` id만 사용, 키는 쓰지 않음 |
| Credential | `openAiCourse0001` id만 사용 (LLM은 OpenAI 하나), 키는 쓰지 않음 |
| 오늘 만들 것의 계약 | 웹훅 `my-meeting`, 입력 `title`·`notes`, Lab마다 결과 모양 |
| 일하는 순서 | `my-work/`에 쓰기 → `check` → 사람이 push·test |
| 하지 말 것 | 테스트 기대 결과 바꾸기, 도구 고치기, 키 출력 |
+1 -1
View File
@@ -49,7 +49,7 @@ flowchart LR
| 작게 나누기 | 예제 1 → 예제 2 → 과제 | 1단계 → 2단계 → 3단계 |
| 확인 도구 | `flow.py check · push · test` | `uv run turl`, `pytest` |
| 기대 결과 | `cases/*.json` | R1~R5 확인 표, 테스트 |
| 바꿔 끼우기 | Chat Model (OpenAI ↔ Ollama) | 진짜 서버 ↔ 가짜 서버 |
| 바꿔 끼우기 | Chat Model 노드 (모델 이름만 바꾸면 교체) | 진짜 서버 ↔ 가짜 서버 |
| 비밀 지키기 | Credential id만, 키 없음 | 기록에서 비밀 헤더 가리기 |
## 4. 강사 바이브 코딩 (15분)
+5 -4
View File
@@ -19,21 +19,23 @@ flowchart LR
| 무엇 | 어디 |
| --- | --- |
| n8n 공식 설치 (compose.yml · .env) | `~/day65-n8n` (65일차 [SETUP-N8N](../../Last3Mon/65/SETUP-N8N.md) 5단계, 지우지 않음) |
| 켜고 끄기 (n8n + Ollama) | `~/aio-01d4-stu/Last3Mon/65/n8n` (`~/day65-n8n/compose.yml`을 불러 씀) |
| 켜고 끄기 (n8n) | `~/aio-01d4-stu/Last3Mon/65/n8n` (`~/day65-n8n/compose.yml`을 불러 씀) |
| Docker 프로젝트 · 네트워크 | `day65-n8n` · `day65-n8n_default` (데이터 API가 여기에 붙음) |
```bash
sudo systemctl stop ollama # WSL의 Ollama가 켜져 있다면 멈춤
sudo systemctl disable --now ollama 2>/dev/null # WSL에 설치한 Ollama가 있으면 끄고 자동 시작도 끔
cd ~/aio-01d4-stu/Last3Mon/65/n8n
docker compose rm -sf ollama # Ollama 컨테이너가 있으면 지움 (없으면 그냥 지나감)
docker compose start
cd ~/aio-01d4-stu/Last3Mon/67/data-api
docker compose up -d --force-recreate # 데이터 파일 위치가 바뀌었으므로 다시 만듦
curl -s localhost:8800/health # {"status": "ok"}
```
- **66일차부터 LLM은 OpenAI API 키(`Last3Mon/.env`, Credential `OpenAI (.env)`)만 씁니다.** Ollama는 쓰지 않으므로 위처럼 꺼서 메모리를 아낍니다. 다음 날부터는 같은 명령을 그대로 써도 됩니다.
`network day65-n8n_default not found`가 나오면 n8n이 켜져 있지 않은 것입니다. 위 n8n 부분부터 다시 합니다.
- `~/day65-n8n`에서 `docker compose start`로 켰어도 n8n은 같은 것입니다 (Ollama만 빠짐). 그래도 위처럼 `Last3Mon/65/n8n`에서 켜는 것을 기본으로 합니다.
- `~/day65-n8n`에서 `docker compose start`로 켰어도 n8n은 같은 것입니다. 그래도 위처럼 `Last3Mon/65/n8n`에서 켜는 것을 기본으로 합니다.
- `docker compose start`가 `.../day65-n8n/compose.yml: no such file or directory`이면 n8n을 홈이 아닌 곳에 설치한 것입니다. 65일차 SETUP-N8N 문제 해결 표대로 `Last3Mon/65/n8n/.env`에 `N8N_HOME=<설치 폴더>`를 적습니다 (`flow.py`도 이 값을 읽습니다).
## 2. CLI 코딩 에이전트 (전날 필수, 10분)
@@ -63,7 +65,6 @@ uv run tools/flow.py doctor
✔ data API http://localhost:8800
✔ n8n → http://data-api:8800
✔ credential 'OpenAI (.env)' (openAiCourse0001)
✔ credential 'Ollama local' (ollamaLocal0001)
✔ node catalog (for check)
✔ CLI coding agent: codex, claude
ready
@@ -68,7 +68,7 @@ CLI 에이전트는 n8n을 일반적으로는 알지만, **우리 교실의 사
| --- | --- |
| 우리 n8n 버전에서 되는 노드 버전 | 실행 확인한 노드 JSON 9종 (`typeVersion` 포함) |
| 데이터 API 주소 | n8n 안에서는 `http://data-api:8800` (`localhost` 아님) |
| Credential | `openAiCourse0001` · `ollamaLocal0001` id만 사용, 키는 쓰지 않음 |
| Credential | `openAiCourse0001` id만 사용 (LLM은 OpenAI 하나), 키는 쓰지 않음 |
| 일하는 순서 | `my-work/`에 쓰기 → `check` → 사람이 push·test |
| 하지 말 것 | 테스트 기대 결과 바꾸기, 도구·데이터 고치기, 키 출력 |
+1 -1
View File
@@ -54,7 +54,7 @@ flowchart LR
| 작게 나누기 | 예제 1 → 예제 2 → 과제 | 1단계 → 2단계 → 3단계 |
| 확인 도구 | `flow.py check · push · test` | `uv run tman`, `pytest` |
| 기대 결과 | `cases/*.json` (업무 규칙) | R1~R4 확인 표, 테스트 |
| 바꿔 끼우기 | Chat Model (OpenAI ↔ Ollama) | 번역기 (실제 LLM ↔ 가짜) |
| 바꿔 끼우기 | Chat Model 노드 (모델 이름만 바꾸면 교체) | 번역기 (실제 LLM ↔ 가짜) |
| 비밀 지키기 | Credential id만, 키 없음 | `OPENAI_API_KEY` 환경 변수 |
## 4. 강사 바이브 코딩 (15분)