[인공지능사관학교: 자연어분석A반] 기업연계 프로젝트 9일차

Suhyeon Lee·2025년 10월 16일

💡
기획서대로 완성된 프로젝트가 11월(버그까지 생각하면 11월 중순) 안으로 나오느냐가 가장 중요
→ 주요 기능만 제대로 구현되어도 좋은 점수를 얻을 수 있기 때문

  • POINT

    • 기한에 맞춰 구현할 수 있는 기능을 잘 기획하기
  • 프로젝트 목표

    • 제품 사용 설명서(PDF)를 기반으로 대화할 수 있는 챗봇 만들기
      • 위 기능이 정상 작동한 후에 다른 기능을 추가로 붙이기
  • 필수 기능

    • PDF 텍스트 추출
      • 구조 분석은 옵션으로 추후에 추가
    • 문서 chunking & embedding
      • 만약 어려우면 context caching을 먼저 해보는 것도 좋음
    • RAG 질의응답 엔진
  • 필수 기능 구현 후 추가하면 좋을 기능

    • 프론트, 웹 인터페이스
      • 1차 목표는 데모처럼 간단하지만 기능 구현이 되는 것으로 잡기
        • 관리자 콘솔
        • 자동 완성 및 유사 질문 추천
        • 보안 및 운영 자동화
        • FAQ 기능
  • 고민해야 할 부분

    • LLM
      • 어떤 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코드 연결 시나리오

  1. 관리자가 PDF 등록 → 챗봇 백엔드에 청킹·임베딩→ 벡터 DB 및 MySQL 저장
  2. 각 제품별 고유 URL 발급(문서ID 기반) → 해당 URL을 QR코드로 생성
  3. 제품에 QR코드 부착 → 사용자가 스마트폰 등으로 QR코드 스캔
  4. QR코드 내 URL 접속 → 해당 매뉴얼 내용 기반 QA 챗봇 인터페이스 접속
  5. 사용자 질문 시 챗봇이 벡터 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 등 관리형클라우드 MySQLAPI 서버에서 벡터 서비스와 메타 DB 연결

참고 사항

  • FAISS는 벡터 DB로서 강력하지만 운영·확장·백업 등 관리가 전적으로 사용자에게 있음
  • Pinecone 등은 자동 스케일링과 복제, 보안 모두 제공하므로 서비스 안정성 높음
  • MySQL은 메타데이터 관리에 특화되어 있어, 구조화 정보·원본 텍스트 등 저장에 적합
  • 둘 연동은 벡터 검색한 후 결과 ID를 MySQL에서 다시 조회하는 형태로 구현
profile
2 B R 0 2 B

0개의 댓글