-
Notifications
You must be signed in to change notification settings - Fork 10
Closed
Labels
refactorRefactor codebase for clarity, modularity, and maintainabilityRefactor codebase for clarity, modularity, and maintainability
Description
Why❓
- 현재 코드베이스에 사용되지 않는 기능들과 초기 구현되고 성능이 저조한 기능들이 잔존하여 유지보수와 이해를 어렵게 만들고 있습니다.
- 이는 개발/운영 환경에서 CLI 형태의 빠른 실행이나 자동화 파이프라인 통합을 어렵게 하고 있습니다.
- 종속성 관리에 pip만 사용하고 있어 설치 속도가 느리고 환경 불일치 이슈가 있을 수 있습니다.
- 자연어→SQL 변환 파이프라인 로직이 복잡하게 설계되어있어 기여가 힘든 상황입니다.
- 이러한 구조에서는 시스템 유연성이 낮습니다.
How❓
- 레거시 코드 정리: 기존에 구현되었으나 현재 활용되지 않는 기능들을 식별합니다. evaluation 관련 모듈이나 초기 프롬프트 템플릿 등 사용하지 않는 코드를 제거하고, 꼭 필요하지 않은 복잡한 로직은 간소화합니다. 이를 통해 코드베이스를 핵심 기능 위주로 슬림화합니다.
- uv로 전환: 패키지 관리 도구를 pip에서 uv로 전환하여 개발 환경을 개선합니다. pyproject.toml을 도입하고 문서에 uv 사용 방법을 안내함으로써, 일관된 환경 설정과 신속한 의존성 설치를 지원합니다
- 단계별 모듈화: LangGraph 등의 워크플로우 오케스트레이션 개념을 참고하여, 자연어 질문 처리 → 관련 테이블 검색 → SQL 생성 → 결과 출력/시각화의 각 단계를 별도 모듈/레이어로 분리합니다. 단계별로 함수나 클래스를 구현하고 추상화된 인터페이스를 정의하여, 코드가 단계별 동작을 명확히 표현하도록 리팩터링합니다.
- 부분 실행 및 개입: 리팩터링된 구조에서는 원하는 단계까지만 실행할 수 있는 옵션을 제공합니다. 예를 들어 테이블 검색까지만 수행하고 중간 결과(테이블 목록)를 사용자에게 제공한 뒤, 확인된 테이블로 이후 단계(쿼리 생성)를 진행할 수 있게 합니다. LangGraph의 Human-in-the-Loop 기능처럼 워크플로우 중간에 사용자 개입 지점을 둘 수 있도록 구현합니다
- UI와 핵심 로직 분리: Streamlit 등 UI 코드에 녹아 있던 핵심 동작 로직을 분리하여 별도의 모듈로 구성합니다. 이렇게 하면 CLI 인터페이스에서도 동일한 핵심 로직을 호출할 수 있고, UI 변경과 상관없이 비즈니스 로직을 독립적으로 테스트하거나 재사용할 수 있습니다.
What❓
To-Do List (Divide and Conquer)
- evaluation 모듈 정리: 현재 사용되지 않는 평가용 코드, 우선 제거 후 추후 재기여
- 초기 프롬프트 삭제/통합: 초기 버전에 구현된 프롬프트 템플릿 등 불필요한 부분을 정리하고, 현재 워크플로우에 맞게 프롬프트 관리 로직을 단순화.
- 불필요 기능 축소: 핵심 기능에 기여하지 않고 코드 복잡도만 높이는 확장 기능 식별하여 제거 또는 옵션화
- uv 도입으로 환경 설정 개선: pyproject.toml 작성 및 uv 기반 설치 스크립트 추가. CI 환경에서 uv 사용 테스트 및 문서에 설치 방법 업데이트
- 파이프라인 단계별 모듈화: 자연어 파싱, 테이블 검색, 쿼리 생성 등 단계별 함수/클래스 구현 및 각 단계 간 데이터 인터페이스 정의.
- 부분 실행 옵션 구현: 파이프라인 실행 함수에 특정 단계까지만 수행하는 모드를 추가하기
Metadata
Metadata
Assignees
Labels
refactorRefactor codebase for clarity, modularity, and maintainabilityRefactor codebase for clarity, modularity, and maintainability