DocuMind (RAG 검색 시스템)

[DocuMind] AI 기반 문서 검색 시스템 개발 시작 - Spring Boot + OpenAI RAG

owenminjong 2025. 12. 27. 17:05

🚀 DocuMind 프로젝트 시작

안녕하세요! 오늘부터 AI 기반 기술 문서 검색 시스템을 개발하며 과정을 기록하려고 합니다.

📌 프로젝트 개요

DocuMind는 PDF, Markdown 등의 기술 문서를 업로드하면 자연어로 질문할 수 있는 RAG(Retrieval Augmented Generation) 기반 검색 시스템입니다.

왜 이 프로젝트를 시작했나요?

  1. 실제 인프라 구축 경험 필요
  2. 포트폴리오 강화 - 중견 IT기업 취업 목표
  3. 최신 기술 학습 - OpenAI API, Vector DB 등 트렌디한 기술 습득

🛠️ 기술 스택

Backend

  • Java 17 + Spring Boot 3.2
  • PostgreSQL (pgvector extension)
  • Redis (캐싱)
  • LangChain4j (LLM 통합)

Frontend

  • React 18 + TypeScript
  • Redux Toolkit
  • Tailwind CSS

AI/ML

  • OpenAI GPT-4 API
  • Vector Embeddings (text-embedding-ada-002)

Infrastructure

  • AWS (EC2, RDS, S3, Lambda, CloudFront)
  • Docker & Docker Compose
  • Terraform (IaC)
  • GitHub Actions (CI/CD)

🎯 주요 기능

  1. 📄 문서 업로드 및 자동 파싱
    • PDF, Markdown, TXT 형식 지원
    • Lambda를 통한 비동기 처리
  2. 🔍 자연어 검색
    • Vector DB 기반 의미론적 검색
    • "Spring Boot에서 Redis 캐싱 어떻게 구현해?" 같은 질문 가능
  3. 💬 AI 답변 생성
    • GPT-4가 관련 문서를 참고하여 답변 생성
    • 출처 문서 표시
  4. 🗂️ 대화 히스토리 관리
    • 이전 대화를 기억하고 연속 질문 가능

🏗️ 시스템 아키텍처

[사용자]
   ↓
[CloudFront] ← React 앱 배포
   ↓
[EC2 - Spring Boot]
   ↓
   ├─→ [RDS PostgreSQL + pgvector] ← 벡터 임베딩 저장
   ├─→ [Redis] ← 캐싱
   └─→ [S3] → [Lambda] → [OpenAI API] ← 문서 처리

📋 개발 계획 (약 2개월)

Week 1-2: 인프라 및 백엔드 기초

  • [o] 프로젝트 기획 및 기술 스택 선정
  • [o] GitHub 저장소 생성
  • [o] Spring Boot 초기 세팅
  • [o] Docker로 로컬 DB 구축
  • [ ] AWS 인프라 설계 (Terraform)
  • [ ] 데이터베이스 스키마 설계

Week 3-4: 핵심 기능 개발

  • [ ] 문서 업로드 API
  • [ ] Vector DB 연동 및 임베딩
  • [ ] RAG 검색 엔진 구현
  • [ ] OpenAI GPT-4 통합

Week 5-6: 프론트엔드 및 고도화

  • [ ] React UI 개발
  • [ ] 실시간 답변 스트리밍
  • [ ] 대화 히스토리 UI

Week 7-8: 배포 및 최적화

  • [ ] AWS 인프라 구축
  • [ ] CI/CD 파이프라인
  • [ ] 성능 테스트 및 최적화
  • [ ] 문서화

💰 비용 관리 전략

AWS 프리티어를 최대한 활용하여 월 $5 이하로 운영할 계획입니다.

서비스 예상 비용

EC2 t3.micro $0 (프리티어)
RDS db.t3.micro $0 (프리티어)
S3 (5GB) $0 (프리티어)
Lambda $0 (월 100만 요청)
CloudFront $0 (월 1TB)
총합 $0~5

🎓 학습 목표

기술적 목표

  • AWS 실무 경험 (SAA 자격증 준비)
  • RAG 시스템 구현 이해
  • Vector Database 활용법
  • 대규모 언어 모델(LLM) 통합

비기술적 목표

  • 체계적인 프로젝트 관리
  • 기술 문서화 능력 향상
  • 포트폴리오 완성도 향상

📝 오늘 작업 내용 (Day 1)

완료한 작업

  1. ✅ GitHub 저장소 생성 및 README 작성
  2. ✅ IntelliJ에서 Spring Boot 프로젝트 생성
  3. ✅ application.yml 설정 (PostgreSQL, Redis)
  4. ✅ Docker Compose로 로컬 DB 환경 구축
  5. ✅ HealthCheck API 구현 및 테스트

프로젝트 구조

DocuMind/
├── backend/
│   └── documind-backend/
│       ├── src/
│       │   └── main/
│       │       ├── java/com/documind/backend/
│       │       │   ├── config/
│       │       │   ├── controller/
│       │       │   │   └── HealthController.java ✨
│       │       │   ├── service/
│       │       │   ├── repository/
│       │       │   ├── domain/
│       │       │   ├── dto/
│       │       │   └── exception/
│       │       └── resources/
│       │           └── application.yml
│       └── build.gradle
├── infrastructure/
│   └── docker/
│       └── docker-compose.yml
└── README.md

실행 결과

서버 실행:

Started DocumindBackendApplication in 9.777 seconds
Tomcat started on port 8080

API 테스트:

GET http://localhost:8080/api/v1/health

{
  "status": "UP",
  "timestamp": "2025-12-27T16:56:18",
  "service": "DocuMind Backend",
  "version": "0.0.1"
}

🔥 배운 점

1. Docker Compose의 편리함

PostgreSQL과 Redis를 Docker로 관리하니 로컬 환경 설정이 매우 간편했습니다.

services:
  postgres:
    image: ankane/pgvector:latest  # pgvector extension 포함!
  redis:
    image: redis:7-alpine

2. application.yml의 가독성

.properties보다 .yml 형식이 복잡한 설정에 훨씬 유리하다는 것을 체감했습니다.

3. HealthCheck API의 중요성

서버 상태를 쉽게 확인할 수 있는 API는 개발/운영 모두에서 필수입니다.


🚀 다음 단계 (Day 2 예정)

  1. AWS 인프라 설계
    • VPC, Subnet, Security Group 설계
    • Terraform 코드 작성
    • 비용 알람 설정
  2. 데이터베이스 스키마 설계
    • Document, Embedding, ChatHistory 테이블 설계
    • ERD 작성
  3. Swagger/OpenAPI 문서 자동 생성
    • API 문서화 설정

💬 마무리

오늘은 프로젝트의 기초를 다지는 날이었습니다. 간단한 HealthCheck API 하나지만, 이것이 앞으로 만들 거대한 시스템의 첫 걸음이라고 생각하니 뿌듯합니다.

앞으로 이 프로젝트를 통해 실무에서 바로 쓸 수 있는 기술을 습득하고, 좋은 포트폴리오를 만들어나가겠습니다!

다음 포스팅에서는 AWS 인프라 설계 과정을 공유하겠습니다. 🚀