Skip to content

utopiandreams/AOP_Practice

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AOP_Practice

내잔고 프로젝트에 적용중인 N+1 Detector 를 시험해 보면서 AOP 및 프록시 기술을 공부하기 위한 Repository 입니다. 현재 N+1 Detector 는 DB connection 에서 실행되는 쿼리수를 카운트하고 이에 걸리는 시간을 측정해주는데, 이에 더해서 근본적으로 N+1 을 근본적으로 디텍팅을 하는 기능을 만들어 보고자 했습니다.

Hibernate 는 테이블 - 객체 간 맵핑 시 특정 객체와 연관된 객체를 전부 조회하지 않고 단순 ID 값만을 가지고 있는 프록시 객체로 넣어줍니다. 만약 사용자가 해당 프록시 객체의 필드를 조회하게되면 Hibernate 는 추가적인 쿼리를 DB 에 보내 해당 프록시 객체를 Initialize 하게 됩니다. 이를 LazyLoading 이라 하는데, N+1 문제는 여기서 발생합니다.

저는 각 Repository 가 스프링 빈으로 등록이 되어있다는 점에서 착안하여, 조회 로직이 실행될 때 반환되는 객체에 어드바이스를 더하여서, 연관된 프록시 객체 접근하는 지를 프록시를 통해 추적하고자 하였는데, 생각해야할 경우의 수가 너무 많았습니다.

결과적으로 현재 역량에서 이를 구현하는 것에는 실패하였으나, @Around, @After 어노테이션을 활용하고 Proxy 객체를 직접 만들어 보면서 AOP 와 Proxy 에 대한 공부를 하는 기회가 되었고, Hibernate 에서 프록시 패턴을 활용하는 방식에 대해서도 이해가 넓어졌습니다.

Releases

No releases published

Packages

No packages published

Languages