LangGraph 기반 Refactoring - 100-hours-a-week/12-marong-Wiki GitHub Wiki

📍 LangGraph 기반 마니또 미션 생성 파이프라인 Refactoring

본 문서는 기존의 순차적 실행 구조를 개선하여 LangGraph 기반의 상태 지향 파이프라인으로 리팩토링한 과정을 정리하였음. 이를 통해 난이도별 미션 생성 흐름을 동적으로 제어하고, 중간 상태 저장 및 오류 대응이 용이해졌으며, 다단계 미션 생성 로직의 유지보수성과 확장성이 향상되었음.


✔️ 기존 문제점

  • 난이도별 미션을 고정된 순서로 생성 → 동적 제어 어려움
  • 중복 제거, 후처리, 평가 등 단계가 모두 메인 로직에 결합되어 있어 유지보수 어려움
  • 중간 단계 실패 시 전체 파이프라인 실패 가능성 존재
  • 흐름 제어 및 조건 분기 로직을 코드상에서 직접 구현해야 해 복잡도 증가

✔️ LangGraph 도입 목적

  • 상태 기반 흐름 제어를 통해 난이도별 생성 로직을 명확히 분리
  • 노드 단위 처리로 후처리, 평가, 중복 제거 등 각 단계를 모듈화
  • 에러 복구 및 중간 상태 기록 가능 → 장애 복원력 향상
  • 난이도별 생성 개수/조건을 실시간으로 체크하며 유연한 생성 가능

✔️ 노드 구성 및 설명

노드 이름 설명
check_completion_node 난이도별 생성 완료 여부 판단 (예: 상 5개, 중 10개, 하 15개 생성 여부 확인)
select_query_node 난이도에 맞는 쿼리를 무작위 선택
rag_node 선택한 쿼리를 기반으로 ChromaDB에서 유사 예시 검색
generate_mission_node LangChain + HyperCLOVA-X 기반으로 실제 미션 생성
postprocess_node 미션 정제(부적절 표현 제거), 이모지 부착, 난이도 분류, DBSCAN 기반 중복 제거 수행
eval_node EXAONE 기반 평가 LLM으로 미션의 일관성/적절성/창의성/실행 가능성 평가
update_state_node 생성 결과를 바탕으로 현재 난이도 상태 업데이트 및 다음 생성 조건 판단

✔️ 파이프라인 흐름 요약

  1. check_completion_node에서 현재 난이도별로 미션이 모두 생성되었는지 판단
  2. 생성이 필요한 경우, select_query_node에서 적절한 쿼리를 선택
  3. rag_node에서 관련 예시를 검색해 LLM 입력에 사용될 문맥 구성
  4. generate_mission_node를 통해 LLM으로 미션 생성
  5. postprocess_node에서 클린업 및 분류, 중복 제거 등 전처리 수행
  6. eval_node에서 생성된 미션이 기준에 부합하는지 평가
  7. update_state_node에서 다음 생성 조건을 업데이트하고 루프 반복

✔️ 리팩토링 효과

  • 가독성: 각 단계를 명확한 노드로 분리하여 구조적 이해 용이
  • 확장성: 노드 추가만으로 로직 확장 가능 (예: feedback_node 등)
  • 유지보수: 오류 발생 지점을 빠르게 파악 및 핫스왑 가능
  • 재사용성: 각 노드는 독립적으로 재사용 가능
  • 유연성: 난이도별 생성 수량/순서/조건 등 실시간 제어 가능