Skip to content

[기능] CLI 실행 옵션을 UI에서 통합 관리하도록 개선 #180

@ehddnr301

Description

@ehddnr301

기능 설명 (Description)

  • 현재 Lang2SQL 프로젝트는 여러 CLI 옵션을 통해 실행 및 설정을 해야 합니다. 예를 들어, Streamlit 웹 UI 실행을 위해 lang2sql --datahub_server <서버주소> run-streamlit -p <포트> 처럼 복수의 플래그를 지정해야 합니다.
  • 이러한 복잡한 CLI 실행 옵션을 웹 UI 내에서 통합 관리하고자 합니다. 즉, 다양한 실행 파라미터(데이터허브 서버 URL, DB연결정보, VectorDB설정 등)를 UI에서 설정하도록 하여 사용자가 명령어 옵션을 직접 입력하지 않고도 편리하게 앱을 실행하고 구성할 수 있는 기능을 추가하려고 합니다.

왜 필요한가요? (Motivation / Use Case)

  • 사용 편의성 향상: 현재는 OpenAI API 키, DataHub 서버 주소 등 여러 설정을 .env 파일에 기입하고, 실행 시에도 여러 CLI 플래그를 전달해야 합니다. 초기 세팅 진입 장벽이 높아 비개발자나 초심자에게 어려움을 줍니다. UI 통합을 통해 이러한 설정을 그래픽 인터페이스에서 입력할 수 있다면 설정 과정이 단순해집니다.
  • 실행 시나리오: 사용자가 웹 UI에 접속하자마자 데이터허브 서버나 데이터베이스 연결 정보를 입력/선택하고 OpenAI API Key 등을 설정하는 화면을 제공하고, 이후 자연어 쿼리 -> SQL 변환 기능을 사용하는 흐름을 생각할 수 있습니다. 이러한 시나리오에서는 처음부터 CLI로 옵션을 넣고 재실행할 필요 없이, 웹에서 바로 설정 변경과 재시작/새로고침이 가능해집니다.

제안하는 해결 방법 (Proposed Implementation)

  • 환경변수 통합 관리: 기존에 .env로 설정하던 OPENAI_API_KEY, LANGCHAIN_ 시리즈, DATAHUB_SERVER* 등의 변수를 UI에서 관리할 수 있도록 합니다
  • UI에 “설정(Settings)” 페이지 또는 모달을 만들어 OpenAI API Key, DataHub 서버 URL 등을 입력받고, 애플리케이션 내부 환경 변수나 설정 객체를 업데이트하도록 구현합니다.
    • CLI 진입점 최소화: lang2sql 실행 명령을 간소화합니다. 기본 동작으로 바로 Streamlit UI를 실행하도록 하고, port 옵션정도만 남깁니다.
    • 구성 관리 모듈화: 설정값을 전역으로 관리하는 Config 클래스를 도입하거나, 현재 전역 변수/환경변수 사용 부분을 리팩토링하여 단일 진입점에서 설정 로드/저장이 가능하도록 합니다. 앱 시작 시 .env나 OS 환경변수를 읽고, UI에서 변경이 발생하면 해당 Config를 업데이트하며, 이 Config를 참조하는 각 컴포넌트(LLM 프롬프트 생성 모듈, DataHub 연동 모듈 등)가 실시간으로 반영받도록 구조를 개선합니다.
    • 문서 업데이트: CLI 옵션을 UI로 이전함에 따라 기존 README와 사용법 문서 수정이 필요합니다. 새로운 UI 설정 방법, 그리고 여전히 CLI로 설정할 수 있는 항목이 있다면 (예: 초기 포트 지정 등) 그 부분을 명시합니다.

대안 (Alternatives)

  • TBD

추가 고려사항 (Additional Context)

  • 보안 및 키 관리: UI에서 API 키 등을 입력받도록 할 경우, 해당 키를 백엔드 세션에 안전하게 저장하고 로그 등에 노출되지 않도록 해야 합니다. 환경변수로 관리하면 코드에는 노출되지 않지만 UI에서 입력 시 암호 필드 처리, 혹은 암호화 저장 등의 대비가 필요합니다.
  • 향후 확장성: 이번 UI 통합 작업은 추후 멀티 DB 지원과도 연계됩니다. 예를 들어, UI 설정에 여러 개의 DB 커넥션(프로덕션, 스테이징 등)을 등록/선택할 수 있게 확장하는 방안을 미리 염두에 두고 구조를 잡으면 향후 요구사항도 수월하게 수용할 수 있습니다. 또한 DBMS 전환 기능 구현 시 현재 UI의 설정 관리 컴포넌트에 해당 옵션을 추가하는 식으로 발전시킬 수 있습니다. 157 이슈, 139 이슈

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions