반응형

Java 8

LangChain4j로 Java RAG 파이프라인 구현하기

목차개요RAG 아키텍처와 LangChain4j의 핵심 개념LangChain4j 환경 설정과 기본 구성RAG 파이프라인 단계별 구현심화 — 성능 최적화와 검색 품질 개선운영 환경 적용 시 고려사항맺음말개요문제 배경대형 언어 모델(LLM)은 방대한 지식을 학습했지만, 학습 데이터의 최신성 한계와 특정 도메인 정보의 부재라는 근본적인 제약을 안고 있습니다. 기업 내부 문서, 최신 제품 매뉴얼, 고유한 정책 데이터를 모델이 알고 있다고 기대하기는 어렵습니다. RAG(Retrieval-Augmented Generation) 는 이 문제를 정면으로 해결합니다. 사용자의 질문에 맞는 관련 문서를 동적으로 검색한 후, 그 내용을 프롬프트에 주입해 LLM이 정확하고 근거 있는 답변을 생성하도록 돕는 패턴입니다. Java..

Spring Authorization Server로 OAuth2 인증 서버 구현하기

목차개요Spring Authorization Server 아키텍처 이해인증 서버 기본 구현JWT 토큰 커스터마이징과 클레임 설계성능 특성과 대안 기술 비교운영 환경 적용 시 고려사항맺음말개요문제 배경현대 분산 시스템 환경에서 OAuth2 인증 서버는 더 이상 선택이 아닌 필수 인프라로 자리잡고 있습니다. 마이크로서비스 아키텍처가 보편화되면서 각 서비스가 독립적으로 사용자 인증을 처리하던 방식은 보안 취약점과 운영 복잡도를 함께 키워 왔습니다. Spring Authorization Server는 이 문제를 해결하기 위해 Spring 생태계 내에서 공식적으로 지원하는 OAuth2 및 OpenID Connect 1.0 인증 서버 구현체입니다.Spring 팀은 오랫동안 커뮤니티에서 광범위하게 사용되던 Sprin..

RAG 서버 구축하기 — 벡터DB 세팅부터 Java vs Python 언어 선택까지

"우리 회사 내부 문서를 학습한 AI 챗봇을 만들고 싶어요." 요즘 개발팀에서 가장 많이 나오는 요구사항 중 하나입니다. 사내 규정, 기술 문서, 과거 장애 대응 기록, 제품 스펙 — 이 모든 것을 꿰뚫고 답변하는 AI 어시스턴트. RAG(Retrieval-Augmented Generation)가 그 해답이라는 건 이제 많은 분들이 알고 있습니다.문제는 "어떻게 구축하느냐"입니다. ChatGPT API 하나 붙이는 것과, 프로덕션 수준의 사내 RAG 서버를 구축하는 것은 완전히 다른 이야기입니다. 어떤 벡터 DB를 선택할지, Java로 갈지 Python으로 갈지, 어떤 아키텍처로 설계할지, 보안은 어떻게 챙길지 — 결정해야 할 것이 한두 가지가 아닙니다.이 글에서는 사내 RAG 서버를 처음부터 끝까지 직..

gRPC Spring Boot 서비스 간 통신 구현하기

gRPC(Google Remote Procedure Call)는 HTTP/2 기반의 고성능 RPC 프레임워크로, 마이크로서비스 간 통신에서 REST API 대비 낮은 지연 시간과 강한 타입 안전성을 제공합니다. Spring Boot 환경에서 gRPC를 적용하면 Protobuf 직렬화를 통해 페이로드 크기를 줄이고, 양방향 스트리밍 같은 고급 통신 패턴도 손쉽게 구현할 수 있습니다. 이 글에서는 Spring Boot 프로젝트 두 개(서버/클라이언트)를 직접 구성하며 gRPC 서비스 간 통신을 단계별로 구현합니다.프로젝트 의존성 및 Protobuf 정의Gradle 의존성 설정grpc-spring-boot-starter는 Spring Boot 자동 구성과 gRPC 서버 라이프사이클을 통합해 주는 핵심 라이브러..

GraalVM Native Image로 Spring Boot 시작 시간 줄이기

Spring Boot 애플리케이션의 긴 시작 시간은 서버리스 환경이나 컨테이너 오케스트레이션 환경에서 치명적인 병목이 됩니다. GraalVM Native Image는 JVM 기반 애플리케이션을 AOT(Ahead-of-Time) 컴파일로 네이티브 실행 파일로 변환해, 시작 시간을 수백 밀리초 단위로 단축하고 메모리 사용량도 대폭 낮춥니다. Spring Boot 3.x부터는 공식적으로 GraalVM Native Image를 지원하므로, 실제 프로젝트에 바로 적용할 수 있는 수준으로 성숙했습니다.GraalVM Native Image란GraalVM은 Oracle이 개발한 고성능 JDK 배포판으로, 그 핵심 기능 중 하나인 Native Image는 Java 바이트코드를 분석해 실행에 필요한 코드만 추려 플랫폼 네..

CQRS 패턴 적용법: 명령과 조회 분리하기

대규모 서비스를 운영하다 보면 조회 트래픽이 명령(쓰기) 트래픽보다 수십 배 이상 높은 상황을 자주 마주칩니다. 하나의 도메인 모델로 읽기와 쓰기 요청을 동시에 처리하면 복잡도가 높아지고, 성능 최적화가 어려워집니다. CQRS(Command Query Responsibility Segregation)는 이 문제를 해결하기 위해 명령(Command)과 조회(Query)의 책임을 명확히 분리하는 아키텍처 패턴입니다.Greg Young이 제안하고 Martin Fowler가 정리한 이 패턴은, 복잡한 도메인 로직을 가진 시스템에서 읽기 모델과 쓰기 모델을 독립적으로 확장하고 최적화할 수 있게 해줍니다. 이번 글에서는 CQRS의 핵심 구조를 이해하고, Spring Boot 환경에서 실제 프로젝트에 적용하는 방법을..

[JAVA] JVM GC 튜닝으로 자연시간 줄이기

JVM GC(Garbage Collection) 튜닝은 Java 애플리케이션의 응답 지연(latency)과 처리량(throughput)을 결정짓는 핵심 요소입니다. GC 로그 분석부터 적절한 컬렉터 선택, 힙 크기 조정까지 단계별로 접근하면 운영 환경에서 발생하는 Stop-The-World(STW) 시간을 효과적으로 줄일 수 있습니다.GC 로그 수집과 기본 진단튜닝을 시작하기 전에 현재 GC 동작 상태를 정확히 파악해야 합니다. JVM 옵션으로 GC 로그를 활성화하면 STW 발생 빈도, 각 GC 단계 소요 시간, 힙 사용 패턴 등을 확인할 수 있습니다.JDK 17 이상 환경에서 권장하는 GC 로그 설정입니다.# 변경전: 로그 없이 기본 실행java -jar app.jar# 변경후: GC 로그 + 타임스탬..

[JAVA/SPRING] Git에 비밀번호 올리지 마세요: 스프링 부트 민감 정보 관리 전략 (Jasypt, Vault)

"잠깐, 방금 커밋한 application.yml에 DB 비밀번호 들어있지 않았어?"오픈소스 프로젝트나 실무 초기에 흔히 겪는 식은땀 나는 상황입니다. 실수로 깃허브(GitHub)에 AWS 키나 DB 패스워드를 올렸다가, 몇 분 만에 클라우드 비용이 수백만 원 청구되거나 보안 사고로 이어지는 사례는 꽤 흔합니다.이번 글에서는 환경 변수부터 Jasypt 암호화, 그리고 HashiCorp Vault까지, 민감 정보를 안전하게 관리하는 단계별 전략을 소개합니다.1. 최악의 패턴: 하드코딩 (Hardcoding)spring: datasource: url: jdbc:mysql://db-prod.company.com:3306/mydb username: admin password: "Password..

반응형