15차시. 기본 RAG 앱 만들기
6. 예외 처리 — 앱이 죽지 않게
출처: 원본 PDF 15차시_기본RAG앱만들기.pdf 12쪽 · 쪽 그림 12쪽
실험 코드와 앱의 가장 큰 차이입니다. 앱은 어떤 상황에서도 죽으면 안 됩니다.
6-1) 대비해야 할 상황
| 상황 | 처리 없으면 | rag.py의 처리 |
|---|---|---|
| 빈 질문 입력 | 이상한 검색 실행 | 안내 메시지 반환 |
| 검색 결과 0건 | IndexError | "자료 없음" 반환 |
| API 키 만료 | 프로그램 종료 | 오류 메시지 반환 |
| 네트워크 끊김 | 프로그램 종료 | 오류 메시지 반환 |
| API 한도 초과 | 프로그램 종료 | 오류 메시지 반환 |
🛡️ 예외 처리의 원칙
① 사용자에게는 친절한 메시지를
"RateLimitError: 429" ❌
"잠시 후 다시 시도해주세요" ✅
② 개발자에게는 진짜 원인을
print나 logging으로 실제 에러를 남깁니다
③ 반환 형식은 항상 같게
성공이든 실패든 같은 딕셔너리 구조로 돌려줍니다
→ 부르는 쪽이 분기 처리를 안 해도 됩니다
💡 반환 형식을 통일하는 것이 중요합니다
{"answer": ..., "sources": [...], "ok": True/False}
성공하든 실패하든 이 형태입니다.
그래서 app.py는 이렇게만 쓰면 됩니다.
result = ask(q)
print(result["answer"])
이 딕셔너리 구조가 18차시 State의 원형입니다.