[RAG Playground] Quest 1: 프로젝트 환경 세팅
RAG Playground (9부작)
- 1
- 2 [RAG Playground] Quest 1: 프로젝트 환경 세팅 (현재 글)
- 3
- 4
- 5
- 6
- 7
- 8
- 9
공공데이터포털 API를 활용해 다양한 RAG 기법을 실험해 보고자 시작한 프로젝트, ‘RAG Playground’. 이전 프롤로그 포스트에서 예고했던 대로 드디어 그 첫 번째 퀘스트인 ‘프로젝트 환경 세팅’을 시작해보려고 합니다 🎉
이 포스트에서는 앞으로 진행될 삽질(?)의 기반이 될 Python 프로젝트 초기 환경 설정에 대한 고민과 그 결과물을 정리해 보려 합니다. 패키지 매니저 선택부터 디렉토리 구조까지, 어떻게 첫 삽을 떴는지 공유해 볼게요~~
어떤 패키지 매니저를 쓸까? uv의 도입
항상 프로젝트를 시작할 때 가장 먼저 하는 고민, 바로 패키지 매니저 선택입니다. 예전 대학교에서 한참 파이썬을 만질 때는 주로
이후 AI 공부를 본격적으로 시작하면서 다시 파이썬으로 돌아왔더니 그사이 poetry가 대세가 되어 있더라고요? 맞나🫣?? 아무튼 찾아보니까 poetry가 많았어요 그래서 최근까지는 개인 공부나 회사 업무에서도 주로 poetry를 사용해 왔습니다!
하지만 또 최근 동향을 알아보니 uv로 가보기로 결정했습니다.
uv는 Rust로 작성된 Python 패키지 인스톨러 및 리졸버로, 다른 도구들과 비교가 안 되는 압도적인 속도를 자랑한다고 합니다. 제가 또 성능? 최적화? 이런 거 좋아하는 사람으로서 못 참죠 😎 그리고 Rust 요즘 굉장히 인기 언어 아닙니까? (나중에 기회가 되면 Rust도 공부해 볼 예정!)
프로젝트를 진행하다 보면 LangChain, LlamaIndex, OpenAI 같은 LLM 관련 라이브러리뿐만 아니라 필요에 따라 다양한 패키지들을 수시로 설치하고 지우게 될 것이기 때문에, 이런 상황에서 uv의 빠른 속도는 답답함을 줄이고 쾌적한 실험 환경을 만들어 줄 것이라 기대 중입니다:)
# uv 설치 및 프로젝트 초기화 시작!
# curl -LsSf https://astral.sh/uv/install.sh | sh
# uv init rag-playground
pyproject.toml과 uv.lock 시스템을 통해 의존성 버전 충돌이나 재현성 문제에서도 꽤 안정적인 관리가 가능할 것 같습니다.
핵심 뼈대가 될 의존성 패키지들
아직 구체적인 파이프라인 코드를 짜기 전이라, 가장 기본이 될 굵직한 라이브러리들만 먼저 세팅해 두려고 합니다 🧪
langchain,langchain-openai등: 핵심 LLM 연동 및 체인 로직 구성chromadb: 벡터 데이터베이스python-dotenv: API 키 등 환경 변수(.env) 직관적 관리pytest: 나중을 위한 최소한의 테스트 환경
디렉토리 구조는 어떻게 잡을까?
앞으로 수많은 실험과 스크립트들이 뒤엉키지 않도록, 시작부터 어느 정도 구획을 나눠두는 게 중요할 것 같아요. 다음과 같이 구조를 잡아봤습니다.
rag-playground/
├── src/
│ └── rag_playground/ # 소스코드
│ ├── __init__.py
│ ├── config.py # 환경설정
│ ├── data/ # 공공데이터 수집/파싱 스크립트들
│ └── rag/ # RAG 코어 로직 (로더, 임베딩, 체인 등)
├── tests/ # (언젠가 짜야 할) 테스트 코드들
├── .env # 환경변수
└── pyproject.toml # 프로젝트 설정
다음 퀘스트: 본격적인 데이터 수집! 🏃♂️
뼈대 공사는 얼추 마무리가 되었으니, 이제 본격적으로 코드를 짜고 싶어서 손이 근질근질하네요 👊
다음 포스트에서는 드디어 메인 재료인 ‘공공데이터’를 실제로 긁어오고(문서 로딩), 데이터를 이리저리 다루며 쪼개보는(청킹) 작업을 진행해 보겠습니다.