개요
RAG 기반 문서 검색 시스템을 개발하며 현재까지 진행된 기능을 정의하고 추가적으로 개발하야 할 기능등에 대해서 정리하고자 한다. 본 글은 프론트엔드 + 백엔드의 기능이 전부 구현된 기능들만을 정의한다.
화면정리
1. 로그인 및 회원가입


라이브러리
- 백엔드 : python-jose (JWT), passlib[bcrypt] (비밀번호 해싱), httpx (OAuth)
- 프론트엔드: React Context API (상태 관리), Next.js Router
인증방식
- 일반 로그인: 이메일/비밀번호 → JWT 토큰 발급
- 소셜 로그인: Google/GitHub OAuth2.0 → 자동 회원가입 + JWT 토큰
보안기능
- 비밀번호: bcrypt 해싱
- 토큰: Access Token (30분) + Refresh Token (7일)
- 권한: viewer/editor/admin 역할 기반
프로세스
- 로그인 → JWT 토큰 생성 → localStorage 저장
- API 요청 시 Authorization 헤더에 토큰 포함
- 토큰 만료 시 Refresh Token으로 자동 갱신
특징
- 하이브리드 인증 (일반 + 소셜)
- 자동 회원가입 (소셜 로그인)
- 역할 기반 권한 관리
- 안전한 토큰 관리
2. 문서 등록 화면

라이브러리
- 백엔드: PyPDF2 (PDF 파싱), sentence-transformers (로컬 임베딩), openai (임베딩), pymilvus (벡터 DB)
- 프론트엔드: XMLHttpRequest (업로드 진행률), FormData (파일 전송)
- 추가예정 : python-docx (DOCX 파싱) - 현재 추가되어있으나 DOCX 인식률의 문제로 고도화 예정
보안기능
- 파일 검증: 확장자, 크기 검사(바이러스 검사 추가 예정)
- 권한 확인: JWT 토큰 기반 사용자 인증
- 에러 처리: 실패 시 자동 정리 (DB 삭제, 파일 삭제)
프로세스
- 프론트엔드 파일 검증 : 파일 크기 검증, MIME 타입 검증
- 백엔드 파일검증 : 파일유무, 확장자, 크기, 텍스트 추출 가능성 검증(바이러스 검사 추가 예정)
- 텍스트 추출 : PDF/TXT에서 텍스트 파싱(DOCX 보완 예정)
- 청킹 : 512 토큰 단위로 텍스트 분할
- 임베딩 : 모드에 따라 OpenAI 또는 로컬 모델로 벡터 생성(OpenAI 의 경우 1536차원 -> 768차원 변환)
- 저장 : PostgreSQL(메타데이터) + Milvus(벡터) + 로컬 파일 시스템
특징
- 하이브리드 임베딩: OpenAI + 로컬 모델 지원
- 실시간 피드백: 업로드 진행률 및 상태 표시
- 자동 정리: 실패 시 리소스 정리
3. 이미지 등록 화면

라이브러리
- 백엔드: pytesseract (OCR 엔진), PIL/Pillow (이미지 처리), sentence-transformers (임베딩), boto3 (MinIO 저장)
- 프론트엔드: FormData (파일 전송), XMLHttpRequest (진행률 모니터링)
- 보안 테스트: 파일 검증, 용량 제한, 민감 정보 마스킹 기능 적용
지원 파일 형식
- 이미지: PNG, JPG, JPEG, TIFF, BMP, GIF (최대 50MB)
- OCR 언어: 한국어(kor), 영어(eng), 일본어(jpn), 중국어(chi_sim)
보안기능
- 파일 검증: 확장자/크기 검사
- 권한 확인: JWT 토큰 기반 사용자 인증
- 자동 정리: 실패 시 리소스 정리
프로세스
- 파일 검증: 형식/크기 검사
- 이미지 전처리: PIL로 이미지 로드 및 최적화
- Tesseract OCR: 다국어 텍스트 추출
- 텍스트 파싱: 문장 분리, 신뢰도 필터링
- 임베딩 생성: 추출된 텍스트 벡터화
- 저장: PostgreSQL + Milvus + MinIO
특징
- 다국어 OCR: 한국어, 영어, 일본어, 중국어 지원
- 신뢰도 기반 필터링: 낮은 신뢰도 텍스트 자동 제외
- 문서 변환: OCR 결과를 검색 가능한 문서로 저장
- 단계별 처리: OCR 결과 확인 이후 문서로 저장여부 선택
4. 문서조회 화면

라이브러리
- 백엔드: sentence-transformers (로컬 임베딩), openai (임베딩), pymilvus (벡터 DB), Pydantic (요청 데이터 검증)
보안기능
- 접근 제어: 사용자별 문서만 조회 가능
- 권한 확인: JWT 토큰 기반 사용자 인증
- 입력 검증: 요청 데이터 검증
프로세스
- 질문 입력: 사용자가 자연어 질문 입력
- 질문 임베딩: OpenAI 또는 로컬 모델로 벡터화 (768차원으로 정규화)
- 벡터 검색: Milvus에서 유사한 문서 청크 검색 (Top-5)
- 컨텍스트 구성: 검색된 문서 청크들을 프롬프트에 포함
- LLM 답변: GPT-4o 또는 로컬 LLM으로 근거 기반 답변 생성
- 결과 반환: 답변, 근거, 신뢰도, 처리 시간 반환
특징
- 하이브리드 임베딩: OpenAI + 로컬 모델 지원
- 근거 기반 답변: 관련 문서 청크 하이라이트 포함
- 실시간 검색: 평균 3초 이내 응답
- 신뢰도 표시: 답변의 확신도 및 불확실성 경고
- 캐싱 시스템: 동일 질문에 대한 빠른 응답
용어 정리
| 용어 | 설명 |
|---|---|
| JWT (JSON Web Token) | 사용자 인증 및 권한 확인을 위해 사용되는 토큰 방식. Access Token과 Refresh Token으로 구성됨 |
| bcrypt | 비밀번호를 안전하게 저장하기 위한 해싱 알고리즘 |
| OAuth2.0 | 소셜 로그인 인증 방식. Google, GitHub 등의 외부 계정을 활용해 인증 수행 |
| PyPDF2 | PDF 파일에서 텍스트를 추출하기 위한 파이썬 라이브러리 |
| sentence-transformers | 텍스트를 벡터로 변환하는 데 사용되는 임베딩 라이브러리 |
| openai | GPT 모델을 호출하여 임베딩 또는 질문 응답을 처리하는 API 클라이언트 |
| pymilvus | Milvus 벡터 DB와 상호작용하기 위한 파이썬 클라이언트 |
| Milvus | 대규모 벡터 검색을 위한 오픈소스 벡터 데이터베이스 |
| FormData | HTML5에서 파일이나 폼 데이터를 서버로 전송하기 위한 객체 |
| XMLHttpRequest | 브라우저에서 비동기 요청을 보내기 위한 JavaScript API |
| pytesseract | Tesseract OCR 엔진을 파이썬에서 사용할 수 있도록 하는 래퍼 라이브러리 |
| PIL/Pillow | 파이썬에서 이미지 처리를 위한 라이브러리 |
| OCR | 이미지에서 문자 정보를 추출하는 기술 (Optical Character Recognition) |
| 청킹 (Chunking) | 텍스트를 일정 단위로 나눠 처리하는 기법. RAG에서는 주로 512 토큰 단위로 분할 |
| 벡터 임베딩 | 문장이나 문서를 수치화하여 벡터 형태로 표현하는 방식 |
| RAG (Retrieval-Augmented Generation) | 문서 검색 결과를 LLM에 프롬프트로 넣어 답변을 생성하는 구조 |
| LLM | GPT와 같은 대형 언어 모델 (Large Language Model) |
| 하이브리드 임베딩 | 로컬 임베딩 모델과 OpenAI API를 혼용하여 처리 성능과 비용을 균형있게 관리하는 방식 |
| 신뢰도 점수 | LLM 응답의 정확성 또는 근거 문서의 일치도를 나타내는 수치 |
| 캐시 | 이전 질문 결과를 저장해 반복 질문에 대해 빠르게 응답하는 방식 |
| JWT 기반 권한 | 토큰 내 역할 정보(viewer/editor/admin 등)를 기반으로 API 접근을 제어하는 방식 |
마무리
아무래도 바이브코딩으로 생소한 기술과 라이브러리들을 활용하여 개발하다보니 잘 모르는 개념도 많았고 어떻게 프로젝트가 진행되는지 파악하고 공부하고 정리하는데에 시간이 오래 걸렸던 것 같다. 1차로 결과물이 나왔지만 이미 개발된 것 중에서도 공부해야 할 것이 많다. 또한 앞으로도 개선해나가고 고도화해야 할 기능들이 있다. 우선 바이브코딩을 할 때 어떤 부분을 신경써야 하는지, 어떤부분에서 자주 틀리고 문제가 있으며 어떻게 Rule 을 작성하고 보완해야 하는지를 배울 수 있었던 프로젝트 인 것 같다.
'사이드 프로젝트' 카테고리의 다른 글
| RAG 기반 문서 검색 시스템 - 13(복합 질문 및 문서 요약 기능 구현) (1) | 2025.07.23 |
|---|---|
| RAG 기반 문서 검색 시스템 - 12(OCR 기반 문서 자동 텍스트 인식 및 저장 기능 구현) (0) | 2025.07.23 |
| RAG 기반 문서 검색 시스템 - 11(문서 분류 및 권한 기반 접근 제어 구현) (0) | 2025.07.23 |
| RAG 기반 문서 검색 시스템 - 10(문서 메타데이터 및 버전 관리 기능 구현) (1) | 2025.07.23 |
| RAG 기반 문서 검색 시스템 - 9(근거 문장 UI 콜랩스/확장 구현) (3) | 2025.07.22 |