전체 글
-
Spring AI 전체 구조 정리 — Models, Chat Memory, Structured Output, Observability까지Spring/Spring AI 2026. 9. 28. 00:45
지금까지 Spring AI를 공부하면서 여러 개념을 하나씩 살펴봤습니다.1편에서는 LLM을 호출하는 기본 구조를 알아봤습니다.ChatClient ↓ChatModel ↓Provider ↓LLM2편에서는 LLM이 알지 못하는 데이터를 검색해서 답변에 활용하는 RAG 구조를 살펴봤습니다.EmbeddingModel ↓VectorStore ↓Vector Database ↓RAG3편에서는 LLM이 외부 시스템의 기능을 사용할 수 있도록 하는 Tool Calling과 MCP를 알아봤습니다.LLM ↓Tool Calling ↓MCP ↓외부 시스템그런데 Spring AI에는 이 외에도 여러 기능이 존재합니다.대표적으로Chat MemoryPrompt EngineeringStruct..
-
Spring AI MCP와 Tool Calling — LLM이 외부 시스템을 사용하는 방법Spring/Spring AI 2026. 9. 27. 23:02
이 글은 앞선 시리즈와 동일하게 Spring AI 1.0.x 계열을 중심으로 설명합니다.현재 Spring AI 문서의 최신 안정 버전은 2.0.1이며, 특히 Tool Calling의 내부 실행 방식에는 1.x와 차이가 있으므로 실제 프로젝트에서는 사용하는 버전의 공식 문서를 함께 확인하는 것이 좋습니다.지난 글에서는 RAG를 통해 LLM이 자신이 학습하지 않은 사내 문서나 서비스 데이터를 검색해서 답변에 활용하는 방법을 살펴봤습니다.흐름은 다음과 같았습니다. 사용자 질문 ↓VectorStore ↓관련 문서 검색 ↓Prompt에 Context 추가 ↓ChatModel ↓LLM 답변그런데 실제 서비스를 만들다 보면 단순히 정보를 조회해서 답변하는 것만으로는 부족합니다. 예를 들어 ..
-
Spring AI RAG 기초 — Embedding, VectorStore, OpenSearch는 어떻게 연결될까?Spring/Spring AI 2026. 9. 26. 12:48
이 글은 Spring AI 1.0.x 계열 기준으로 작성했습니다.이전 글에서는 ChatClient → ChatModel → Provider → LLM의 기본 구조를 살펴봤습니다. 지난 글에서는 Spring AI를 이용해 GPT, Claude 같은 LLM을 호출하는 방법을 알아봤습니다.https://jay-cheol.tistory.com/entry/Spring-Ai Spring AI란? LangChain4j와 비교하며 LLM, ChatModel 구조 이해하기1. Spring AI는 왜 필요한가?OpenAI, Anthropic, Google 등 각각의 Provider API를 직접 사용하는 경우를 생각해보겠습니다.OpenAI를 사용하다가 Claude로 변경하거나 Gemini를 추가한다면 각 Provider의..
-
Redis - 메시지 브로커: List, Pub/Sub, Stream 차이DataBase/Redis 2026. 9. 23. 15:14
📌 1. 메시지 브로커(Message Broker)란?메시지 브로커는 서로 다른 서비스 사이에서 메시지를 중개하는 시스템이다.예를 들어 주문이 완료된 후 사용자에게 알림을 보내야 한다고 생각해보자.가장 단순하게 구현하면 주문 서비스가 알림 서비스를 직접 호출할 수 있다.주문 서비스 │ │ HTTP API ▼알림 서비스하지만 두 서비스가 직접 연결되어 있다면 문제가 생길 수 있다.알림 서비스에 장애가 발생했을 때 주문 서비스의 응답까지 느려지거나 실패할 수 있기 때문이다.서비스가 많아질수록 이런 의존 관계는 더욱 복잡해진다.그래서 서비스 사이에 Message Broker를 둔다.주문 서비스 │ │ 주문 완료 이벤트 ▼Message Broker │ ▼알림 서비스주..
-
Spring AI란? LangChain4j와 비교하며 LLM, ChatModel 구조 이해하기Spring/Spring AI 2026. 9. 22. 00:08
1. Spring AI는 왜 필요한가?OpenAI, Anthropic, Google 등 각각의 Provider API를 직접 사용하는 경우를 생각해보겠습니다.OpenAI를 사용하다가 Claude로 변경하거나 Gemini를 추가한다면 각 Provider의 요청 방식과 응답 구조에 맞춰 코드를 작성해야 합니다. Provider가 늘어날수록 애플리케이션이 각각의 API에 직접 의존하게 됩니다. Spring AI는 그 사이에 ChatModel이라는 공통 인터페이스를 둡니다.그림의 왼쪽처럼 Provider를 직접 호출하면 애플리케이션이 각각의 API 구조를 알아야 합니다.반면 Spring AI를 사용하면 애플리케이션은 특정 Provider보다 ChatModel이라는 공통 인터페이스를 바라볼 수 있습니다.예를 들어..
-
Java 람다식(Lambda Expression)과 함수형 인터페이스 정리Java/자바의정석 2026. 6. 7. 23:30
람다식(Lambda Expression)이란?람다식은 메서드를 간단한 식(Expression)으로 표현하는 방법이다.기존에는 익명 클래스를 사용하여 객체를 생성해야 했지만, 람다식을 사용하면 훨씬 간결하게 표현할 수 있다. 기존방식Runnable r = new Runnable() { @Override public void run() { System.out.println("Hello"); }}; 람다식 사용Runnable r = () -> System.out.println("Hello"); 함수(Function)와 메서드(Method)의 차이사실 함수와 메서드는 근본적으로 동일하다.함수와 메서드의 차이 -근본적으로 동일. 함수는 일반적 용어 메서드는 객체지향개념 용어구분설명함수(F..
-
Programmers - 스포 방지 (중요한 단어 찾기) 풀이프로그래머스/Java 2026. 5. 13. 11:02
https://school.programmers.co.kr/learn/courses/30/lessons/468370 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 전체 흐름1단계: 메시지에서 단어 파싱 (단어의 시작/끝 인덱스 저장)2단계: 비스포 구간에 등장하는 단어 Set 수집3단계: spoiler_ranges 순서대로 순회하며 중요한 단어 카운트핵심 자료구조자료구조용도List wordList모든 단어의 [시작인덱스, 끝인덭스]Set nonSpoilerSet비스포 구간에 등장한 단어 문자열Set revealedSet이미 공개된 스포 단어 문자열 단어가 구간에 겹치는 조건단어와 구간이 겹치지 않는 경우는 딱 ..
-
[Programmers]코딩테스트 - 노란불 신호등프로그래머스/Java 2026. 5. 12. 22:31
https://school.programmers.co.kr/learn/courses/30/lessons/468371 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 신호등 문제로 배우는 LCM 탐색 알고리즘문제 이해n개의 신호등이 있고, 각 신호등은 초록 → 노란 → 빨간 순서로 반복됩니다.모든 신호등이 동시에 노란불이 되는 가장 빠른 시각을 구하는 문제입니다. 없으면 -1을 반환합니다. 신호등초록 (G)노란 (Y)빨간 (R)주기1번2초1초2초5초2번5초1초1초7초위 예시에서 정답은 13초입니다.1단계 — t초에 어떤 신호인지 알아내기신호등은 주기마다 반복되므로, (t-1) % 주기 로 사이클 내 위치(pos)..