74일차 자료 추가(답 제외), 73일차 정답 공개(LAB-A · VIBE-A · answers · tscan), 64 · 65 · 68~73일차 교안 · 실습 문서 수정 반영
This commit is contained in:
1 parent
4ef0464525
commit
bb719d81fa
191 files changed
+36875
-64
No files matched your search
@@ -8,7 +8,7 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A["1. 왜 보안인가"] --> B["2. 위협 다섯 가지"] --> C["3. 먼저 공격해 보기"] --> D["4. 입력 검증"] --> E["5. 400과 차단"]
|
||||
E --> F["6. 관문이 아낀 시간"] --> G["7. 규칙과 정상 질문"] --> H["8. 숨긴 공격 · 글자 정리"] --> I["9. 요청문으로"]
|
||||
E --> F["6. 관문이 아낀 시간"] --> G["7. 규칙과 정상 질문"] --> H["8. 숨긴 공격 · 글자 정리"] --> I["9. 요청문(프롬프트)으로"]
|
||||
```
|
||||
|
||||
## 0. 이 시간 (50분)
|
||||
@@ -422,10 +422,24 @@ JSON 안에서는 `\`를 두 번(`\\s`) 씁니다.
|
||||
|
||||
같은 규칙 목록으로, 규칙 앞에 정리 두 줄(`clean` · `compact`)만 더했습니다 ([AGENTS.md](../../Last3Mon/73/AGENTS.md) 5절 "글자 정리 뒤 규칙").
|
||||
|
||||
## 9. 요청문으로
|
||||
## 9. 요청문(프롬프트)으로
|
||||
|
||||
**요청문(프롬프트)이란.** 실습에서 CLI 코딩 에이전트(codex · claude · agy)에게 보내는 글입니다. 에이전트는 이 글만 보고 n8n 워크플로우 JSON을 만들거나 고칩니다. 이 절은 이 단계에서 배운 것을 **요청문(프롬프트)에 어떤 칸으로 적을지** 실습 전에 정리하는 자리입니다. 실습 문서의 `▶ 빈칸 채우기 · 요청문(프롬프트) 뼈대`가 이 칸을 실제 문장으로 만든 것이고, 빈칸 ①~④는 그 문장 속 정확한 값입니다.
|
||||
|
||||
| 칸 | 에이전트에게 알려 주는 것 | 빠지면 생기는 일 |
|
||||
| --- | --- | --- |
|
||||
| 무엇을 | 만들거나 바꿀 기능 | 에이전트가 짐작해서 다른 것을 만듦 |
|
||||
| 어디에 | 고칠 파일 · 노드 · 자리 | 엉뚱한 노드를 고치거나 새 파일을 만듦 |
|
||||
| 어떤 모양으로 | 결과 JSON의 칸 이름 · 값 · 응답 코드 | 테스트가 보는 칸 이름과 달라 실패 |
|
||||
| 그대로 · 하지 말 것 | 건드리면 안 되는 것 | 다른 곳까지 바뀌어 무엇 때문인지 모르게 됨 |
|
||||
| 확인 | 통과해야 할 테스트 파일 | "다 됐다"를 판단할 기준이 없음 |
|
||||
|
||||
67~71일차의 다섯 가지(① 파일 ② 입력 ③ 처리 ④ 결과 모양 ⑤ 기대 결과)와 같은 뜻입니다. 파일 · 입력이 "어디에", 처리가 "무엇을", 결과 모양이 "어떤 모양으로", 기대 결과가 "확인"입니다. 72일차부터는 **이미 있는 워크플로우를 고치는** 요청이 많아 "그대로"가 따로 한 칸이 됐습니다.
|
||||
|
||||
Lab과 다른 업무로 예를 듭니다 (주문 문의 Agent).
|
||||
|
||||
아래 표의 줄(넣을 것)은 위 다섯 칸을 이 단계 주제에 맞게 쪼갠 것이고, 실습 요청문(프롬프트)을 쓸 때도 같은 줄을 채웁니다.
|
||||
|
||||
| 넣을 것 | 예 |
|
||||
| --- | --- |
|
||||
| 관문의 위치 | "Agent 앞에, 고객 확인 → 검증 → 글자 정리 → 규칙 순서" |
|
||||
@@ -434,6 +448,16 @@ Lab과 다른 업무로 예를 듭니다 (주문 문의 Agent).
|
||||
| **막지 말 것의 예** | "'이전 주문', '시스템 점검'은 정상" |
|
||||
| 기대 결과 | 공격 테스트 + 정상 질문 테스트 파일 |
|
||||
|
||||
표를 위에서부터 이어 읽으면 요청문(프롬프트)이 됩니다 (화살표 오른쪽은 다섯 칸 중 어디인지):
|
||||
|
||||
```text
|
||||
주문 문의 Agent 앞에 고객 확인 → 입력 검증 → 글자 정리 → 규칙 순서로 관문을 넣어 줘. ← 무엇을 · 어디에
|
||||
입력이 잘못되면 400 {error, codes}, 규칙에 걸리면 200 {route: 차단, answer: 안내문, reason}. ← 어떤 모양으로
|
||||
'이전 지시 무시', 'system prompt' 는 막고,
|
||||
'이전 주문', '시스템 점검' 은 정상으로 지나가게 해 줘. ← 막지 말 것 (그대로)
|
||||
공격 테스트와 정상 질문 테스트 파일이 모두 통과해야 해. ← 확인
|
||||
```
|
||||
|
||||
- 요청문에 **막지 말 것의 예**가 없으면 에이전트는 가장 넓은 규칙을 씁니다 ("무시" 하나만으로).
|
||||
- "테스트를 통과시키려고 기대 결과를 바꾸지 않는다"는 [AGENTS.md](../../Last3Mon/73/AGENTS.md) 8절에 있습니다. 에이전트가 테스트를 고치려 하면 멈춥니다.
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A["1. 관문 하나를<br/>믿지 않기"] --> B["2. 틀리면 안 되는 값"] --> C["3. 지시문에<br/>비밀을 두지 않기"] --> D["4. 질문은 데이터"] --> E["5. 아는 것만 막는<br/>규칙의 한계"]
|
||||
E --> F["6. 판별 LLM"] --> G["7. 관문의 비용"] --> H["8. 멈추면 막기<br/>fail-closed"] --> I["9. 요청문으로"]
|
||||
E --> F["6. 판별 LLM"] --> G["7. 관문의 비용"] --> H["8. 멈추면 막기<br/>fail-closed"] --> I["9. 요청문(프롬프트)으로"]
|
||||
```
|
||||
|
||||
## 0. 이 시간 (50분)
|
||||
@@ -354,10 +354,24 @@ flowchart LR
|
||||
- 오늘은 fail-closed로 정했습니다: 판별 LLM은 보안 관문이고, IT Agent도 같은 OpenAI를 쓰므로 판별이 멈춘 날은 어차피 답을 못 씁니다.
|
||||
- 규칙 · 입력 검증은 LLM이 멈춰도 일합니다. **LLM에 기대지 않는 관문이 있다는 것**이 겹겹이 막기의 또 다른 값입니다.
|
||||
|
||||
## 9. 요청문으로
|
||||
## 9. 요청문(프롬프트)으로
|
||||
|
||||
**요청문(프롬프트)이란.** 실습에서 CLI 코딩 에이전트(codex · claude · agy)에게 보내는 글입니다. 에이전트는 이 글만 보고 n8n 워크플로우 JSON을 만들거나 고칩니다. 이 절은 이 단계에서 배운 것을 **요청문(프롬프트)에 어떤 칸으로 적을지** 실습 전에 정리하는 자리입니다. 실습 문서의 `▶ 빈칸 채우기 · 요청문(프롬프트) 뼈대`가 이 칸을 실제 문장으로 만든 것이고, 빈칸 ①~④는 그 문장 속 정확한 값입니다.
|
||||
|
||||
| 칸 | 에이전트에게 알려 주는 것 | 빠지면 생기는 일 |
|
||||
| --- | --- | --- |
|
||||
| 무엇을 | 만들거나 바꿀 기능 | 에이전트가 짐작해서 다른 것을 만듦 |
|
||||
| 어디에 | 고칠 파일 · 노드 · 자리 | 엉뚱한 노드를 고치거나 새 파일을 만듦 |
|
||||
| 어떤 모양으로 | 결과 JSON의 칸 이름 · 값 · 응답 코드 | 테스트가 보는 칸 이름과 달라 실패 |
|
||||
| 그대로 · 하지 말 것 | 건드리면 안 되는 것 | 다른 곳까지 바뀌어 무엇 때문인지 모르게 됨 |
|
||||
| 확인 | 통과해야 할 테스트 파일 | "다 됐다"를 판단할 기준이 없음 |
|
||||
|
||||
67~71일차의 다섯 가지(① 파일 ② 입력 ③ 처리 ④ 결과 모양 ⑤ 기대 결과)와 같은 뜻입니다. 파일 · 입력이 "어디에", 처리가 "무엇을", 결과 모양이 "어떤 모양으로", 기대 결과가 "확인"입니다. 72일차부터는 **이미 있는 워크플로우를 고치는** 요청이 많아 "그대로"가 따로 한 칸이 됐습니다.
|
||||
|
||||
Lab과 다른 업무로 예를 듭니다 (사내 결재 문의 Agent).
|
||||
|
||||
아래 표의 줄(넣을 것)은 위 다섯 칸을 이 단계 주제에 맞게 쪼갠 것이고, 실습 요청문(프롬프트)을 쓸 때도 같은 줄을 채웁니다.
|
||||
|
||||
| 넣을 것 | 예 |
|
||||
| --- | --- |
|
||||
| 권한의 근거 | "결재자는 로그인 정보의 `user`에서, LLM이 정하지 않음. 남의 결재 건은 결재 API가 403" |
|
||||
@@ -366,6 +380,17 @@ Lab과 다른 업무로 예를 듭니다 (사내 결재 문의 Agent).
|
||||
| 멈췄을 때 | "판별 LLM 실패 → 200 정해진 안내, `reason: guard_down`, timeout 8초 · 재시도 0" |
|
||||
| 기대 결과 | 새 공격 · 정상 테스트(`--repeat 3`), 멈춤 테스트(`before llm down`) |
|
||||
|
||||
표를 위에서부터 이어 읽으면 요청문(프롬프트)이 됩니다 (화살표 오른쪽은 다섯 칸 중 어디인지):
|
||||
|
||||
```text
|
||||
결재자는 로그인 정보의 user 에서 가져오고 LLM 이 정하지 않게 해 줘 (남의 결재 건은 결재 API 가 403). ← 무엇을 · 어디에
|
||||
지시문에서 관리자 비밀번호 · 내부 메모를 빼 줘. ← 하지 말 것
|
||||
규칙 뒤에 판별 LLM 을 넣어 줘: Tool 없음, JSON 만,
|
||||
'결재 규칙' · '관리자 승인' 이 나와도 평범한 질문은 안전. ← 어떤 모양으로
|
||||
판별 LLM 이 실패하면 200 정해진 안내 · reason guard_down (timeout 8초, 재시도 0).
|
||||
새 공격 · 정상 테스트를 --repeat 3 으로, 멈춤 테스트(before llm down)도 통과. ← 확인
|
||||
```
|
||||
|
||||
## 10. 자주 하는 실수
|
||||
|
||||
| 실수 | 생기는 일 | 대신 |
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A["1. 나가는 답도<br/>검사"] --> B["2. 가리기 ·<br/>유출 차단"] --> C["3. 보안 기록"] --> D["4. 관문별<br/>시간과 기록"] --> E["5. 지나치게 ·<br/>덜 막기"]
|
||||
E --> F["6. 감사 로그"] --> G["7. 데이터 최소화"] --> H["8. 남은 위험"] --> I["9. 요청문으로"]
|
||||
E --> F["6. 감사 로그"] --> G["7. 데이터 최소화"] --> H["8. 남은 위험"] --> I["9. 요청문(프롬프트)으로"]
|
||||
```
|
||||
|
||||
## 0. 이 시간 (50분)
|
||||
@@ -354,10 +354,24 @@ flowchart LR
|
||||
|
||||
`my-work/SECURITY.md` 10절에 내 워크플로우의 남은 위험을 둘 이상 적습니다. 74일차(버전 관리와 운영 체계)에서 이 목록을 배포 전 점검표로 씁니다.
|
||||
|
||||
## 9. 요청문으로
|
||||
## 9. 요청문(프롬프트)으로
|
||||
|
||||
**요청문(프롬프트)이란.** 실습에서 CLI 코딩 에이전트(codex · claude · agy)에게 보내는 글입니다. 에이전트는 이 글만 보고 n8n 워크플로우 JSON을 만들거나 고칩니다. 이 절은 이 단계에서 배운 것을 **요청문(프롬프트)에 어떤 칸으로 적을지** 실습 전에 정리하는 자리입니다. 실습 문서의 `▶ 빈칸 채우기 · 요청문(프롬프트) 뼈대`가 이 칸을 실제 문장으로 만든 것이고, 빈칸 ①~④는 그 문장 속 정확한 값입니다.
|
||||
|
||||
| 칸 | 에이전트에게 알려 주는 것 | 빠지면 생기는 일 |
|
||||
| --- | --- | --- |
|
||||
| 무엇을 | 만들거나 바꿀 기능 | 에이전트가 짐작해서 다른 것을 만듦 |
|
||||
| 어디에 | 고칠 파일 · 노드 · 자리 | 엉뚱한 노드를 고치거나 새 파일을 만듦 |
|
||||
| 어떤 모양으로 | 결과 JSON의 칸 이름 · 값 · 응답 코드 | 테스트가 보는 칸 이름과 달라 실패 |
|
||||
| 그대로 · 하지 말 것 | 건드리면 안 되는 것 | 다른 곳까지 바뀌어 무엇 때문인지 모르게 됨 |
|
||||
| 확인 | 통과해야 할 테스트 파일 | "다 됐다"를 판단할 기준이 없음 |
|
||||
|
||||
67~71일차의 다섯 가지(① 파일 ② 입력 ③ 처리 ④ 결과 모양 ⑤ 기대 결과)와 같은 뜻입니다. 파일 · 입력이 "어디에", 처리가 "무엇을", 결과 모양이 "어떤 모양으로", 기대 결과가 "확인"입니다. 72일차부터는 **이미 있는 워크플로우를 고치는** 요청이 많아 "그대로"가 따로 한 칸이 됐습니다.
|
||||
|
||||
Lab과 다른 업무로 예를 듭니다 (고객 주문 문의 Agent).
|
||||
|
||||
아래 표의 줄(넣을 것)은 위 다섯 칸을 이 단계 주제에 맞게 쪼갠 것이고, 실습 요청문(프롬프트)을 쓸 때도 같은 줄을 채웁니다.
|
||||
|
||||
| 넣을 것 | 예 |
|
||||
| --- | --- |
|
||||
| 출력 필터의 자리 | "답을 만드는 Code 뒤, 보내기 직전" |
|
||||
@@ -367,6 +381,17 @@ Lab과 다른 업무로 예를 듭니다 (고객 주문 문의 Agent).
|
||||
| 감사 로그 | "200으로 끝나면 `POST /audit`, 질문 · 답 글자 · 연락처는 넣지 않음, 실패해도 답은 나감" |
|
||||
| 테스트 | "막을 것 · 막지 말 것 반반, 경계값, `--repeat 3`, `pii_in_log 0`" |
|
||||
|
||||
표를 위에서부터 이어 읽으면 요청문(프롬프트)이 됩니다 (화살표 오른쪽은 다섯 칸 중 어디인지):
|
||||
|
||||
```text
|
||||
답을 만드는 Code 뒤, 보내기 직전에 출력 필터를 넣어 줘. ← 어디에
|
||||
전화는 앞 3 · 끝 4, 카드 번호는 끝 4만, 주소는 시 · 구까지 남기고,
|
||||
답에 내부 쿠폰 코드 모양이 있으면 차단해 줘 (reason output_leak). ← 무엇을
|
||||
모든 결과에 security {blocked_by, reason, masked} 를 길마다 같은 모양으로. ← 어떤 모양으로
|
||||
200 으로 끝나면 POST /audit, 질문 · 답 글자 · 연락처는 넣지 말고, 실패해도 답은 나가게. ← 하지 말 것
|
||||
막을 것 · 막지 말 것 반반 · 경계값 테스트를 --repeat 3, pii_in_log 0. ← 확인
|
||||
```
|
||||
|
||||
## 10. 자주 하는 실수
|
||||
|
||||
| 실수 | 생기는 일 | 대신 |
|
||||
|
||||
Reference in new issue
Block a user