RAG의 기본 구조와 Document · VectorStore를 활용한 데이터 저장 1. 이번 프로젝트에서 새롭게 배운 핵심 이번 프로젝트에서는 단순히 AI에게 질문을 전달하고 답변을 받는 방식에서 벗어나, 외부 데이터를 AI가 검색하여 답변에 활용할 수 있도록 만
이번 프로젝트에서는 조회 성능을 향상시키기 위한 JPA 조회 전략과 Repository 설계 방식을 학습하였다. 특히 FetchType.LAZY, @EntityGraph를 이용하여 N+1 문제를 해결하는 방법을 익혔으며, Repository를 인터페이스로 추상화하여 S
이번 프로젝트에서는 MovieEntity와 MovieImageEntity 사이의 연관관계를 설계하고, JPA가 객체를 어떻게 관리하는지에 대해 학습하였다.특히 OneToMany와 ManyToOne 관계, Cascade, orphanRemoval, BaseEntity를
이번 프로젝트에서는 사용자가 입력한 영화 정보와 이미지 파일을 하나의 요청으로 받아 데이터베이스에 저장하는 기능을 구현하였다. 이전 프로젝트에서는 문자열과 숫자만 저장하였다면, 이번에는 MultipartFile을 이용한 파일 업로드, DTO를 Entity로 변환, Mo
이번 프로젝트에서는 기존 영화 CRUD 프로젝트를 확장하여 이미지 파일 업로드 기능을 구현하였다. 단순히 영화 제목과 가격 같은 텍스트 데이터만 처리하는 것이 아니라, 사용자가 여러 장의 이미지를 선택하여 업로드하고 이를 서버(Local) 또는 S3와 같은 외부 저장소
이번 프로젝트에서는 Spring Data JPA를 활용한 영화 CRUD 기능 구현과 Spring MVC의 예외 처리 구조를 함께 학습하였다. JpaRepository와 Service 계층을 이용하여 조회, 등록, 수정, 삭제 기능을 계층적으로 구현하고, BaseEnti
이번 프로젝트에서는 Spring Boot와 Thymeleaf를 활용하여 영화(Movie) 관리 시스템을 구현하면서 화면의 중복을 줄이기 위한 Fragment(프래그먼트), DTO를 이용한 계층 간 데이터 전달, Validation을 통한 입력 검증, 그리고 MVC(Mo
이번 프로젝트에서는 단순히 데이터를 저장하고 조회하는 기능을 구현하는 것을 넘어, 프로젝트에서 반복적으로 사용되는 공통 기능을 효율적으로 관리하는 방법을 학습하였다.특히 Spring Boot의 @ConfigurationProperties를 활용하여 설정 파일의 값을 객
이번 프로젝트에서는 사용자가 입력한 데이터를 데이터베이스에 저장하기 전에 올바른 값인지 검증(Validation) 하는 방법을 학습하였다. 단순히 Controller에서 데이터를 받아 저장하는 것이 아니라, Bean Validation을 이용하여 입력값의 형식을 검사하
이번 프로젝트에서는 화면을 구성하는 것뿐만 아니라 Spring Boot 애플리케이션의 환경을 효율적으로 관리하는 방법을 학습하였다. 하나의 설정 파일에 모든 정보를 작성하는 것이 아니라 설정을 역할별로 분리하고, @ConfigurationProperties를 이용하여
Thymeleaf 템플릿 엔진을 활용한 동적 화면 구성과 Spring MVC 연동 Thymeleaf 템플릿 엔진을 이용하여 서버에서 전달한 데이터를 화면에 출력하고, 사용자 입력을 다시 서버로 전달하는 과정을 학습하였다. 또한 Spring MVC의 Model 객체를 활
이번에는 RAG의 개념을 이해하는 것에서 나아가 Spring Boot와 Spring AI를 활용하여 실제 RAG 시스템을 구현하는 과정을 학습하였다. 단순히 AI에게 질문을 전달하는 것이 아니라 문서를 Vector Database에 저장하고, 문서를 검색하고, 검색된
RAG(Retrieval-Augmented Generation)와 Vector Database의 이해 및 Spring AI 기반 RAG 구조 학습 이번에는 기존의 생성형 AI(ChatGPT, Gemini 등)가 가지고 있는 한계를 해결하기 위한 RAG(Retrieva
Spring Data JPA를 활용하여 AI Chat Memory를 데이터베이스에 저장하고 관리하는 기능을 구현하였다. 이전에는 MyBatis를 사용하여 SQL을 직접 작성하고 Mapper를 통해 데이터베이스를 제어하였다면, 이번에는 객체(Entity)를 중심으로 데이
Spring AI의 Chat Memory 기능을 MyBatis와 연동하여 AI와 사용자의 대화 내용을 데이터베이스에 저장하고, 이전 대화 내용을 다시 불러와 대화를 이어갈 수 있는 기능을 구현하였다.기존에는 AI와의 대화가 한 번의 요청과 응답으로 끝나는 구조였다면,
Spring AI를 활용하여 다양한 생성형 AI 모델과 통신하는 방법을 학습하였다. 하나의 AI 모델만 사용하는 것이 아니라 Groq, Google Gemini, NVIDIA NIM과 같은 여러 LLM(Large Language Model)을 하나의 프로젝트에서 관리하
이번 프로젝트에서는 Spring Data JPA의 기본 CRUD 기능을 넘어 Querydsl, 페이징(Pageable), Auditing, 트랜잭션 전파(Propagation), 롤백 정책 등 JPA의 고급 기능을 학습하였다. 또한 Repository를 인터페이스와 구
단순한 CRUD 구현을 넘어 JPA의 연관관계 매핑과 영속성 컨텍스트를 활용하는 방법을 학습하였다. 반려동물 병원 예약 시스템을 구현하면서 @OneToMany, @ManyToOne, @OneToOne과 같은 연관관계 어노테이션을 적용하고, 트랜잭션과 더티 체킹, Sof
이전 MyBatis 프로젝트에서 사용하던 Mapper와 XML을 이용한 데이터 접근 방식 대신 Spring Data JPA를 이용하여 데이터를 관리하였다.이전에는 SQL을 직접 작성하고 MyBatis가 SQL과 객체를 연결해 주는 구조였다면, 이번 프로젝트에서는 JPA
이번 MyBatis3 프로젝트에서는 이전 MyBatis2 프로젝트에서 학습했던 1:N(회원-주문) 관계를 확장하여 학생(Student)과 강의(Course)의 다대다(M:N) 관계를 구현하였다.기존 프로젝트에서는 하나의 회원이 여러 주문을 가지는 구조였기 때문에 하나의