스프링부트에서 AOP 구현은 프록시를 활용하며 @Aspect 어노테이션을 제공하여 구현 편의성을 제공해준다. 스프링부트에서 AOP 를 구현하기 위해선 @Aspect 에 대해 알아야 하며 이와 관련된 용어에 대해 숙지하고 있어야 한다. AOP 관련 용어 조인 포인트(Join point) 어드바이스가 적용될 수 있는 위치, 메소드 실행, 생성자 호출, 필드 값 접근, static 메서드 접근 같은 프로그램 실행 중 지점 조인 포인트는 추상적인 개념이다. AOP를 적용할 수 있는 모든 지점이라 생각하면 된다. 스프링 AOP는 프록시 방식을 사용하므로 조인 포인트는 항상 메소드 실행 지점으로 제한된다. 포인트컷(Pointcut) 조인 포인트 중에서 어드바이스가 적용될 위치를 선별하는 기능 주로 AspectJ 표..
IT/스프링
AOP 가 무엇인지 알아보기에 앞서 AOP 가 등장하게된 배경에 대해 먼저 알아보자. 웹 어플리케이션 서버에서 흔히 사용되는 패턴인 MVC + Repository 패턴이다. 각 역할별 책임을 분담하여 레이어를 이루는 구조이다. 만약 위 구조에서 각 레이어에서 호출, 응답에 대해 로그를 남겨 추적하고 싶다면 어떻게 해야할까? (일반적으론 이런 경우 APM 이 사용되지만 배경 설명을 위해 로그를 예로 들었다.) 단순한 방법으론 위와 같이 각 레이어에 로그 추적 코드를 추가하는 방법이 있을것이다. 하지만 만약 로그 추적을 해야하는 파일의 갯수가 수백개인 경우에도 이렇게 작업을 해야할까? 할수야 있겠지만 매우 비효율적이고 관리하기 힘든 형태이다. 잘 살펴보면 로그 추적 로직은 공통 코드로서 유틸리티한 기능이기 ..
스프링을 공부하다 문득 @Bean 과 @Component 의 차이에대해 궁금증이 생겨 알아보았고 그 내용을 정리해보고자 한다. 스프링 컨테이너에의해 생성, 관리되는 자바 객체(POJO(Plain Old Java Object))이며 기본적으로 싱글톤 형태로 생성, 관리 된다. 이 스프링 빈을 등록하는 방법에는 2가지가 있다. 1. 스프링 부팅 과정에서 스캔되어 바로 등록 @Component 어노테이션 사용. 대부분의 경우 @Component 를 사용하여 스프링 빈으로 등록하며 특별한 경우가 아니면 이 방법을 사용할 것이다. ex) @Controller, @Service, @Repository ... (@Component 를 갖고 있는 어노테이션들) 스프링 DI 관련하여 문서에선 일반적으로 이 방법을 추천 ..
이번 글에선 자바 JPA 에 대해 알아보고자 한다. 자바 JPA 란 ORM (Object–relational mapping) 기법을 자바에 적용하기 위해 만들어진 API 표준 이다. 인터페이스로서의 역할만 하기 때문에 실질적인 구현체들은 자바에서 제공해주는 JPA 를 인터페이스로 사용하여 만들어져 있다. 대표적인 JPA 구현체들은 Hibernate, EclipseLink, DataNucleus, OpenJap, TopLink 등이 있고 하고 개인적으론 Hibernate 만 써보아서 각 구현체들에 대한 장단점은 아직 잘 모르겠다. 그리고 Java JPA 에선 영속성 컨텍스트(Persistence Context) 라는 개념이 나오는데 JPA 에선 이 영속성 컨텍스트에 대해 꼭 알아야한다. 그럼 영속성 컨텍스..