Spring AI 개발 일지 (4) - RAG 개념 정리
·
Spring
✅ RAGLLM은 학습한 지식 안에서만 답변할 수 있기 때문에 특정 도메인 지식이 필요한 경우에는 전혀 엉뚱하거나 틀린 정보를 말하는 Hallucination이 발생할 수 있습니다.이런 문제를 해결하기 위해 RAG(Retrieval-Augmented Generation)라는 개념이 등장했습니다. RAG는 외부 데이터를 검색해 LLM에게 특정 맥락(context)을 제공하여, 보다 정확하고 신뢰할 수 있는 답변을 생성하도록 합니다.✅ RAG 파이프라인Spring AI에서 지원하는 대표적인 RAG 흐름은 다음과 같습니다.데이터 색인 (Data Indexing)문서 ChunkingPDF 또는 텍스트 문서 업로드텍스트 추출 및 정제LLM이 이해하기 좋은 단위로 Chunking(Text Splitting)벡터화 ..
Spring AI 개발 일지 (3) - 챗봇 구현
·
Spring
✅ 개요Spring AI를 사용해 RAG 없이 단순 대화 챗봇을 구현해보겠습니다.✅ 사전 준비1️⃣ 의존성 추가 및 환경설정implementation 'org.springframework.ai:spring-ai-starter-model-chat-memory-repository-jdbc'기본 Spring AI 의존성만 추가하면 인메모리 기반의 레포지토리 빈이 등록됩니다. 대화 내역을 DB에 저장하기 위해서 jdbc 의존성을 추가했습니다.spring: ai: chat: memory: repository: jdbc: initialize-schema: never자동 스키마 생성 기능을 사용할 경우 오류가 자주 발생한다고 해 never로 설정한 다음..
Spring AI 개발 일지 (2) - OpenAI 사용해 후기 요약 구현해보기
·
Spring
✅ 개요우선 벡터 DB, RAG와 같은 임베딩 기술 없이 LLM만 사용하여 Spring AI 기술을 사용해보기 위해 간단한 게시글에 대한 후기 요약 기능을 구현해보겠습니다.✅ 사전 준비1️⃣ 의존성 추가implementation("org.springframework.ai:spring-ai-starter-model-openai")2️⃣ 설정 파일 추가spring: ai: openai: api-key: ${OPENAI_API_KEY} chat: options: model: gpt-4.1-mini temperature: 0.0 max-tokens: 1024OpenAI Platform에서 API Key를 발급 받았습니다. (최..
Spring AI 개발 일지 (1) - Spring AI 소개와 핵심 모델
·
Spring
✅ Spring AI란?Spring AI는 Spring 개발자들을 위한 LLM 통합 도구로, AI와 연관된 도구들 쉽게 통합하도록 하는 프레임워크입니다.Spring AI 공식문서에 의하면 "Spring AI는 AI 애플리케이션 개발의 기반이 되는 추상화를 제공하여 최소한의 코드 변경으로 구성 요소를 쉽게 교체할 수 있다"고 소개하며, 대표적으로 다음과 같은 기능을 제공한다고 합니다.AI 모델 통합 API 제공OpenAI, Anthropic, Microsoft, Amazon, Google, Ollama 등 주요 AI Model Provider를 지원Chat Completion, Embedding, Text to Image, Text to Speech 등 다양한 모델 타입을 하나의 일관된 API로 제공모델 ..
PageableExecutionUtils.getPage로 페이징 성능 개선하기
·
Spring
✅ 개요Querydsl은 페이징 처리를 위해 `PageImpl()`의 최적화 버전인 `PageableExecutionUtils` 클래스의 정적 메서드 `getPage()`를 지원합니다. ` PageableExecutionUtils.getPage()`는 어떻게 페이징 쿼리를 최적화하는지 분석하고 정리하려고 합니다. ✅ PageableExecutionUtils먼저 `PageableExecutionUtils` 클래스 내부 코드를 살펴보았습니다.내부적으로 엄청나게 복잡한 로직으로 이루어져 있지는 않아서 다행이었습니다. 하나씩 이해하면 원리를 완벽히 이해하기에 큰 어려움은 없을 것 같습니다. ➡️ isPartialPage`getPage` 메서드는 먼저 `isPartialPage`인지 확인하고 있습니다. 여기서 f..
Spring 비동기로 이메일 전송하기
·
Spring
✅ 개요스프링 부트에서는 이메일 전송을 쉽게 구현할 수 있습니다. 여기에 추가로 `@Async`를 활용한 비동기 처리로 성능 개선 과정을 정리하고자 합니다. ✅ Before먼저 기존 코드는 다음과 같습니다. 사용자는 이메일로 받은 링크를 클릭하면 이메일 인증 처리가 되는 구조로 설계되어 있습니다.public void sendEmail(Long guestId) { Guest guest = guestRepository.findById(guestId) .orElseThrow(() -> new EntityNotFoundException("Guest with id " + guestId + "cannot be found")); String toke..
Spring AbstractRequestLoggingFilter로 RequestBody 로깅 찍기
·
Spring
✅ 개요인터셉터를 사용해 엔드포인트, 메서드, 실행 시간 등의 로깅을 남기기 위해 여러 다른 글들과 스프링 클래스들을 살펴보던 도중 `AbstractRequestLoggingFilter`이라는 클래스를 발견하였습니다. 이 필터를 사용해 정상적으로 로그를 출력하기 위한 과정을 정리하고자 합니다. ✅ ApiLoggingFilter 구현먼저 `AbstractRequestLoggingFilter`는 `org.springframework.web.filter` 패키지로 스프링 시큐리티 필터를 모두 거친 다음에 동작하는 필터입니다. 이 필터 클래스에서 `getBeforeMessage()`와 `getAfterMessage()` 메서드만 직접 만들면 원하는 형태로 로그를 출력할 수 있을 것으로 예상하고 다음과 같이 구성..
[데브코스] Spring + Toss payments로 결제 기능 개발하기
·
Spring
✅ 개요팀 프로젝트에서 결제 기능을 맡게 되었습니다. 스프링 개발 환경에서 어떤 식으로 결제 기능을 구현했는지 공유하고자 합니다. ✅ Toss Payments를 선택한 이유먼저 어떤 API로 결제 기능을 구현할지 카카오페이, 포트원, 토스 등 여러 서비스의 가이드를 한 번씩 훑어보았습니다. 이 중 토스를 선택한 이유는 가장 먼저 가독성 때문이었습니다. 일단 다른 서비스에 비해 UI도 마음에 들었고, API 사용 가이드가 이해하기 쉽게 구성되어 있던 것 같습니다. 또 다른 이유는 샘플 코드와 테스트 환경을 제공해 주기 때문이었습니다. 프론트와 백엔드 각각 샘플 코드를 제공해 주어 가이드대로 따라 하기 매우 수월했습니다. ✅ Toss Payments 결제창 이해Toss Payments 결제 서비스 연동에는 ..