💡
기획서대로 완성된 프로젝트가 11월(버그까지 생각하면 11월 중순) 안으로 나오느냐가 가장 중요
→ 주요 기능만 제대로 구현되어도 좋은 점수를 얻을 수 있기 때문
-
POINT
- 기한에 맞춰 구현할 수 있는 기능을 잘 기획하기
-
프로젝트 목표
제품 사용 설명서(PDF)를 기반으로 대화할 수 있는 챗봇 만들기
- 위 기능이 정상 작동한 후에 다른 기능을 추가로 붙이기
-
필수 기능
- PDF 텍스트 추출
- 문서 chunking & embedding
- 만약 어려우면 context caching을 먼저 해보는 것도 좋음
- RAG 질의응답 엔진
-
필수 기능 구현 후 추가하면 좋을 기능
- 프론트, 웹 인터페이스
- 1차 목표는 데모처럼 간단하지만 기능 구현이 되는 것으로 잡기
- 관리자 콘솔
- 자동 완성 및 유사 질문 추천
- 보안 및 운영 자동화
- FAQ 기능
-
고민해야 할 부분
- LLM
- Chunking & Embedding
- OpenAI 가격 고려 필요
- KoSimCSE 사용 시 GPU가 필요할 수도 있는데, 가능한지 확인 필요
- 성능 평가 방법: 아래의 항목들을 어떻게 측정할 것인가? 측정 방법에 대해 생각해 보았는가?
- 응답 정확도 85%
- FAQ 자동 갱신율 80% 이상
- 반복 문의율 감소 등
- 응답 시간
- 5초, 3초 등이 실제로 짧은 시간임. (chatGPT나 gemini 등을 사용해보면 생각보다 시간이 오래 걸림)
필수 기능 공부
PDF 텍스트 추출
-구조 분석은 옵션으로 추후에 추가
문서 chunking & embedding
- 어려우면 context caching을 먼저 해보는 것도 좋음
RAG 질의응답 엔진
구현 관련
- 사용자가 QR코드를 찍으면 사용 설명서별 챗봇에 연결되는 시스템
- 로컬 서버로 구현 가능하지만 외부 접근 조건 필요
- 로컬 서버가 사내망 또는 특정 네트워크에만 있으면 외부 사용자가 직접 접속 불가
- 외부 사용자가 접속하려면 네트워크를 인터넷에 노출하거나 VPN, 포트포워딩 등의 네트워크 설정 필요
- QR코드는 서비스 접속용 URL 포함
- 예:
http://your_server_ip_or_domain:포트/챗봇서비스
- 네트워크가 공개되거나 외부 접근 가능해야 QR코드를 통한 접속 가능
클라우드 배포까지 고려해보기
- 제대로 된 도메인과 HTTPS 지원 가능
- 자동 확장, 장애 대응 등 높은 가용성 보장
- 전 세계 어디서나 접속 가능
- Pinecone 같은 클라우드 벡터 DB, 클라우드 DB 활용 가능
- API, 웹, 모바일 앱 연동도 쉽게 가능
즉, 실제 서비스로서 외부 사용자에게 편리하고 안정적으로 제공 가능
단계별 전략
| 단계 | 설명 | 네트워크 조건 | 목적 |
|---|
| 1단계 (로컬) | 로컬 서버 or 사내망 내에서 개발 및 내부 테스트 | 내부망 또는 제한적 공개 | 프로토타입 개발 및 초기 검증 |
| 2단계 (VPN/포트포워딩) | 외부 제한 접속 환경 구성 (VPN, 포트포워딩 등) | 일부 외부 접근 허용 | 사용자 소규모 베타 테스트 |
| 3단계 (클라우드 배포) | AWS, GCP, Azure 등 클라우드에 서비스 배포 | 전면 공개 및 글로벌 접근 가능 | 공식 서비스 및 확대 |
QR코드 연결 시나리오
- 관리자가 PDF 등록 → 챗봇 백엔드에 청킹·임베딩→ 벡터 DB 및 MySQL 저장
- 각 제품별 고유 URL 발급(문서ID 기반) → 해당 URL을 QR코드로 생성
- 제품에 QR코드 부착 → 사용자가 스마트폰 등으로 QR코드 스캔
- QR코드 내 URL 접속 → 해당 매뉴얼 내용 기반 QA 챗봇 인터페이스 접속
- 사용자 질문 시 챗봇이 벡터 DB에서 해당 매뉴얼 관련 정보 검색 후 답변 제공
로컬 서버 권장 구성
- 공인 IP 또는 DDNS 설정
- 웹서버(Flask/FastAPI 등) HTTPS 통신 구성 (예: Let’s Encrypt 인증서)
- 방화벽 및 인증 정책 강화 (필요시)
- 내부망 사용자 테스트 → 외부(제한) 사용자 베타 테스트
결론
- 로컬/사내 환경에서도 네트워크 환경만 갖춰지면 QR코드 기반으로 서비스 접속 가능
- 클라우드 배포 시 서비스 안정성, 확장성, 글로벌 접속성 크게 개선
- 단계별로 개발·테스트→베타→상용 서비스를 진행하는 것이 무리 없고 효율적
DB 관련
MySQL 벡터 기능 현황 요약
MySQL 최신 버전에서 벡터 데이터 타입 및 일부 벡터 연산 기능이 추가되고 있긴 하지만, 현재 MySQL은 전용 벡터 DB가 제공하는 고속·대규모 유사도 검색 기능과는 차이가 큼
- MySQL 8.0 이후
VECTOR 데이터 타입이 도입되어 임베딩 등 벡터 데이터를 저장 가능
- 최근 버전에서는 단일 벡터 간의 거리 계산(예: Cosine, Euclidean) 함수 일부 지원
- 하지만 대규모 벡터 컬렉션에 대한 효율적인 인덱싱(k-NN 검색) 기능은 아직 기본 지원하지 않음
- 즉, 대량 벡터를 빠르게 검색하는 RDBMS 내장 엔진은 아직 미흡한 상태
왜 전용 벡터 DB를 따로 쓰는가?
- FAISS, Pinecone, Milvus 등은 벡터 임베딩 검색에 특화된 고성능 인덱스 구조(예: IVF, HNSW 등)와 최적화된 거리 계산 알고리즘을 적용
- MySQL의 벡터 기능은 현재 벡터를 저장하고 간단 연산은 가능하지만,
- 대규모 벡터 데이터에 대한 실제 k-NN 검색을 고속·효율적으로 처리하는 데는 한계
- 실시간 고성능 검색 서비스 구현에는 부적합
| 기능 | MySQL 벡터 지원 | FAISS / Pinecone 벡터 DB |
|---|
| 벡터 저장 | 가능 | 가능 |
| 기본 벡터 연산 | 제한적 (거리 계산 함수 등) | 특화된 고속 k-NN 검색 지원 |
| 대규모 고속 유사도 검색 | 미지원 (대량일수록 비효율) | 대량에 최적화, 수백만개 이상 벡터 빠름 |
| 자동 스케일링·분산 처리 | 부재 | 지원 (관리형 서비스 포함) |
MySQL 벡터 기능은 보조·저장용으로 활용하고, 고속 유사도 검색과 벡터 DB 역할은 FAISS, Pinecone 같은 전용 벡터 DB에 맡기는 것이 실무 표준
DB 흐름
로컬 PC 또는 사내 서버 환경
- FAISS 벡터 DB를 로컬 PC 또는 사내 서버에 구축
- 임베딩 벡터를 FAISS 인메모리 또는 디스크 인덱스로 관리
- MySQL은 별도의 DB 서버로 운영하며 메타데이터(문서, 청크 정보 등) 저장
- 벡터 ID / 메타데이터 ID를 연동하여 검색 시 결과 통합
- 즉, 벡터 검색과 메타데이터 조회를 분리 운영하나, 애플리케이션 레벨에서 연동하는 구조
클라우드 환경 (예: AWS, GCP, Azure)
- 인기 방식:
- 임베딩 및 벡터 관리는 관리형 클라우드 벡터 DB 서비스인 Pinecone, Weaviate, Milvus 클라우드 버전 등을 활용
- MySQL은 RDB 관리용 클라우드 DB(Aurora, Cloud SQL 등)로 별도 운영
- 벡터 검색 서비스 → 벡터 ID → MySQL 메타데이터 조회를 API 레벨에서 연결
- 이렇게 하면 벡터 DB는 완전 관리형으로 운영 부담 ↓, 확장성 ↑
구성 요약
| 환경 | 벡터 DB | 메타데이터 DB | 연동 포인트 |
|---|
| 로컬/사내 서버 | FAISS(직접운영) | MySQL(직접운영) | 앱(백엔드) 레벨에서 벡터 ID + 메타 연동 |
| 클라우드 | Pinecone 등 관리형 | 클라우드 MySQL | API 서버에서 벡터 서비스와 메타 DB 연결 |
참고 사항
- FAISS는 벡터 DB로서 강력하지만 운영·확장·백업 등 관리가 전적으로 사용자에게 있음
- Pinecone 등은 자동 스케일링과 복제, 보안 모두 제공하므로 서비스 안정성 높음
- MySQL은 메타데이터 관리에 특화되어 있어, 구조화 정보·원본 텍스트 등 저장에 적합
- 둘 연동은 벡터 검색한 후 결과 ID를 MySQL에서 다시 조회하는 형태로 구현