전체 글
-
[Kafka] 8장. 정확히 한 번(Exactly-Once) 처리하기 — 멱등성과 트랜잭션메시징 & 스트리밍/Kafka 2026. 10. 13. 00:28
1. Kafka에서 메시지 중복은 왜 발생할까?먼저 메시지가 중복 저장되는 상황을 생각해 보자.Producer가 Broker에 메시지를 전송하면 다음과 같은 과정이 발생한다.Producer가 Broker에 메시지를 전송한다.Leader Broker가 메시지를 저장하고 Follower에게 복제한다.Broker가 Producer에게 성공 응답(ACK)을 보내려고 한다.그런데 응답을 보내기 직전 Broker에 장애가 발생한다.Producer는 ACK를 받지 못했으므로 메시지를 재전송한다.여기서 중요한 점은 Broker에는 이미 메시지가 저장되어 있지만 Producer는 그 사실을 알 수 없다는 것이다.따라서 Producer가 메시지를 다시 보내면 동일한 데이터가 중복으로 저장될 수 있다. 예를 들어 다음과 ..
-
[Elasticsearch] 2. Kibana로 Elasticsearch 기본 CRUD와 검색 실습하기ElasticSearch 2026. 10. 12. 17:49
지난 글에서는 Elasticsearch의 기본 구조와 역색인(Inverted Index)을 활용한 검색 원리를 살펴봤다.이번에는 Kibana의 Dev Tools를 사용하여 직접 인덱스(Index)를 생성하고 문서(Document)를 저장하거나 검색해 보려고 한다.특히 MySQL과 같은 관계형 데이터베이스(RDB)에 익숙하다면 Elasticsearch에서 사용하는 용어와 데이터 저장 방식이 생소할 수 있다.따라서 RDB와 비교하면서 Elasticsearch의 데이터 구조부터 기본적인 CRUD, 그리고 전문 검색까지 간단하게 실습해 보자.1. RDB와 Elasticsearch의 데이터 구조 비교Elasticsearch는 데이터를 JSON 문서 형태로 저장한다.RDB와 Elasticsearch의 개념을 비교하..
-
[Elasticsearch] 1. 검색 시스템의 이해와 Elasticsearch의 동작 원리ElasticSearch 2026. 10. 12. 15:29
서비스를 개발하다 보면 데이터를 빠르게 검색해야 하는 상황이 발생한다.일반적으로 데이터를 저장하고 조회할 때는 MySQL, PostgreSQL과 같은 관계형 데이터베이스(RDB)를 사용한다. 하지만 데이터가 많아지고 검색 조건이 복잡해지면 RDB만으로 검색 기능을 구현하는 데 한계가 생길 수 있다.이러한 문제를 해결하기 위해 사용하는 기술 중 하나가 Elasticsearch다.이번 글에서는 검색 시스템의 기본 구조와 Elasticsearch가 빠른 검색을 제공하는 원리, 그리고 관계형 데이터베이스와 어떤 차이가 있는지 정리해 보려고 한다.1. 검색 시스템이란?검색 시스템(Search System)은 대량의 데이터에서 사용자가 원하는 정보를 빠르게 찾아주는 시스템이다.검색 시스템은 크게 두 단계로 구분할 ..
-
Kafka 7장 - 신뢰성 있는 데이터 전달메시징 & 스트리밍/Kafka 2026. 10. 6. 11:44
Kafka를 사용한다고 해서 메시지가 자동으로 유실되지 않는 것은 아니다.Kafka는 데이터를 복제하고 장애 상황에서 Leader를 다시 선출하는 등 여러 신뢰성 기능을 제공한다. 하지만 실제 서비스에서 메시지를 안전하게 처리하려면 Broker뿐만 아니라 Producer와 Consumer까지 함께 고려해야 한다.이번 장의 핵심은 한 문장으로 정리할 수 있다.Kafka의 신뢰성은 Broker + Producer + Consumer가 함께 만든다.1. Kafka에서 말하는 두 가지 커밋Kafka를 공부하다 보면 Commit이라는 단어가 서로 다른 의미로 사용된다.커밋된 메시지Broker 관점의 개념이다.메시지가 Leader에만 기록된 것이 아니라 현재 ISR에 포함된 Replica에 복제되어 Consumer..
-
카프카 6장 - 내부 메커니즘메시징 & 스트리밍/Kafka 2026. 10. 3. 11:30
Kafka는 단순히 Producer가 메시지를 보내고 Consumer가 메시지를 읽는 메시징 시스템이 아니다.내부적으로는 여러 Broker가 데이터를 분산하여 저장하고, Partition을 Replica로 복제하며, 장애가 발생하면 새로운 Leader를 선출한다. 또한 데이터는 디스크의 Log Segment에 저장되고 보존 정책에 따라 삭제되거나 압착된다.이번 글에서는 Controller → 복제 → 요청 처리 → 물리적 저장소 → Partition과 Log Segment → Index → Tiered Storage → Log Compaction 순서로 Kafka 내부 구조를 살펴본다.1. Kafka ControllerKafka 클러스터는 여러 개의 Broker로 구성된다.이 중 Kafka 클러스터의 메..
-
Spring AI 전체 구조 정리 — Models, Chat Memory, Structured Output, Observability까지AI/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이 외부 시스템을 사용하는 방법AI/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는 어떻게 연결될까?AI/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의..