샤딩 (Sharding)
FAISS의 특성상, (성능 개선을 기대할 수 없는) 사후필터링만이 가능해서, 초기의 업로드부터 권한별로 분산해서 저장하면 어떨까? 하는 아이디어로 샤딩을 시도했다. (샤딩은 DB 트래픽을 분산할 수 있는 중요한 수단이다.)

경로 통일 이전의 스크린샷이라, 벡터스토어는 app/data/uploads에 들어가있고, 문서파일은 data/uploads에 들어가있다 ㅎㅎ.. 나중에 다시 app/data/uploads로 통합했다.
hwpx RAG 구현 in 도커
metadata 내에 dept_id, project_id, user_id 임의로 넣어봤다. 구조 확장엔 큰 문제가 없어보인다.

hwp를 파싱했는데, 왜인지 text_content가 하나의 통문자열 리스트로 왔다.

hwpx파일은 hwp와 달리 파싱-청킹-임베딩의 과정이 모두 잘 이뤄졌다.

리스폰스를 받았지만, 데이터가 없었다. 검색권한쪽 컨트롤이 필요한건지, 성능이슈인지 원인을 찾지 못했다.
hwp RAG 구현 in 도커
hwp 파일은 청킹-임베딩-저장이 되지 않던 문제가 있었다. (jar, jpype, JAVA_HOME으로 고통받던 지난 주가 생각났다...)
이전 응답에서 text_content가 분할되지 않은 것에 주목했다.

hwp는 단락(para)생성이 안되던 문제가 있었는데, 이를 해결하기위해 문단 보정을 해주기로 했다. _iter_paragraph_texts라는 유틸 함수를 app/services/rag/rag_service.py에다 넣어 구현했다.


샤딩 검색이 제대로 안되어서, 디버그를 추가해보았다. 문제는 config 안에 있었다. 컨피그에 샤딩검색을 False로 두었던 것을, True로 바꾸었다. 이제 req.body에 user_id를 포함해 전달하면, 해당 폴더의 FAISS 벡터 스토어로부터 검색이 이뤄지고, LLM이 응답을 생성한다.
본 후기는 [한글과컴퓨터x한국생산성본부x스나이퍼팩토리] 한컴 AI 아카데미 2기 (B-log) 리뷰로 작성 되었습니다.
'한컴AI 2기' 카테고리의 다른 글
| [스나이퍼팩토리] 한컴AI 2기 - 알랭 프로젝트 중간발표 회고 (1) | 2025.11.21 |
|---|---|
| [스나이퍼팩토리] 한컴AI 2기 - Docker CE 및 Nginx를 활용한 GPU 서버 구축 과정 (0) | 2025.11.12 |
| [스나이퍼팩토리] 한컴AI 2기 - OWPML 프로젝트 알랭 1주차 회고 (0) | 2025.11.09 |
| [스나이퍼팩토리] 한컴AI 2기 - OWPML 프로젝트 CLI와 백엔드 FastAPI 세팅 (0) | 2025.11.03 |
| 정보구조도 (0) | 2025.10.29 |