KDT:::Sparta MSA 아키텍처 3기(week05)

2 minute read




바이브 코딩과 MCP

RAG(Retrieval-Augmented Generation)

  • RAG는 생성형 AI가 외부 지식 저장소(예: 데이터베이스, 문서, 내부 자료 등)에서 정보를 검색(Retrieval)하여 답변 생성(Generation)에 반영하는 기술
  • 모델이 원래 알고 있던 지식 + 최신/전문 정보”를 합쳐 더 정확한 답변을 생성하는 방식
  • ✨ 왜 RAG를 쓰는가? 1) 할루시네이션(허위 정보 생성) 감소
    • 모델이 모르는 내용을 지어내지 않고, 검색된 실제 문서를 근거로 답변합니다. 2) 최신 정보 반영 가능
    • 모델이 2024년까지 배웠어도, RAG를 쓰면 2025년 자료도 검색해 답변할 수 있어요. 3) 도메인 특화 지식 활용
    • 의료, 금융, 은행 내 문서 등 특정 조직의 사내 자료도 연결 가능 →
    • 은행(예: 카카오뱅크) 백엔드나 CRM에 RAG 도입 시 매우 유용

      Vector DB와 임베딩

  • 일반 db는 like검색 또는 = 일치검색
  • vector db는 의미기반.유사한 키워드의 정보 검색
  • PostgreSQL + pgvector 조합을 추천
    • 기존 PostgreSQL에 extension으로 추가
    • 별도 인프라 불필요
    • ACID 트랜잭션 지원
    • 익숙한 SQL 사용
    • 무료 오픈소스

Function Calling

  • LLM(대형 언어 모델)이 외부 함수나 API를 자동으로 호출해 결과를 활용할 수 있게 하는 기술
  • 왜 사용할까?
    • LLM은 자연어 생성에는 뛰어나지만, 정확한 구조화 데이터(JSON 등) 생성. 특정 기능 실행(검색, 계산, DB 조회 등) 에는 한계가 있습니다.
  • function calling을 사용하면:
    • 모델이 사용자의 요청을 분석해 적절한 함수 이름과 파라미터를 JSON 형식으로 만들어 외부 시스템이 그 함수를 실제로 실행하고 모델이 결과를 다시 사용자에게 전달합니다.
  • 장점
    • ✅ 1. 정확한 데이터 전달. LLM이 문장 내 숫자나 형식을 실수로 바꾸는 문제를 줄임.
    • ✅ 2. 외부 시스템과 연결 가능. DB 조회, 계산, API 호출 등 다양한 기능 확장.
    • ✅ 3. 자연어 → 구조화 데이터 변환. 자연어 입력을 자동으로 JSON 요청으로 변환 가능.
    • ✅ 4. 높은 확장성. 챗봇, 자동화 서비스, 에이전트 개발에 매우 적합.

프로젝트 해보기

mcpProject/                         # Spring Boot + Docker 기반 프로젝트 루트
├─ .gradle/                         # Gradle 캐시 및 내부 빌드 데이터
├─ .idea/                           # IntelliJ IDEA 프로젝트 설정
├─ build/                           # 빌드 결과물(JAR 파일 등) 출력 디렉토리
├─ gradle/                          # Gradle wrapper 실행 관련 파일
├─ src/
│  └─ main/
│     ├─ java/
│     │  └─ com/example/mcpproject/
│     │     ├─ McpProjectApplication.java   # Spring Boot 메인 실행 클래스
│     │     ├─ controller/
│     │     │  ├─ ChatController.java       # /v1/chat/completions API (LLM 호출용)
│     │     │  └─ ModelController.java      # /v1/models API (모델 목록 제공)
│     │     └─ service/
│     │        └─ OllamaChatService.java    # Ollama 서버와 HTTP 통신 담당 서비스
│     └─ resources/
│        ├─ static/                         # 정적 파일(css, js) 위치
│        ├─ templates/                      # 템플릿 엔진 사용 시 HTML 위치
│        └─ application.properties          # Spring Boot 환경 설정 파일
├─ src/test/java/...                        # JUnit 테스트 코드
├─ Dockerfile                               # Spring API 컨테이너 이미지 빌드 설정
├─ docker-compose.yml                       # 전체 스택(Postgres, Ollama, Spring, WebUI) 구성
├─ build.gradle                             # 프로젝트 빌드 설정 (의존성, 플러그인 등)
├─ settings.gradle                          # Gradle 프로젝트 이름/설정
├─ gradlew                                  # Gradle wrapper 실행 스크립트 (Mac/Linux)
├─ gradlew.bat                              # Gradle wrapper 실행 스크립트 (Windows)
├─ .gitignore                               # Git에서 제외할 파일 목록
└─ .gitattributes                           # Git 파일 속성 설정