31차시. 예외 처리 설계
이번 차시에서 배우는 것
출처: 원본 PDF 31차시_방어적코딩실습.pdf 1쪽 · 쪽 그림 1쪽
예외 처리 설계 — 어떤 상황에서도 죽지 않기
✓ 시스템의 실패 지점을 빠짐없이 목록화한다 ✓ 부분 실패를 허용하는 설계를 이해한다 ✓ Fallback을 상황별로 계층화한다
✓ 사용자에게 불확실성을 정직하게 알린다 ✓ 타임아웃과 재시도 정책을 설정한다
✓ 운영에 필요한 로그를 남긴다
교안 해설: 이 시간에 하는 일
출처: 교안 31_예외처리설계.md
노드가 늘면 실패 지점도 늘습니다. 분류의 형식 오류, 인덱스가 없음, 모델 호출 한도, 검증 JSON 파싱 실패가 각각 납니다. 예외가 그래프 밖으로 나가면 사용자에게는 빈 실패만 남습니다.
safe.py는 노드 함수를 감싸 예외가 나도 그 노드용 기본 State를 돌려주고 오류 문자열을 남깁니다. 이 파일은 실제로 실행했습니다. 정상 반환과 일부러 낸 오류가 샘플에 있습니다. 모든 예외를 삼키기만 하면 조용한 실패가 됩니다. 로그에 종류와 위치가 있어야 합니다.
analyze_logs.py는 logs/queries.jsonl을 집계합니다. 원본 로그 6건을 실행한 결과 통과율 67%, 재작성 17%, 평균 약 1.9초, 오류 0이었습니다. logger.py는 실행하면 로그 파일을 추가하므로 실행하지 않았습니다. 안내 문장은 '못 찾음'과 '요청이 많음'을 나누어 사용자가 다음에 할 일을 다르게 알게 합니다.
강의 PPT 흐름
출처: 강의 PPT 31차시_예외처리설계.pptx (21장)
| 장 | 꼬리표 | 슬라이드 제목 |
|---|---|---|
| 1 | - | 실습으로 배우는 LangGraph : 내 손으로 RAG 시스템 만들기 |
| 2 | LEARNING GOALS | 이번 차시에서 배우는 것 |
| 3 | FAILURE POINTS | 시스템이 커질수록 실패 지점도 늘어납니다 |
| 4 | WITHOUT HANDLING | 예외 처리가 없는 시스템의 최후 |
| 5 | KEY TERMS | 핵심 용어 |
| 6 | EMERGENCY ROOM | 응급실 비유 |
| 7 | PARTIAL POLICY | 단계별 부분 실패 정책 |
| 8 | FALLBACK LAYERS | 상황별로 안내를 나눕니다 |
| 9 | WHY SPLIT | 사용자의 다음 행동이 달라집니다 |
| 10 | UNVERIFIED | 미검증 답변을 정직하게 표시하기 |
| 11 | SAFE NODE | 모든 노드가 같은 방식으로 실패하게 |
| 12 | TIMEOUTS | 무한정 기다리지 않게 |
| 13 | PRAGMATIC | deadline을 State에 넣는 이유 |
| 14 | STRUCTURED LOGS | 운영은 감이 아니라 로그로 합니다 |
| 15 | FAILURE DRILL | 일부러 고장 내보기 |
| 16 | SILENT FAILURE | 예외를 무조건 잡으면 안 되는 이유 |
| 17 | TROUBLESHOOTING | 자주 겪는 문제 |
| 18 | CHECKLIST | 이번 차시 체크리스트 |
| 19 | ASSIGNMENT | 이번 차시 과제 |
| 20 | NEXT | 다음 차시 미리보기 — 32차시 고도화 Modular RAG |
| 21 | - | 마무리 |