[Spring boot] Spring AOP - CGLIB Proxy vs Dynamic Proxy
·
Backend/Spring Boot
문제 상황usecase를 작성중 , 메소드에 @Transactional 컴포넌트를 붙이자 오류가 발생하였다 나는 이 class를 다른 클래스에 상속한 적이 없었는데, 오류 메세지를 보니 해당 클래스는 implicitly subclassed이기 때문에 open 키워드를 명시해주어야 한다고 적혀있다.즉 , 이 클래스가 나중에 상속될 가능성이 있는 클래스라는 것이다.메소드에 @Transactional 어노테이션을 제거하면, 오류가 사라지는것을 보아, 해당 문제의 원인이 @Transactional이라고 생각을 했다.  문제 원인어노테이션에 적용되는 Spring AOP의 내부적인 구조를 알게 되면 이 문제의 원인을 알 수 있다. Spring AOP는 Proxy패턴을 기반으로 동작하는데, 런타임시 동적으로 프록시 ..
[SpringBoot] QueryDsl의 Pagenation + PageableExecutionUtils을 이용해 count 쿼리 최적화
·
Backend/Spring Boot
JPA Repository를 사용할 때 public interface PostRepository extends JpaRepository { Page findByTitle(String title, Pageable p); } JPA repository는 Pageable을 매개변수로 받을 시 , 반환형을 Page로 추상화 해준다.    QueryDsl을 사용할 때@Repository@RequiredArgsConstructorpublic class PostRepositoryImpl implements PostRepositoryCustom { private final JPAQueryFactory queryFactory; @Override public Page findByTitleCustom(Str..
[Spring boot] JPA에서 Slice와 Page의 차이
·
Backend/Spring Boot
Slice public interface Slice extends Streamable { int getNumber(); int getSize(); int getNumberOfElements(); List getContent(); boolean hasContent(); // ...} JPA에서 정의한 Slice 인터페이스는 다음과 같다. 현재 페이지의 데이터들을 불러오고, 다음 페이지가 있는지 여부를 확인한다. Page public interface Page extends Slice { long getTotalElements(); int getTotalPages(); //...} Page 인터페이스는, Slice를 상속받기..
[Spring Boot] Pageable을 이용해 페이지네이션구현(+JPA)
·
Backend/Spring Boot
페이지네이션이란?페이지네이션이란, 게시글이 많을 때 , 이를 전부 보여주지않고 페이지화 시켜서 보여주는것을 의미합니다.보통 적은 규모의 데이터는 , 리소스를  서버에서 클라이언트로 전부 전달해도 성능에 큰 지장이없지만,큰 규모의 데이터를 전달할 때(혹은 트래픽이 많은 서버), 쓸데 없이 모든 리소스를 전달하는 것보다.해당 페이지의 리소스만 전달하는것이 서버 입장에 있어 부담이 덜 하기 때문에 사용합니다.  RESTFUL API로 설계된 서버에서, 페이지네이션을 구현하려면두가지 단계가 필요합니다. 첫번째로, 총 페이지가 몇 페이지인지 클라이언트에게 전달해야합니다. 그래야만이 클라이언트는 이 리소스가 총 몇페이지가 있는지 확인 할 수 있습니다. 또한, 현재 페이지가 몇페이지인지 , 마지막페이지인지 첫번째페이..
[Spring Boot] Spring AI + Google vertex ai gemini 이미지 처리하기
·
Backend/Spring Boot
https://spring.io/projects/spring-ai Spring AISpring AI is an application framework for AI engineering. Its goal is to apply to the AI domain Spring ecosystem design principles such as portability and modular design and promote using POJOs as the building blocks of an application to the AI domain. Feaspring.io   Spring AI란 Spring에서 만든,  여러가지 Generative AI(GPT, gemini 등등..)을 Spring Framework에 쉽게 ..