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 시스템의 특성을 서서히 이해해가고 있습니다. 성능에 대한 사람들의 높은 기대치에는 절대 대중들이 예상하는 만큼 쉽게 도달할 수 없어 보이고, 언어 모델 이외의 전문 지식과 소프트웨어 기술에 대한 중요성을 매일 느끼며 겸손을 배우고 있습니다.