Dynamic Proxy

    다이내믹 프록시를 활용한 JPA QueryCounter 구현기

    들어가며 JPA와 같은 ORM을 사용할 때, 지연 로딩과 같은 기능을 무분별하게 이용하다보면 원래 의도했던 개수보다 더 많은 쿼리가 발생하기도 한다. ORM에서 흔히 발생하는 N + 1 문제도 개발자의 의도와 다르게 N번의 쿼리가 더 발생하게 된다. 이렇듯 ORM을 사용하다보면 예상하지 못한 개수의 쿼리가 발생하기도 하는데, 이를 한눈에 파악하기는 쉽지 않다. 물론 JPA의 show-sql 기능을 사용하면 로그에 쿼리가 출력되기는 하지만, 좀 더 쉽게 알아볼 수 있는 방법이 필요하다는 생각이 들었고, 이를 위해 다이내믹 프록시를 활용하여 JPA QueryCounter를 구현해보기로 하였다. 여기서는 Spring Data JPA를 기반으로 설명한다는 점을 알고가도록 하자. 기본 원리 JPA QueryCou..

    다이내믹 프록시를 이용한 부가 기능 분리

    부가 기능 분리 부가 기능(Ex. 트랜잭션)은 비즈니스 로직과 성격이 다르기 때문에 분리해줄 필요가 있다. 이러한 분리는 프록시를 사용하여 진행할 수 있는데, 일반적인 프록시를 사용하게 되면 몇 가지 문제점과 마주하게 된다. 어떠한 문제점이 있는지 알아보고, 이를 다이내믹 프록시로 개선시켜보도록 하자. 프록시 적용해보기 먼저 다음은 프록시를 적용하여 부가 기능과 핵심 기능을 분리한 예제이다. public interface UserService { void add(User user); void upgradeLevels(); } public class UserServiceTx implements UserService { private UserService userService; private Platform..