본문 바로가기

Project9

[Project] Spring Rag 도입 도전기(Spring AI, Qdrant DB) 서론최근 AI, RAG, AI agent와 관련한 내용이 자주 들리기도 하고, 회사 신입들에게 내줄 프로젝트 주제가 Rag를 활용한 챗봇 이나 AI Agent 구축이라는 주제일 것이라고 들어 Spring으로 구축을 해보았습니다. 초보자가 Rag에 대해 알아가는 과정임으로 틀린 부분이 있을 수도 있습니다. 틀린 부분은 댓글을 달아 주시면 고쳐서 재업로드를 하겠습니다!  RAG(Retrieval-Augmented Generation)란 무엇인가?RAG는 "검색을 통한 보강 생성"의 약자로, 대형 언어 모델(LLM)이 자체 지식만으로 답변을 생성하는 대신, 외부 지식원(예: 문서, 데이터베이스)에서 관련 정보를 검색하여 그 정보를 바탕으로 더 정확하고 구체적인 답변을 생성하는 방식입니다.주요 특징:검색 단계:.. 2025. 1. 22.
[Project] TDD 개발 시 given의 코드 양 줄이기 (Fixture, Persister) + @spy 활용 서론:IT연합동아리 DND에서 진행한 프로젝트를 하며 느낀 점입니다. TDD로 개발을 진행하게 되면서 메인 코드 뿐만 아니라 테스트 코드도 코드임을 느꼈습니다. 어떻게하면 테스트 코드의 양을 줄일 수 있고, 테스트를 편하게 작성할 수 있는지에 대한 고민이 담겨있습니다. 본론으로 들어가기 전에 저의 프로젝트는 Controller, Service, Repository 모든 계층의 테스트가 given-when-then 패턴을 사용하는 단위테스트로 이루어져있음을 알립니다! Fixture처음에는 given에 머릿속으로 흘러가는 로직을 모두 다 넣으면서 개발을 했었습니다. 하지만 연관 관계가 많은 엔티티를 마주하자 제가 사용하던 로직은 좋은 코드가 아님을 깨달았습니다. 제가 쓴 코드들을 쓱 보다가 문뜩 "모든 계층.. 2024. 6. 8.
[Project] 실시간 채팅 구현 시 FCM Token 발송 여부 결정하기 서론 tincle 앱 1:1 대화 기능을 개발 중, 대화방에 모두 들어와있을 경우에 메세지 전송을 하게 된다면 FCM Token을 발송하지 않고, 한 명만 들어와있을 경우에는 FCM Token을 발송하는 로직을 구현해야 했습니다. 프론트 쪽에서 대화방에 들어와 있을 경우 인앱 알림을 끄는 방안도 있었으나, 백엔드에서 처리하는 방법이 없을까? 고민을 하다가 이 방안이 괜찮은 것 같아서 백엔드에서 처리하기로 했습니다. socket, stomp 사전 설정 WebSocketConfig @Configuration @EnableWebSocketMessageBroker @RequiredArgsConstructor public class WebSocketConfig implements WebSocketMessageBr.. 2024. 3. 25.
[Project] Spring + Stomp 테스트 하는 과정.. (실시간 채팅 구현) 서론 tincle이라는 친구 기반 SNS 서비스를 개발하는 도중, 1:1 채팅 즉 DM같은 기능을 개발하게 되었습니다. 그 과정에서 소켓과 Stomp를 도입하게 되어서 테스트를 하려고 알아보던 중.... 난관에 대해 소개하려합니다. 해당 글은 소켓이 무엇인지, Stomp가 무엇인지가 아닌 테스트하는 방법에 대해 서술합니다.  테스트 과정 전 필자의 설정 저의 webSocket 설정은 다음과 같습니다. WebConfig@Configuration@EnableWebSocketMessageBroker@RequiredArgsConstructorpublic class WebSocketConfig implements WebSocketMessageBrokerConfigurer { private final Stom.. 2024. 2. 27.
[Project] 멀티 모듈을 왜 쓸까? (멀티 모듈 도입 전) 서론 IT 연합동아리 DND에 참가하게 되어서 새로운 사이드 프로젝트를 진행하게 되었습니다. 백엔드는 2명으로 이루어져 있는데, 소통을 하다보니 자연스럽게 이번 프로젝트에 대해 고민하게 되었습니다. 이번 프로젝트로 얻어가는 것으로 두가지 주제가 있었는데 하나는 멀티 모듈, 나머지 하나는 TDD 였습니다 ! 이번 글에서는 멀티 모듈에 대해 얘기해 보려고 합니다. 모듈은 무엇인가? Oracle Java 문서에서 모듈이란 패키지의 한단계 위의 집합체이며, 관련된 패키지와 리소스의 재사용할 수 있는 그룹이라고 정의하고 있습니다. 이때 각 모듈은 독립적으로 개발, 빌드, 테스트, 배포가 가능합니다. 멀티 모듈 멀티 모듈 프로젝트는 상호 연결된 여러 개의 모듈로 구성된 프로젝트를 의미합니다. 즉 멀티 모듈 단일 프.. 2024. 1. 15.
[Project] google Oauth2 로그인 시 refreshToken을 받는 방법 (최초 로그인에서 저장을 못했을 때) 서론 tincle이라는 프로젝트를 진행 중에 일어난 일입니다. 1차 MVP에서는 google과 kakao의 회원가입 기능만 개발하기로 해서 회원가입 기능만 개발했었습니다. 1차를 완료한 후 2차 개발이 시작되었는데, 2차에서 플레이스토어 배포를 위해 회원 탈퇴기능을 구현해야 했습니다. 그 과정에서 최초 google 로그인에서 refreshToken을 저장하지 못했을 때 다시 발급 받는 과정에 어려움이 있어 다른 누군가에게 도움이 되기 위해 이 글을 적습니다. google 로그인과 회원 탈퇴 로직 보기(Java/Spring) -> https://github.com/DoDream-dev/Tinqle-Server/blob/develop/src/main/java/tinqle/tinqleServer/domain/.. 2023. 11. 29.