Skip to content

프로젝트 리팩토링 #134

@ehddnr301

Description

@ehddnr301

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 maintainability

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions