19차시. Node 이해
2. 왜 굳이 함수를 쪼갤까?
출처: 원본 PDF 19차시_Node이해.pdf 5~6쪽 · 쪽 그림 5쪽 6쪽
15차시에서 만든 ask() 함수는 잘 동작합니다. 왜 나눠야 할까요?
2-1) 한 덩어리일 때의 문제
■ 15차시의 ask() — 세 가지 일을 한꺼번에
──────────────────────────────────────────
def ask(question):
docs = _search(question) # ① 검색
if not docs:
return {"answer": "자료 없음"} # ② 분기 판단
answer = _chain.invoke(...) # ③ 생성
return {"answer": answer, ...}⚠️ 한 덩어리로 두면
① 검색만 따로 테스트할 수 없습니다
검색 결과를 보려면 LLM 호출까지 해야 합니다 (비용!)
② 중간에 검증을 끼워 넣기 어렵습니다
함수를 크게 뜯어고쳐야 합니다
③ 어디가 느린지 모릅니다
검색이 느린지 생성이 느린지 알 수 없습니다
④ 일부만 교체할 수 없습니다
생성 방식만 바꾸고 싶어도 전체를 건드립니다
2-2) 쪼개면 달라지는 것
■ 노드로 쪼갠 뒤
──────────────────────────────────────────
def retrieve_node(state): ... # 검색만
def generate_node(state): ... # 생성만
def verify_node(state): ... # 검증만 (새로 추가!)
→ retrieve_node만 100번 돌려도 LLM 비용 0원
→ verify_node를 사이에 끼우기만 하면 됩니다
→ 노드별 실행 시간을 각각 잴 수 있습니다
→ generate_node만 교체해도 나머지는 그대로🔧 자동차 정비에 비유하면
엔진 · 변속기 · 브레이크가 통째로 붙어 있다면
브레이크 패드 하나 갈려고 엔진을 내려야 합니다.
부품이 나뉘어 있으면
브레이크만 열어서 갈면 됩니다.
노드 분리 = 정비 가능한 구조 만들기