커널아카데미에서의 2번째 프로젝트가 끝났다.
3주동안의 프로젝트였지만, 오랜만에 밤을 새기도 하고 하루에 3시간 이내로 자면서 해본 프로젝트인 것 같다. 챗봇, AI에 대해 아무것도 모르던 내가, 이제는 RAG 전처리에 대해서는 어느정도 할 줄 알게 되었다. Java와 python을 api로 처음 연결해보았고, FastAPI, Swagger, ElasticSearch, OpenAI, Gemini, Ollama 등을 이용한 RAG 구성 등 해보고 싶은 것은 다 해본 것 같다.
너무나도 재밌었던 프로젝트였다. 1팀 팀원분들 너무 고생많았고, 다들 묵묵히 자기 할일들을 해줘서 너무 고마웠다. 솔직히 나는 팀원들이 차려준 밥상에 숟가락만 얹어서 먹기만 했는데, 생각보다 결과물이 잘나온 것 같았다. 에러도 많이 뜨고, 시행착오도 많이 겪었지만 좋은 경험을 한 것 같다.
프로젝트에 간략하게 설명을 하고 회고를 마무리하려고 한다.
시스템 아키텍처
멀티 컨테이너 구조
- Spring Boot: 사용자 인증, 상태 관리, PDF 렌더링, 노트 관리
- FastAPI + LangChain: AI 로직, RAG 처리, LLM 호출
- MySQL: 사용자 데이터, 채팅 이력, 노트 정보 저장
- Elasticsearch: 문서 임베딩 및 벡터 검색
모든 서비스는 Docker Compose로 통합 관리되며, backend 네트워크로 연결되어 내부 DNS를 통해 안정적인 서비스 간 통신을 구현함.
핵심 기능 구현
1. 상태 기반 챗봇 시스템
- 15개의 세부 상태로 구성된 대화 흐름
- 기능 선택 → 문제 생성 → 답변 평가 → 피드백 → 다음 액션
- 각 상태에 적절한 응답과 다음 단계 안내 제공
2. RAG (Retrieval-Augmented Generation) 구현
- PDF 문서 청킹 및 임베딩 생성
- Elasticsearch를 활용한 의미 기반 유사도 검색
- 검색된 문서를 기반으로 LLM이 응답 생성
3. 멀티 LLM 지원
- OpenAI GPT-4
- Google Gemini
- Ollama (로컬 기반 모델)
기술적 성과
Java ↔ Python API 연동
- Spring WebClient 기반 FastAPI 호출 구조 구축
- 타임아웃 설정 및 예외 핸들링으로 안정성 확보
벡터 검색 시스템
- Elasticsearch의 dense_vector 활용
- Nori 분석기 적용으로 한국어 검색 성능 개선
API 문서화
- FastAPI의 Swagger 자동 문서화 기능으로 개발 협업 효율성 향상
프로젝트 성과
완성된 주요 기능
- PDF 업로드 및 전처리
- 상태 기반 대화 흐름 관리
- RAG 기반 문제 생성
- 개념 설명 및 페이지 추천
- 사용자 인증 및 이력 관리
- 반응형 웹 인터페이스 구현
기술적 안정성
- Docker Compose 기반의 일관된 개발 및 배포 환경
- 환경 변수 관리로 보안 강화
- 서비스 간 의존성 및 연결 구조 명확화
배운 점
멀티 서버 아키텍처의 이해
- 서로 다른 언어(Spring Boot, FastAPI)를 API로 연결하며 마이크로서비스 설계 이해도 향상
RAG 시스템 설계 및 구현
- 임베딩, 벡터 검색, 컨텍스트 기반 생성형 AI 흐름을 실제 구현을 통해 체득
상태 관리의 중요성
- 사용자 응답 흐름을 유도하기 위한 설계와 상태 전이 관리의 필요성 깊이 인식
개선 사항 및 향후 과제
성능 최적화
- 캐싱 시스템 도입으로 반복 질의 응답 속도 개선
- 임베딩 처리 시간을 줄이기 위한 배치 처리 도입
확장성 확보
- 다중 사용자 동시 접속을 위한 비동기 처리 구조 개선
- 대용량 PDF 처리 효율성 향상
모니터링 및 로깅
- 실시간 상태 확인을 위한 모니터링 시스템 구축
- 사용자 로그 수집 및 분석 체계 마련
결론
이번 프로젝트를 통해 기획부터 개발, 배포까지 AI 애플리케이션의 전반적인 구조를 경험할 수 있었습니다. 특히, RAG 시스템을 처음부터 직접 설계하고 구축하면서 생성형 AI가 실질적으로 어떤 방식으로 학습 도우미 역할을 수행할 수 있는지를 체감할 수 있었습니다.
멀티 서버 아키텍처, 상태 기반 챗봇 설계, 벡터 검색 등의 기술적 요소들을 조화롭게 연결하며
완성도 있는 결과물을 만들어낸 값진 경험이었습니다.