Hyunjoon Choi

Hyunjoon Choi님의 아티클

Hyunjoon Choi

Hyunjoon Choi

Spring AI로 이미지 분석과 응답 JSON (dto)을 설정하자

안녕하세요. Spring AI에 대해 꾸준히 글을 올리고 있는 학생입니다.

음식 분석 서비스를 본격적으로 개발함에 따라 Spring AI를 프로젝트에 적용하게 되었는데요, 이번에 아래 내용을 배우게 됨에 따라 블로그에 공유하게 되었습니다.

1. LLM이 반환할 타입을 JSON (dto)로 강제하기

2. LLM에게 사진을 분석해달라고 요청하기 (API로)

추가로 프로젝트에 프롬프트를 직접 String으로 넣다보니, 이렇게 프롬프트를 넣고 LLM에게 보내는 일이 잦을 것 같아 불편하다는 생각이 들었습니다.

따라서 다음 글에서는 프롬프트 파일을 resources에 별도로 보관하고, 스프링의 AOP를 이용하여 보관된 파일의 location만 넣으면 프롬프트 내용을 조회할 수 있도록 개발할 계획입니다.

읽어주셔서 감사드립니다.

4
0
Hyunjoon Choi

Hyunjoon Choi

API 설계 과정에서부터 성능 고민을 하다

오랜만에 프로젝트를 하며 고민한 내용을 다룬 글을 작성하였습니다.

Spring AI에 컨트리뷰트 경험을 제공해줬던 캡스톤 프로젝트를, 부트캠프에서 다시 처음부터 설계해보는 과정을 진행하고 있습니다.

바로 개발을 시작하기보다는 API와 DB 구조를 먼저 설계한 뒤 개발을 하기로 하였는데요, 그래서 그런지 API 설계를 하는 과정에서도 생각보다 많은 것을 배울 수 있었습니다.

고민한 점은 다음과 같았습니다.

- POST 응답 시 id 반환 vs 최대한 많은 데이터를 응답

- 파일 (사진) 업로드 성능 개선 고민 - PresignedURL을 이용한 이유

- AI를 호출하여 데이터를 분석/생성할 때 GET or POST에 대한 고민

- 조회 과정에서의 페이지네이션 방식으로 커서 기반 페이지네이션을 적용한 이유

- 삭제 처리를 soft delete로 한 이유

- 취소 요청 API 설계 및 Rate Limit에 대한 고민

API를 설계를 하며 성능적으로 고민해보는 과정에서 그동안 API를 설계할 때는 단순 구현만 생각하고 있었음을 알게 되었습니다. 다음 글로는 DB 설계를 했을 때 발생한 고민점에 대해서 공유하고자 합니다.

1
0
Hyunjoon Choi

Hyunjoon Choi

효과적으로 프롬프트를 작성하자, PromptTemplate

이번에는 Spring AI에서 프롬프트를 더 편리하게 작성할 수 있는 PromptTemplate에 대해 알아봤습니다. 핵심만 요약하면, PromptTemplate을 이용하면 LLM에게 프롬프트를 질의할 때 동적으로 키워드들을 할당할 수 있습니다.
예를 들어, Tell me about {genre} song 이라는 프롬프트를 줄 때 이 "genre"에 대한 값을 Map 형태로 넣을 수 있게 됩니다.

7
4
Hyunjoon Choi

Hyunjoon Choi

5월 22일, Spring AI에서 큰 변경점이 생겼습니다.

안녕하세요. 일전에 Spring AI를 적용하는 방법에 대해 알아보고, 글을 공유한 학생입니다.

현지 시간으로 5월 22일 갑자기 Spring AI에 대해 중요한 변경점이 업데이트 되었는데요, 기존에 사용하던 ChatClient 방식이 더 이상 사용되지 않음에 따라 하루빨리 변경점에 대한 내용을 분석하고 다시 글을 작성해야겠다는 생각이 들었습니다.

처음에는 왜 굳이 기존 방식을 뜯어고치게 되었나 약간은 아쉬운 마음이 들었었는데, 연구해보니 빌더 패턴을 이용하여 시스템 메시지 (AI에게 부여할 역할)와 유저 메시지 (실제로 보낼 메시지)를 한 번에 적용할 수 있다는 사실을 알고 감탄스러웠습니다.

더불어 신생 기술은 이렇게 변경이 자주 일어나니, 기술 도입에 대해 신중하게 생각하거나 도입을 하더라도 안정화 단계에 들어선 다음에 해야 적합할 것이라는 생각을 가지게 된 계기였습니다.

해당 변경점에 대해 정리한 글을 공유합니다.

1
0
Hyunjoon Choi

Hyunjoon Choi

Spring AI 기여가 반영되기까지의 기록

1. 방학 때 인공지능을 이용한 프로젝트를 만들고 싶은 마음이 생겼습니다.

2. 스프링 환경에서 RestTemplate, WebClient 등의 방식이 불편하게 느껴졌습니다.

3. 그러던 도중, Spring AI를 소개한 인텔리제이 영상을 보게 되었습니다.

4. Spring AI를 자바에서 어떻게 적용할 수 있는지 소개한 국내 블로그 글이 많이 없는 것 같아 블로그로 작성하였고, 선점 효과 덕분에 1,000명이 넘는 분들이 방문해주셨습니다.

5. Spring AI 글 덕분에, 미국 실리콘밸리에서 창업하셨던 대표님 (은솔 대표님)께 인생 첫 커피챗을 받았습니다.

6. Spring AI를 더 깊게 파야겠다고 결심한 후, 코드를 보던 도중 ImageResponse라는 클래스에 주석이 없고 런타임 예외가 발생할 수 있는 결함을 발견하였습니다.

7. 관련 내용을 수정한 PR을 올렸고, 오늘 아침 merge 되었습니다. 이제 Spring AI에 author로 제 이름이 올라갔습니다.

더 중요한 것은, 아직 방학 때 만들 프로젝트를 시작하지도 않았다는 점 입니다. 그런 점에서 다가올 여름방학 동안 제가 얼마나 더 성장할 수 있을지 스스로도 기대가 되고 있습니다. (이번 주 토요일에 있을 spring camp 2024도 Spring AI 내용이 있어 기대가 됩니다.)

더욱 몰입하여 좋은 경험을 얻도록 꾸준히 공부하겠습니다.

아래는 merge된 PR 입니다.

2
0
Hyunjoon Choi

Hyunjoon Choi

[Github] Github의 Issue와 PR (Pull Request) 알아보기 (PR 병합 후 이슈가 자동으로 닫히게 하려면?)

오늘은 깃허브에 대해 미숙한 분들을 대상으로, 깃허브 이슈와 풀리퀘스트를 관리하는 방법, 필요한 이유, 풀리퀘스트 병합 후 이슈가 자동으로 닫히도록 하는 방법에 대해 알아보았습니다.

스프링 프로젝트를 하면서 이슈가 자동으로 닫히지 않는 부분을 해결하려고 글을 작성하게 된 건데, 그 부분은 깃허브 액션에 더 관련된 부분 같아 다음에 작성하고자 합니다.

그래도 파편화 되어 있던 지식들을 한 글에 통합하고, 이슈와 풀 리퀘스트라는 기술을 쓰게 된 저만의 이유를 정립하게 된 좋은 계기가 되었습니다.

1
0
Hyunjoon Choi

Hyunjoon Choi

자바 컬렉션 프레임워크 성능 분석기 (poor performance 경고가 뜨는 이유와 제거 방법)

안녕하세요 스프링과 자바를 공부하는 학생입니다. 이전에 Spring AI에 대한 국내 글이 많이 없음을 보고 적용 과정을 글로 남겼는데, 생각보다 많은 분들께서 방문해주셔서 감사하게 느껴졌습니다.

이 기운을 받아 더 꾸준히 글을 써야겠다고 느꼈고, 그래서 오늘 (목~금) 컬렉션에 대한 성능 분석 글을 작성했습니다.

인텔리제이에서 자바 컬렉션인 리스트 타입에 list.containsAll(list2)와 같은 메서드를 호출하면 poor performance라는 경고를 주는데요, 이 문제가 왜 발생할지, 더 나아가 컬렉션 프레임워크의 메서드들이 어떤 구조를 가지고 있는지 등에 대한 과정을 기록하였습니다. 또한, VisualVM 분석 도구를 이용하여 리스트 방식과 HashSet 방식 간의 자원 소모 차이는 어느 정도인지도 기록하였습니다.

관심 있으신 분들은 방문해주시면 감사하겠습니다.

1
0
Hyunjoon Choi

Hyunjoon Choi

Spring AI 적용기

안녕하세요 :) 스프링 백엔드를 공부하고 있는 학생입니다.

스프링에서 인공지능 API를 편리하게 연동할 수 있는 Spring AI를 만들었는데, 이를 설명해주는 국내 블로그 글이 몇 없는 것 같아 공식 문서와 소개 영상을 토대로 글을 작성해봤습니다.

궁금하신 분들은 아래 링크를 참고해주세요 :) 감사합니다!

2
0