Spring AI 멀티턴 구현: ChatMemory, Advisor
LLM API는 기본적으로 이전 요청을 기억하지 않는다. 같은 채팅 화면에서 연속으로 질문하더라도, 다음 요청에 과거 메시지를 포함하지 않으면 모델은 앞선 대화를 알 수 없다. 멀티턴 대화를 구현하려면 대화 내용을 저장하고, 다음 요청의 Prompt에 다시 포함하는 과정이 필요하다. Spring AI에서는 ChatMemory, ChatMemoryRe...
LLM API는 기본적으로 이전 요청을 기억하지 않는다. 같은 채팅 화면에서 연속으로 질문하더라도, 다음 요청에 과거 메시지를 포함하지 않으면 모델은 앞선 대화를 알 수 없다. 멀티턴 대화를 구현하려면 대화 내용을 저장하고, 다음 요청의 Prompt에 다시 포함하는 과정이 필요하다. Spring AI에서는 ChatMemory, ChatMemoryRe...
Spring AI를 활용하면 @Tool 메서드를 ChatClient에 등록해 LLM이 애플리케이션의 기능을 호출하게 만들 수 있다. 하지만 @Tool은 어느 계층의 책임인지 바로 드러나지 않아, 기존 Application Service나 AI 설정 클래스에 함께 두기 쉽다. 문제는 Tool이 늘어나면서 발생한다. LLM에 어떤 기능을 노출할지 결정해...
프로젝트 팀원에게 했던 PR 리뷰 중, 기록해두면 좋을 내용을 정리한 글이다. 실제 코드 리뷰를 통해 발견한 문제점과 제시했던 해결 방안을 정리했다. I. BoundedContext 독립성 문제 // content/content-api/build.gradle dependencies { implementation(project(":core...
개요 주요 아키텍처 패턴 멀티 모듈 Gradle 프로젝트 헥사고날 아키텍처 (Ports & Adapters) DDD (Domain-Driven Design) 원칙 적용 마이크로서비스 아키텍처 기반 모듈 설계 계층 분리: Presentation (API) → Application → Domain ← Infrastructure...
I. 문제 상황: Presentation 모듈의 정체성 혼란 1. 기존 구조 프로젝트 초기 구조는 다음과 같았다. connectors-backend/ ├── core/ ├── setting/ │ ├── cache/ │ ├── database/ │ ├── storage/ │ └── external/ ├── presentation/ ...
I. 문제 상황 Course(강의) 엔티티와 Skill(기술) 엔티티는 다대다 관계로 연결되어 있다. 하나의 Course는 여러 Skill을 가질 수 있고, 각 Skill도 여러 Course에 연결될 수 있다. 이 관계는 course_skill이라는 매핑 테이블로 관리된다. course 테이블 course_skill 테이블 ...
I. 문제 상황 Spring Batch를 활용해 강의 데이터를 처리하는 배치 작업을 구현했다. 약 5000여건의 강의 데이터를 Chunk Size 1000으로, MySQL 및 Opensearch에 저장하는 구조로 구성했다. 특히 Opensearch에 저장되는 데이터 중 제목, 설명, 난이도 등을 OpenAI Embedding API로 벡터화한 후 저...
I. 문제 상황 (그림 I-1) 기능 개선 전, 배치 실행 결과 공공 API로부터 전국의 기업 정보를 동기화하는 배치 기능을 구현했다. 약 120만 건의 데이터를 페이지네이션 방식으로 가져와 데이터베이스에 저장하는 단순한 작업이지만, 처리 시간은 예상보다 훨씬 길었다. 총 데이터: 약 1,200,000건 페이지당 데이터: 1,000건 총 페이지...
이전 글에서 CI 최적화를 통해 변경된 모듈만 테스트하는 방법을 다뤘다면, 이번에는 CD(Continuous Delivery)를 최적화 방법을 정리해보려 한다. I. 문제 상황: 불필요한 배포 멀티모듈 프로젝트에서 CD를 구성할 때 마주하는 가장 큰 문제는 불필요한 배포가 너무 자주 발생한다는 것이다. 예를 들어 프로젝트 구조가 다음과 같다고...
멀티모듈 프로젝트가 커질수록 CI 파이프라인의 실행 시간이 기하급수적으로 증가한다. 특히 단일 모듈만 수정했을 뿐인데 전체 모듈의 테스트가 실행되면, 개발자는 불필요하게 긴 시간을 기다려야 한다. 이번 글에서는 GitHub Actions를 활용해 변경된 모듈만 감지하고, Matrix Strategy로 병렬 테스트를 수행하는 방법을 정리해보려 한다. ...