Overview

💬 사내 문서에 대한 Q&A 챗봇 개발

  • 네이버 클라우드에서 고객사의 문서 데이터를 취급하기 위한 인프라 및 보안 설계
  • 챗봇 형태의 PoC 서비스 아키텍처 설계
  • 무정형의 HWP를 HTML 형태로 변환해 LLM에 적합한 형태로 정형화하고 검수하는 Frontend 개발

Architecture

sequenceDiagram
    autonumber

    actor frontend as 💻 Frontend
    participant auth as Auth λ
    participant backend as 🗄️ Backend
    
    frontend ->> auth: 📩 ID, PW
    auth ->> frontend: 🔐 Token

    frontend ->> backend: 🔐 Token 
    backend ->> auth: 🔐 Token
    auth ->> backend: ✅❌ Pass/Fail
    backend ->> frontend: 💯 Response

Technology

  • 인프라
    • Minio 라는 S3-compatable object storage에 원본 문서와 Chunking document를 적재
    • 네이버 클라우드 VM 초기 구성, 목적 별로 할당 및 관리
    • VPN을 통해서만 VPC 내부에 접근할 수 있도록 구성
  • 챗봇 형태의 PoC 서비스 구성
    • React frontend가 Fast API chat server, Self-hosted Sentry 등에 접근할 수 있는 Nginx 개발
    • 업데이트가 잦은 Fast API 서버에 의존하지 않도록 JWT 서비스를 Naver Cloud Function 를 이용해 별도로 분리
    • 채팅 API 사용 시나리오 관리

HTML 정형화 Frontend 개발

  • 기술 스택
    • Lit : 대량의 검수 대상 HTML element에 Virtual DOM 없이 직접 접근하고 Boiler plating 없이 빠르게 개발하기 위해서 선택
    • pREST : 백엔드의 지원 없이 HTML 데이터를 DB에 적재하기 위해 선택
    • DB
      • 문서 파싱 규칙은 Indexed DB에 적재해 개인이 관리
      • 문서 파싱 결과는 Postgres에 적재해 RAG 시스템과 연동
  • html 트리를 탐색하며 html element마다 세상에 id를 부여하는 해싱 알고리즘 개발
  • 문서 파싱 규칙을 UI를 통해 작성하고 규칙의 적용 결과를 바로 확인할 수 있음
    • textContent 에 대한 Regex matching, CSS selector, DOM tree 내의 위치 등을 고려
  • Minio와 연동된 Batch 기능 개발

Lessons

  • 새로운 회사에서 일을 시작하며 직접 고객사와 소통하지 않고 PM과 협업했습니다.
  • Lit framework를 이용해서 복잡한 상태 관리를 해보았다.
  • AWS 이외의 클라우드로 네이버 클라우드를 처음으로 경험해보았으나, 불안정하고 완성도가 떨어지는 모습에 더는 경험해보고 싶지 않았습니다.
  • 언어 모델과 RAG 시스템의 특성을 서서히 이해해가고 있습니다. 성능에 대한 사람들의 높은 기대치에는 절대 대중들이 예상하는 만큼 쉽게 도달할 수 없어 보이고, 언어 모델 이외의 전문 지식과 소프트웨어 기술에 대한 중요성을 매일 느끼며 겸손을 배우고 있습니다.