이 포스팅은 인프런 영한님의 강의를 복습하며 작성한 글입니다. AOP 프록시 내부 참조 문제 public class AspectV1 { @Around("execution(* hello.aop.order..*.*(..))") public Object doLog(ProceedingJoinPoint joinPoint) throws Throwable { // 프록시 객체 로직 log.info("[LOG] {}", joinPoint.getSignature().toShortString()); // Target 객체 호출 return joinPoint.proceed(); } } 스프링은 프록시 방식의 AOP를 사용한다. 따라서 AOP를 적용하려면 항상 프록시를 통해 Target 객체를 호출해야한다. 이것은 앞에서 만..
이 포스팅은 인프런 영한님의 강의를 복습하고 정리한 글입니다. @Aspect @Aspect를 단 클래스에 어드바이스와 포인트컷을 구현해주고, 이 클래스를 스프링 빈으로 등록해주면 스프링 AOP가 제공해주는 빈 후처리기(Bean PostProcessor)인 AnnotationAwareAutoProxyCreator는 내부적으로 이 @Aspect 스프링 빈을 어드바이저로 만들어 @AspectAdvisorBuilder에 저장해둔다. AnnotationAwareAutoProxyCreator는 다른 스프링 빈을 등록할 때, 포인트컷으로 어드바이스의 대상이 되는지 확인한다. 이 때 살펴보는 어드바이저는 스프링 빈으로 등록된 어드바이저, @Aspsect Adviosr Builder 내부의 저장소에 저장된 어드바이저를 ..
이 게시글은 인프런의 영한님의 강의를 듣고 복습하며 작성한 글입니다. Pageable 활용하기 페이징을 하는 것은 굉장히 고역이다. 그 어려운 것을 스프링 데이터 JPA는 Pageable 인터페이스를 넘겨주고, Page나 Slice 타입의 객체를 받아서 페이징을 아주 손쉽게 해준다. 따라서 우리는 Page, Slice, Pageable을 적극적으로 활용하는 것이 마땅하다. Controller에서 Pageable 객체 받기 @ResponseBody @GetMapping("/testCode") public String testPageable(Pageable pageable) { // Pageable 객체 받음. log.info("pageable : {}", pageable); return "ok"; } Co..
이 포스팅은 인프런 영한님의 강의를 복습하며 작성한 글입니다. 페이징 조건 검색조건 : 나이가 10살 정렬 조건 : 이름으로 내림차순 페이징 조건 : 첫번째 페이지, 페이지당 보여줄 데이터는 3건 위 조건을 페이징해서 가져와야한다고 하자. 이 때, 순수 JPA와 스프링 데이터 JPA를 사용해서 각각 페이징을 해보고자 한다. 순수 JPA 페이징 페이지에 맞는 회원 가져오기 public List findByPage(int age, int offset, int limit) { return queryFactory.selectFrom(member) .where(member.age.eq(age)) .orderBy(member.username.desc()) .offset(offset) .limit(limit).fet..
이 게시글은 인프런 영한님의 강의를 복습하며 작성한 글입니다. 스프링 데이터 JPA 클래스 관계도 스프링 데이터 JPA는 다음과 같이 JpaRepository 인터페이스를 제공해주고, 이 인터페이스를 상속받은 인터페이스를 사용하게 되면 JPA를 좀 더 편리하게 사용할 수 있게 된다. JpaRepository 인터페이스의 클래스 다이어그램은 위에서 확인할 수 있다. JpaRepository의 패키지는 "org.springframework.data.jpa.repository"으로 되어있다. JpaRepository는 JPA 패키지에 있기 때문에 JPA에서만 활용할 수 있다는 것을 알 수 있다. PagingAndSortingRepository, CrudRepository 등등은 "org.springframew..