Spring Framework

spring JPA를 사용하다 보면, 다음과 같이 JpaRepository를 상속한 Interface를 만들게 됩니다.interface MyBaseRepository extends JpaRepository { … } 이러한 JpaRepository 상속 방식의 장점은 바로 메서드 쿼리 방식으로, Entity 필드를 findBy{Field_1}And{Field_2} 와 같이 작성하면 WHERE field_1 = {Field_1} AND {Field_2} 같은 방식으로 쿼리 조건을 만들어준다는 장점이 있습니다. 해당 방식의 주의할 점은, 메서드 쿼리가 만들어지기 위해서는 Entity의 필드를 참조하기 때문에, 반드시 Entity의 필드명 혹은 쿼리 관련 키워드가 와야 한다는 점입니다. 문제는 해당 JpaRe..
Structured Output은 LLM을 사용하는 개발자들의 생산성을 보다 더 높여주기 위한 기능으로, JSON, XML or Java 클래스와 같이 메서드의 반환값으로 특정 타입을 지원해줍니다. Spring AI에서는 이러한 타입을 Converter를 통해서 제공해주는데요, 오늘은 Spring AI에서 제공해주는 Structured Output Converter에 대해 알아보려고 합니다. Structured Output ConverterLLM 모델에 대한 질의 결과로 받는 값을 특정 타입(JSON, XML or Java Class)으로 변환해주는 기능으로, 다음 사진과 같이 LLM 질의 결과를 추출하기 전에 컨버터에 의해서 결과 값을 변환할 수 있게 해주는 기능입니다. AI의 질의 결과 값을 내부 C..
Sprint AI의 Chat Client는 Builder 방식과 객체 생성 방식을 통해 편의성을 제공해주는데요, 각각의 속성에는 어떤 기능이 있는지 살펴보려고 합니다. static 메서드객체 생성 메서드로 create()와 builder()를 제공create()ChatClient 객체를 생성하기 위한 객체로 다음과 같이 기본적으로 ChatModel이 필요합니다.여기서 ObservationRegistry와 ChatClientObservationConvention은 Metric 관련 설정인데, 나중에 깊게 들어갈 때 알아보도록 하겠습니다.create()의 return 값은 ChatClient 객체로, 정적 팩터리 메서드로 사용됨을 알 수 있네요.static ChatClient create(ChatModel..
Spring AI에서는 AI 모델과 통신하기 위해 Prompt와 Message라는 객체를 사용하고 있습니다. 오늘은 Chat Client API에서 요청을 보낼 때 사용되는 Prompt와 Message라는 객체에 대해 알아보려고 합니다. Prompt란?AI 모델에게 사용자 의도를 가이드해 주는 문장을 말 하며, 사용자의 입력과 직간접적으로 연결되어 있기 때문에 Prompt를 잘 작성하는 것이 AI 모델의 응답을 보다 더 정확하게 추출할 수 있습니다.간단히 예를 들면, 사용자가 "사과에 대해 알려줄래?"라고 AI 모델에 요청했을 때, AI 모델은 "사과"라는 단어에 대해 "과일(물체)로서의 사과"와 "행위(감정)으로서의 사과" 이 두 가지 의미를 명확하게 인지하지 못하기 때문에 사용자가 원하는 답변이 나오..
요즘 LLM 기술을 활용한 사례가 많아지면서, 저도 파이썬 Langchain 기반의 LLM 파이프라인을 구성했었는데요,본래, Spring 개발에 더 익숙했던지라, Spring AI를 통한 개발을 진행해보려고 합니다. Chat Client란?Spring AI에서 제공하는 Porterable API로, AI 모델과의 통신을 지원해 주는 도구입니다. 보통 LLM에서 주로 사용하는 용어인 Prompt를 통해 AI 모델과 통신합니다.AI 모델은 두 가지 메시지를 통해 통신하는데요, 사용자가 입력한 메시지와 시스템에 안내하기 위해 생성되는 시스템 메시지입니다.사용자 메시지는 알겠는데.. 시스템 메시지란 뭘까요?시스템 메시지란, 사용자가 입력한 메시지를 AI 모델이 이해하기 쉽도록 개발자가 가이드를 내려주는 메시지를..
Spring AI란?서버 개발자가 AI를 개발하기 위해서는 많은 복잡성과 러닝커브가 존재합니다.Spring AI는 AI 개발의 복잡성을 최소화하여 앞으로 Spring 개발자가 AI 개발의 생산성을 높이기 위한 프로젝트로 사용될 수 있을듯 합니다.또한, AI 벤더(Open AI, Gemini 등)에 의존하지 않고 Spring에서 지향하는 추상화를 통해 이러한 기능들을 제공합니다. 이번 포스팅에서는 Spring AI에서 다루고 있는 요소들에 대해 간단히 알아보겠습니다. Porterbale APIAI 벤더들에 의존하지 않고, API call 방식을 통해 사용할 수 있는 기능을 제공해줍니다.채팅, 텍스트-이미지 변환, 임베딩 모델을 위한 API 제공 및 동기/비동기 스트리밍 기능을 제공해줍니다. POJO 기반..
QueryDSL 의존성 추가를 위해서는 다음 두 가지 의존성을 추가해야 합니다.implementation("com.querydsl:querydsl-jpa:5.0.0:jakarta")annotationProcessor("com.querydsl:querydsl-apt:5.0.0:jakarta") 문득, 개발을 하다가 궁금한 점이 생겼는데, querydsl-jpa 의존성 하나로 해결할 수 없을까? 라는 생각으로 이번 글을 작성하게 되었습니다. 우선 querydsl 저장소를 살펴보면, 다음과 같이 다양한 의존성을 제공하고 있습니다. 그 중에서 우리가 사용하는 querydsl-jpa와 querydsl-apt도 볼 수 있습니다. 그리고, 우리가 사용하는 querydsl-jpa의 의존성을 보면 다음과 같이 query..
보통 협업을 진행하다 보면 API 스펙을 전달해주고 완벽하게 테스트를 진행했는데도 들려오는 답변이 있습니다."API에서.. cors 에러가 발생해요.." 처음 협업을 진행하면서 CORS에 대해서 잘 모르기도 했었고, 스프링에서는 단순한 설정으로 이를 해결할 수 있었기 때문에 제대로 알아보고려고 하지 않았었죠. 이번에는 너무나 간단한 설정탓에 제대로 이해하지 못 했었던 CORS에 대해서 정리하고자 합니다. CORS란? CORS(Cross-Origin Resource Sharing)란, 클라이언트가 다른 출처(origin)에서 리소스를 요청할 때 발생하는 오류로 브라우저상에서 허용되지 않은 다른 출처를 제한하는 데 사용되는 보안 관련 오류입니다. CORS는 보통 아래 두 가지 이유로 발생하게 됩니다.브라우저..
iron_jin
'Spring Framework' 카테고리의 글 목록 (2 Page)