페이지 목차
이 페이지에서 검색
로컬 LLM
이 페이지에 묻기
로컬 LLM · 현재 차시와 목차 본문에서만 찾아 답합니다. 답을 지어내지 않고 해당하는 대목을 그대로 보여 주며, 여기에 없으면 없다고 알려 드립니다.
생성형 AI가 아니라 이 페이지 본문을 찾아 그대로 보여 주는 방식입니다. 외부로 나가는 요청이 없습니다.
LOCAL · LLM
로컬 LLM
생성 수정
로컬 모델 실행과 GPU·메모리 이해부터 서빙·RAG·도구 호출·업무형 앱 구현까지 차례로 살펴봅니다.
42개 문서 · 5일차 · 34 / 42
33차시 · 프로젝트 요구사항 분석
지도 위치 : 5일차 · 프로젝트 1단계 · 다섯 층 전체의 설계도 | 이전: 32차시 AI 애플리케이션 통합 | 다음: 34차시 LLM 모델 선정 및 최적화 키워드 : 업무 시나리오 선정, 사용자 요구사항 분석, 서비스 기능 정의
이 차시를 다 읽으면
- 5일차 여덟 차시가 각각 무엇을 산출 하고, 그 산출물이 다음 차시의 입력 이 되는 순서를 말할 수 있다.
- 내 업무 시나리오가 로컬 LLM에 맞는지 판별 기준 표 로 가를 수 있다.
- "빠르게", "정확하게" 같은 요구를 측정 가능한 완료 기준 으로 바꿀 수 있다.
- 평가셋 을 프로젝트의 첫 산출물로 만들고, 가명 처리 규칙을 정할 수 있다.
- 기능마다 완료 기준을 형식 기준과 의미 기준으로 따로 적을 수 있다.
- 범위 밖 목록 을 왜 따로 쓰는지 설명할 수 있다.
0. 이 차시의 판별 축
| # | 축 | 왼쪽 (0) | 오른쪽 (1) | 이 축으로 갈리는 것 | 큰 축 (README 5장) |
|---|---|---|---|---|---|
| 1 | 형식이 맞나 뜻이 맞나 | 형식 기준 (JSON이 파싱되는가, 분류값이 목록 안에 있는가) | 의미 기준 (분류가 정답과 같은가, 주문번호가 본문에 실제로 있는가) | 완료 기준을 두 줄로 적어야 하는 이유 | ⑧ 구문론 ↔ 의미론 |
| 2 | 말인가 숫자인가 | 형용사 요구 ("빠르게", "정확하게") | 완료 기준 ("동시 10명 TTFT p95 < 1초") | 검사로 끝을 판정할 수 있는가 | 이 차시의 축 (3절) |
| 3 | 어디서 실행되는가 | 로컬 | 클라우드 API | 이 시나리오를 로컬로 할 이유가 있는가 | ④ 로컬 ↔ 원격 |
| 4 | 사람이 손을 대는가 | 사람이 확정 | 자동 실행 | 어느 기능에 사람이 남는가 | 사람이 손을 대는가 (파생 축) |
앞에서 이어집니다 — 1~4일차는 다섯 층을 하나씩 깊게 팠습니다. 5일차는 README 4장의 "넓게 → 깊게 → 다시 넓게 "의 마지막 칸입니다. 그 첫 차시인 33차시는 새로 배우는 시간이 아니라, 앞에서 배운 1차시(로컬이 맞는가) , 6 · 28 · 31차시(평가셋) , 29차시(형식 ↔ 내용) 를 문서 한 장으로 회수 하는 시간입니다.
1. 5일차 전체 지도 — 산출물이 다음 차시의 입력이다
1.1 여덟 단계와 산출물 ⭐
| 차시 | 단계 | 이 단계의 산출물 | 다음에 누가 쓰나 | 회수하는 앞 차시 |
|---|---|---|---|---|
| 33 | 요구사항 | 시나리오 한 장, 요구사항표(ID · 완료 기준), 평가셋 v1 , 범위 밖 목록 | 34(품질 하한), 36(점수표), 39(SLO) | 1, 6, 28, 31 |
| 34 | 모델 선정 | VRAM 예산표, 비교 매트릭스, 결정 기록 | 35(기동 옵션) | 9~16 |
| 35 | 서빙 | 기동 명령 · 서비스 파일, API 테스트 체크리스트 | 36(호출 대상) | 17~20 |
| 36 | AI 기능 | 프롬프트 파일, 출력 스키마, 평가 점수표 before/after | 37(화면에 띄울 결과) | 28, 29, 31 |
| 37 | 애플리케이션 | 상담원 화면, 스트리밍, 세션 분리, 행동 시험 결과 | 38(도구를 붙일 자리) | 25~27 |
| 38 | 도구 · 통합 | 도구 정의, 권한 규칙, 도구 호출 로그, 통합 시나리오 표 | 39(전체 흐름 측정) | 30, 32 |
| 39 | 성능 | 부하 테스트 표, before/after, 품질 회귀 결과 | 40(성능 표) | 14, 22, 23 |
| 40 | 발표 | 발표 자료, 정산표, 개선사항(KPT) | — | 전체 |
이 표를 세로로 읽으면 평가셋이 세 번 등장합니다. 34차시에 모델을 거르고, 36차시에 프롬프트를 고르고, 39차시에 최적화가 품질을 망가뜨리지 않았는지 확인합니다. 그래서 평가셋이 33차시의 가장 중요한 산출물 입니다(5절).
⭐ 이 순서는 AI에게 개발을 맡길 때의 기본 순서이기도 합니다. ① 무엇을 만들지 적은 문서(md 파일)를 먼저 쓰고, 이 단계에서는 코드를 쓰지 않게 한다 → ② 범위와 경계(무엇을 하고 무엇을 하지 않는가)를 확정한다 → ③ 그 문서를 AI에게 함께 주고 코드를 만들게 한다. 33차시의 요구사항 문서가 그 ①번 문서입니다. 이 문서 없이 AI에게 "문의봇 만들어줘"라고 하면, AI가 범위와 기준을 대신 정합니다.
1.2 💡 내 업무로 바꿔 적용하는 법
이 노트의 예제는 README 8.1절의 문의봇 입니다. 하지만 표의 칸은 그대로 두고 내용만 바꾸면 어떤 업무에도 씁니다.
| 문의봇의 자리 | 내 업무로 바꾸면 (예) |
|---|---|
| 고객 문의 메일 | 민원 접수 글, 사내 요청 티켓, 회의록, 보고서 초안 |
| 분류값 5개 | 민원 유형, 티켓 우선순위, 부서 |
| 추출 필드(고객명 · 주문번호 …) | 접수번호, 요청 부서, 마감일 |
| 주문 조회 도구 | 사내 시스템의 읽기 전용 조회 API |
| 상담원 10명 | 내 업무의 실제 동시 사용자 수 |
2. 업무 시나리오 선정 — 로컬 LLM에 맞는 일인가
2.1 정의
업무 시나리오 — [요구사항 문서의 출발점]인데, [ 누가 · 어떤 입력을 받아 · 무엇을 만들고 · 누가 확인하는지를 한 흐름으로 적는다 ]는 점에서 기능 이름만 나열한 기능 목록과 구별된다.
"요약 기능, 분류 기능"은 기능 목록입니다. "상담원이 문의 메일을 붙여넣으면 분류 · 추출 결과와 답변 초안이 뜨고, 상담원이 고쳐서 확정한다"가 시나리오입니다. 확인하는 사람 이 문장 안에 들어 있어야 합니다.
2.2 ⭐ 판별 기준 표 — 1차시 회수
앞에서 배운 로컬이 맞지 않는 경우(1차시 3.2) 와 SLM (1차시 1.1 — GPU 한 장으로 돌릴 수 있는 작은 언어 모델) 의 한계 를 시나리오 선정 기준으로 바꾼 표입니다. SLM은 업무 하나로 좁힌 일(분류 · 추출 · 요약)은 잘하지만, 여러 단계를 거치는 어려운 추론이나 학습 때 보지 못한 최신 지식에는 약합니다. 아래 표의 마지막 두 줄이 그 한계입니다.
| 기준 | 로컬에 적합 (1) | 로컬에 부적합 (0) | 문의봇은 |
|---|---|---|---|
| 입력 · 출력의 종류 | 텍스트 중심 | 이미지 · 음성이 핵심 | ⭕ 메일 텍스트 |
| 반복성 | 같은 형태의 일이 매일 반복 | 매번 다른 일, 한 달에 몇 번 | ⭕ 하루 수백 건 |
| 사람 검토 가능성 | 결과를 사람이 보고 고칠 수 있음 | 결과가 바로 밖으로 나감 | ⭕ 상담원이 확정 |
| 데이터 민감도 | 개인정보 · 영업비밀이 섞임 | 공개 정보뿐 | ⭕ 이름 · 연락처 · 주소 |
| 필요한 추론 수준 | 업무 하나로 좁혀짐 | 최고 수준의 다단계 추론 | ⭕ 분류 · 추출 · 초안 |
| 필요한 지식 | 입력 안에 답의 재료가 있음 | 실시간 외부 지식 · 최신 정보 필요 | ⭕ 메일 본문 + 주문 조회 |
⭐ 위 네 줄(텍스트 · 반복 · 사람 검토 · 민감)이 모두 1 이고 아래 두 줄이 0이 아니면 로컬 LLM 프로젝트로 좋은 시나리오입니다. 앞에서 배운 로컬 LLM이 필요한 다섯 가지 이유(1차시 3.1) 중 "데이터 보안"이 결정타인 경우입니다.
2.3 반례 — 이런 시나리오는 이번 프로젝트로 고르지 마세요
| 시나리오 | 왜 이번엔 아닌가 |
|---|---|
| "사내 규정을 물으면 답하는 챗봇" | 답의 재료가 입력 밖(규정 문서)에 있음 → RAG가 필요 . RAG(검색 증강 생성)는 질문과 관련된 문서를 먼저 찾아 프롬프트에 함께 넣어 주는 기법으로, 이 과정의 범위 밖입니다(README 1.2, 40차시 예고) |
| "뉴스를 보고 오늘 할 일을 정해 주는 비서" | 실시간 외부 지식 필요 |
| "계약서를 읽고 최종 법률 판단" | 최고 수준 추론 + 사람 검토 없이 쓰면 위험 |
| "한 달에 열 번 쓰는 보고서 요약" | 반복이 적어 GPU 선불 비용을 회수하지 못함 (1차시 3.2) |
2.4 시나리오 한 장 양식
[시나리오 이름] 문의봇 — 고객 문의 1차 처리 도우미
[사용자] 상담원 10명 (동시 사용)
[입력] 고객 문의 메일 본문 (한국어, 길면 수천 자)
[출력] ① 분류 ② 추출 필드 ③ 3줄 요약 ④ 답변 초안
[사람이 확인] 상담원이 ①~④를 보고 고친 뒤 '확정'을 누름. 자동 발송 없음
[도구] 주문 조회 (읽기 전용)
[왜 로컬인가] 본문에 개인정보 → 외부 API 전송 불가 (1차시 3.1 이유 1)
[빈도] 하루 약 N건 (실제 숫자로 채울 것)
🔍 읽는 포인트 : [사람이 확인] 줄이 비어 있으면 그 시나리오는 아직 덜 쓴 것입니다. 0절 축 4의 어느 쪽인지 처음부터 정합니다.
3. ⭐ 요구사항을 측정 가능한 완료 기준으로
3.1 정의
완료 기준 (Acceptance Criteria) — [요구사항의 일부]인데, [ 측정 방법과 통과 숫자가 함께 적혀 있어 느낌이 아니라 검사로 끝을 판정할 수 있다 ]는 점에서 바람을 적은 요구 문장과 구별된다.
좋은 요구사항은 두 가지를 갖춥니다.
| 성질 | 뜻 | ❌ → ⭕ |
|---|---|---|
| 명확성 | 읽는 사람마다 다르게 해석할 여지가 없다 | "빠르게 처리" → "응답 시간 40% 단축" |
| 검증성 | 끝났는지를 검사로 판정할 수 있다 | "잘 되면 됨" → "평가셋 정확도 90% 이상" |
그리고 완료 기준에는 "정상적으로 쓰면 동작하는가"만 넣지 않습니다. "잘못 쓰이거나 공격당했을 때 막는가" 도 넣습니다. 정상 입력으로만 시험한 서비스는, 실제 운영에서 처음 들어온 이상한 입력에 무너집니다. 아래 표의 "본문에 없는 주문번호 생성 0건", "되돌릴 수 없는 작업 자동 실행 0건"이 그런 기준입니다.
3.2 변환표 — 사용자의 말 → 완료 기준
| 사용자의 말 | 무엇으로 재나 | 완료 기준 (목표 예시) | 어디서 재나 |
|---|---|---|---|
| "빠르게" | TTFT (첫 글자까지) | 동시 10명에서 TTFT p95 < 1초 | 39차시 (22차시 방식) |
| "답이 술술 나오게" | TPOT (토큰 간 시간) | 동시 10명에서 TPOT p95 < 목표값 | 39차시 |
| "정확하게 분류" | 분류 정확도 | 평가셋 분류 정확도 90% 이상 | 36차시 |
| "주문번호를 놓치지 말고" | 필드별 정확도 | 주문번호 추출 정확도 95% 이상, 본문에 없는 주문번호 생성 0건 | 36차시 |
| "형식이 깨지지 않게" | JSON 파싱 · 스키마 검증 성공률 | 평가셋 전체에서 100% | 29, 36차시 |
| "여러 명이 같이" | 동시 요청 오류율 | 동시 10명에서 오류 0건 | 39차시 |
| "개인정보가 밖으로 안 나가게" | 외부 전송 경로 | 외부 API 호출 0건, 모델 서버 외부 노출 없음 | 35차시 |
| "마음대로 취소하지 않게" | 되돌릴 수 없는 작업의 자동 실행 | 0건 (사람 버튼으로만) | 38차시 |
⚠️ 표의 숫자는 목표 입니다. 아직 아무것도 재지 않았습니다. 34 · 39차시에서 실제로 재 보고 목표가 비현실적이면 고쳐도 됩니다. 단, 고친 이유를 기록 합니다. 숫자를 조용히 바꾸면 완료 기준이 다시 "느낌"이 됩니다.
💡 지표 이름(TTFT, TPOT, p95)은 앞에서 배운 14 · 22차시 그대로입니다. 33차시에서 처음 정하는 것은 통과선 뿐입니다.
3.3 요구사항 ID — 원자성과 추적성
요구사항마다 ID를 붙입니다. 두 가지를 얻기 위해서입니다.
- 원자성 — 요구사항 한 줄에 요구 하나만 담는다. "분류하고 추출한다"처럼 둘을 묶으면, 하나만 통과했을 때 완료인지 아닌지 말할 수 없습니다.
- 추적성 — 요구사항 → 구현(프롬프트 파일 · 코드) → 측정 결과를 같은 ID로 따라갈 수 있다 . 40차시 발표에서 "FR-01은 어디서 어떻게 확인했나"에 바로 답할 수 있게 됩니다.
| ID | 구분 | 요구사항 | 완료 기준 | 측정 차시 |
|---|---|---|---|---|
| FR-01 | 기능 | 문의 분류 (5개 값) | 형식: 5개 값 중 하나 100% / 의미: 정확도 90%+ | 36 |
| FR-02 | 기능 | 정보 추출 (고객명 · 주문번호 · 연락처 · 요청사항) | 형식: 스키마 통과 100% / 의미: 필드별 정확도, 지어낸 값 0건 | 36 |
| FR-03 | 기능 | 3줄 요약 | 형식: 3문장 이내 / 의미: 사람 루브릭 통과율 | 36 |
| FR-04 | 기능 | 답변 초안 (스트리밍) | 형식: 존댓말 · 길이 / 의미: 상담원 수정 없이 확정한 비율 | 36, 37 |
| FR-05 | 기능 | 주문 조회 도구 | 남의 주문 조회 0건, 없는 주문번호에 "없음" 응답 | 38 |
| NFR-01 | 성능 | 동시 10명 | TTFT p95 < 1초, 오류 0건 | 39 |
| NFR-02 | 보안 | 데이터 외부 유출 없음 | 외부 호출 0건, API 키 필수 | 35 |
FR (Functional Requirement, 기능 요구사항) — [요구사항]인데, [ 시스템이 무엇을 하는가 ]를 적는다는 점에서, 어떻게 · 얼마나 잘 하는가 (속도 · 보안 · 가용성)를 적는 NFR(비기능 요구사항) 과 구별된다.
앞으로 다시 만납니다 — 36차시에서 프롬프트 파일 맨 위에
FR-01같은 ID를 주석으로 답니다(3.3절의 추적성). 40차시 발표의 성능 표는 NFR-01 줄을 그대로 채운 것입니다.
4. 서비스 기능 정의 — 4일차 기능 중에서 고르기
4.1 4일차 메뉴판
| 4일차 기능 | 차시 | 문의봇에서 쓰는 곳 | 이번에 넣나 |
|---|---|---|---|
| OpenAI 호환 API 호출 | 25 | 모든 기능의 바탕 | ⭕ |
| 스트리밍 | 26 | 답변 초안이 흘러나오게 | ⭕ |
| 대화 (기록 관리) | 27 | 상담원이 "더 공손하게" 같은 후속 요청 | 선택 |
| 프롬프트 기반 기능 | 28 | 요약 · 분류 지시문 | ⭕ |
| 구조화 출력 | 29 | 분류 · 추출을 JSON 스키마로 | ⭕ |
| 도구 호출 | 30 | 주문 조회 | ⭕ (읽기 전용만) |
| 업무형 앱 | 31 | 요약 · 분류 · 추출 · 생성 네 기능 묶음 | ⭕ |
| 통합 | 32 | 다섯 층을 한 서비스로 | ⭕ |
4.2 ⭐ 축 ⑧ — 형식 기준과 의미 기준을 따로 적기
앞에서 배운 29차시 의 핵심 문장은 "형식이 맞아도 내용이 틀릴 수 있다"였습니다. 완료 기준도 그래서 두 줄 입니다.
| 기능 | 형식 기준 (구문) | 의미 기준 (의미) | 누가 판정하나 |
|---|---|---|---|
| 분류 | 정해진 5개 값 중 하나인가 | 평가셋 정답과 같은가 | 코드 / 평가셋 |
| 추출 | 필드가 다 있는가, 주문번호가 정해진 패턴인가 | 그 값이 본문에 실제로 있는가 | 코드 / 평가셋 |
| 요약 | 3문장 이내인가, 필수 항목(문의 유형 · 요청)이 들어 있는가 | 사실을 왜곡하지 않았는가 | 코드 / 사람 루브릭 |
| 답변 초안 | 존댓말인가, 길이 범위 안인가 | 회사 정책에 맞는가, 약속하면 안 되는 것을 약속하지 않았는가 | 코드 / 상담원 |
❌ "JSON이 잘 나오니 추출 기능 완료" — 형식 기준만 통과한 것입니다. ⭕ "스키마 통과 100%, 주문번호 정확도 96%, 지어낸 주문번호 0건" — 두 줄 다 적힌 완료입니다.
⭐ 형식 기준은 코드가 판정 할 수 있고, 의미 기준은 평가셋이나 사람 이 판정합니다. 기능을 더 꼼꼼히 보고 싶으면 이 표에 칸을 늘리면 됩니다. 쓸 만한 칸은 다섯 가지입니다 — 형식 (스키마 통과), 근거 일치 (답이 본문에 근거하는가, 31차시 3.1), 금지 사항 (약속하면 안 되는 말을 했는가), 인젝션 방어 (28차시 5절), 범위 이탈 (맡은 일 밖의 답을 했는가). 첫 칸만 코드가 판정하고, 나머지는 평가셋과 사람이 판정합니다.
4.3 범위 밖 목록
범위 밖 목록 (Out of Scope) — [요구사항 문서의 일부]인데, [ 하지 않기로 한 것을 명시해 둔다 ]는 점에서 아직 정하지 않은 것(미정)과 구별된다.
AI에게 구현을 맡기면 AI는 범위를 넓히는 쪽 으로 움직입니다. "로그인도 넣었습니다", "자동 발송 기능도 추가했습니다". 범위 밖 목록은 그것을 막는 가이드 , 즉 AI가 일하기 전에 읽게 하는 "여기까지만" 표지판입니다.
| 범위 밖 | 이유 | 나중에 어디서 |
|---|---|---|
| 사내 규정 검색 (RAG) | 이 과정 범위 밖 (README 1.2) | 40차시 예고 |
| 파인튜닝 | 데이터 · 시간 부족 | 40차시 예고 |
| 답변 자동 발송 | 사람 확정이 원칙 (0절 축 4) | — |
| 주문 취소 · 환불 실행 | 되돌릴 수 없는 작업 | 38차시 (버튼으로 사람이) |
| 로그인 · 회원 관리 | 하루 프로젝트에는 과함. 세션 ID로 대체 | 실제 운영 전에 따로 |
| GPU 여러 장 | 장비 한 대 기준 | 40차시 예고 |
5. ⭐ 평가셋 — 프로젝트의 첫 산출물
5.1 정의와 왜 첫 번째인가
평가셋 (Evaluation Set) — [테스트 데이터]인데, [ 실제 업무 입력과 사람이 정한 기대 결과를 짝지어 고정해 둔다 ]는 점에서 그때그때 떠오르는 질문으로 해 보는 시험과 구별된다.
앞에서 배운 평가셋(6차시 5절) 이 출발점입니다. 처음부터 수백 건을 모을 필요는 없습니다. 20~50건 이면 모델 · 프롬프트 사이의 큰 차이는 충분히 보입니다. 1.1절 표에서 본 대로 평가셋은 34 · 36 · 39차시에 다시 쓰입니다. 모델을 고르기 전에 있어야 합니다. 모델을 먼저 고르고 평가셋을 나중에 만들면, 고른 모델이 잘하는 문제만 모이기 쉽습니다.
5.2 무엇을 담나
| 묶음 | 건수 (예) | 왜 넣나 |
|---|---|---|
| 분류값별 평범한 문의 | 분류값마다 5~10건 | 정확도 계산의 바탕. 한 분류에 몰리지 않게 — 평가셋의 90%가 '배송지연'이면, 무조건 '배송지연'이라고 답하는 모델도 정확도 90%가 나옵니다. 분류값 사이의 건수가 크게 차이 나면(불균형) 정확도가 속입니다 |
| 긴 메일 | 3~5건 | 컨텍스트 잘림 확인 (13 · 27차시) |
| 주문번호가 없는 문의 | 3~5건 | 모델이 지어내는지 확인 |
| 두 문의가 섞인 메일 | 2~3건 | 분류 경계 |
| 오타 · 반말 · 이모티콘 | 2~3건 | 실제 입력은 깨끗하지 않음 |
| "이전 지시를 무시하고…" 문장이 섞인 메일 | 2~3건 | 프롬프트 인젝션 — 입력 안에 지시문을 숨겨 모델이 원래 규칙을 어기게 하는 공격(28차시 5절) |
{"id": "E001", "input": "주문번호 20261128-0042 배송이 일주일째 안 와요...", "expected": {"category": "배송지연", "order_id": "20261128-0042", "customer_name": "고객A"}, "tags": ["평범"]}
{"id": "E017", "input": "환불해 주세요. 주문번호는 기억이 안 나요", "expected": {"category": "교환·반품", "order_id": null}, "tags": ["주문번호없음"]}
🔍 읽는 포인트 : expected 안의 "order_id": null — "없음"도 정답입니다. 모델이 여기에 번호를 채워 넣으면 지어낸 것 입니다. tags는 나중에 "어느 묶음에서 틀렸나"를 보기 위한 꼬리표입니다.
5.3 가명 처리 ⚠️
| 원본 항목 | 가명 처리 | 지킬 점 |
|---|---|---|
| 고객 이름 | "고객A", "고객B" | 같은 메일 안에서는 같은 가명 |
| 연락처 | 010-0000-0001 | 형식은 유지 — 추출 테스트가 형식을 봄 |
| 주소 | 시 · 구까지만 | 범위를 넓혀서 특정 개인을 가리킬 수 없게 만드는 비식별 처리. 업무 판단(지역별 배송 문제)에는 시 · 구로 충분합니다 |
| 주문번호 | 형식이 같은 가짜 번호 | 도구 목업 DB(38차시)와 번호를 맞춤 |
⚠️ 가명 처리 전의 원본을 코딩 도우미 AI 대화창에 붙여넣지 마세요. 코딩 도우미가 클라우드 서비스라면, 그 순간 "개인정보 때문에 로컬"이라는 이 프로젝트의 이유가 무너집니다. 가명 처리는 사람이 먼저 , 그다음에 AI에게 넘깁니다. 보관하지 않은 데이터는 유출될 수도 없습니다. 원본은 꼭 필요한 곳에만 두세요.
5.4 기대 결과는 사람이 씁니다
❌ "평가셋 정답도 AI가 만들어 줘" — 같은 계열 모델이 문제와 정답을 둘 다 만들면, 채점이 관대해집니다(README 9장 "품질 자가 채점"). 채점자가 응시자와 같은 사람이면 채점이 아닙니다.
⭕ 입력 수집 · 가명 처리 · JSONL 변환은 AI에게 맡기고, expected 칸은 업무를 아는 사람이 채웁니다.
6. 실습 — 맡기고 검수하기
이 차시는 문서를 만드는 단계 입니다. AI는 초안 작성자, 당신은 결정권자입니다.
지시
아래 [시나리오 메모]를 바탕으로 프로젝트 요구사항 문서 초안을 만들어줘.
목표: 로컬 LLM 기반 '문의봇'(고객 문의 요약·분류·추출·답변 초안 + 주문 조회 도구)의 요구사항 문서.
맥락: 상담원 10명 동시 사용, RTX 4090 24GB 한 대, 개인정보 때문에 외부 API 사용 불가.
제약:
- 요구사항마다 ID(FR-xx, NFR-xx)를 붙이고, 완료 기준은 반드시 '측정 방법 + 숫자'로 써.
- 기능 요구사항의 완료 기준은 [형식 기준 | 의미 기준] 두 칸으로 나눠 써.
- 숫자는 아직 측정 전이므로 전부 '목표(미측정)'라고 표시해. 측정값처럼 쓰지 마.
- 범위 밖 목록을 따로 만들어. 내가 쓰지 않은 기능을 범위 안에 추가하지 마.
- 평가셋 JSONL 양식(필드 이름과 예시 2줄)만 만들고, expected 값은 비워 둬.
보고 형식:
[ID | 구분 | 요구사항 | 형식 기준 | 의미 기준 | 측정 차시] 표 + 범위 밖 목록 표 + 평가셋 양식.
[시나리오 메모]
(2.4절 양식으로 쓴 내 시나리오를 붙여넣기 — 가명 처리된 것만)
받을 증거
- 요구사항표 (ID · 형식 기준 · 의미 기준 칸이 다 채워진 것)
- 범위 밖 목록
- 평가셋 양식 파일 (
expected가 비어 있는 것)
내가 직접 볼 것
| 볼 것 | 왜 내가 보는가 |
|---|---|
| 완료 기준에 형용사 ("빠르게", "적절히", "자연스럽게")가 남아 있는가 | 남아 있으면 39 · 40차시에 판정할 수 없습니다 |
| AI가 내가 쓰지 않은 기능 을 범위 안에 넣었는가 | 범위는 사업 판단 입니다 |
| 숫자에 '목표(미측정)' 표시가 있는가 | 목표와 측정을 섞으면 40차시 발표에서 증명할 수 없습니다 |
평가셋 expected를 내가 직접 채웠는가 | 정답의 주인은 업무를 아는 사람입니다 |
| 평가셋에 실명 · 실제 연락처 가 남아 있지 않은가 | 5.3절. 한 건이라도 남으면 프로젝트의 전제가 깨집니다 |
산출물 체크리스트 (33차시)
- 시나리오 한 장 (2.4절 양식,
[사람이 확인]줄 포함) - 로컬 적합성 판별표 (2.2절, 내 시나리오로 채움)
- 요구사항표 (ID, 형식 기준 · 의미 기준, 측정 차시)
- 성능 목표(SLO) 한 줄 이상 — 예: "동시 10명 TTFT p95 < 1초" → 39차시에서 씀
- 범위 밖 목록
- 평가셋 v1 (30건 이상, 묶음별 태그, 가명 처리 완료,
expected는 사람이 작성) - 가명 처리 규칙표 (5.3절)
부록 A. 스스로 확인하기
| # | 질문 | 답이 있는 곳 |
|---|---|---|
| 1 | 5일차에 평가셋이 다시 쓰이는 세 차시와 각각의 용도는? | 1.1 |
| 2 | 업무 시나리오를 유와 종차로 정의하면? 기능 목록과 무엇이 다른가? | 2.1 |
| 3 | 로컬 LLM에 맞는 시나리오의 네 조건과 맞지 않는 두 조건은? | 2.2 |
| 4 | "사내 규정 챗봇"이 이번 프로젝트에 맞지 않는 이유는? | 2.3 |
| 5 | "빠르게"와 "정확하게"를 완료 기준으로 바꾸면? | 3.2 |
| 6 | FR과 NFR은 무엇으로 갈리는가? | 3.3 |
| 7 | 추출 기능의 형식 기준과 의미 기준을 하나씩 대면? | 4.2 |
| 8 | 범위 밖 목록과 "미정"은 무엇이 다른가? | 4.3 |
| 9 | 평가셋을 모델 선정 전에 만들어야 하는 이유는? | 5.1 |
| 10 | 가명 처리할 때 형식을 유지하는 이유는? | 5.3 |
부록 B. 자주 하는 실수
| 실수 | 바로잡기 |
|---|---|
| "요구사항은 '빠르고 정확한 문의봇'이면 충분" | ❌ 형용사는 판정할 수 없습니다. 지표 + 숫자 + 측정 차시 |
| "JSON이 나오면 추출 기능은 완료" | ❌ 형식 기준만 통과. 의미 기준(본문에 실제로 있는 값인가) 을 따로 |
| "모델부터 고르고 평가셋은 나중에" | ⚠️ 고른 모델에 유리한 평가셋이 되기 쉽습니다. 평가셋이 먼저 |
| "평가셋 정답도 AI에게 만들게 하자" | ❌ 자가 채점. expected는 사람이 |
| "원본 메일을 AI에게 주고 가명 처리를 시키자" | ⚠️ 그 AI가 클라우드라면 이미 유출. 가명 처리는 사람이 먼저 |
| "범위 밖 목록은 쓸 필요 없다" | ❌ AI는 범위를 넓히는 쪽으로 움직입니다. 범위 밖 목록은 가이드 입니다 |
| "목표 숫자는 한번 정하면 못 바꾼다" | ⚠️ 바꿔도 됩니다. 이유를 기록 하면 |
부록 C. NotebookLM 복습 프롬프트
이 33차시 노트만 근거로 6문제를 내줘. 비전공자 기준으로.
"로컬 LLM에 맞는 시나리오 판별", "형용사 요구를 완료 기준으로 바꾸기", "형식 기준과 의미 기준", "평가셋이 첫 산출물인 이유"는 반드시 포함해줘.
답은 내가 답한 다음에 채점하고, 틀린 이유를 노트의 절 번호를 근거로 설명해줘.
LangTailor