목록Spring (34)
코딩항해기

@Order동일한 조인포인트에 여러 개의 Advice가 지정된 경우, 여러 개의 AOP가 같은 시점에 동작하게 되는 중첩 AOP상태가 된다. 특히 Spring framework에서 정의한 AOP가 사용될 때 자연스럽게 중접 AOP가 되는 경우가 많이 있는데, 이 때 먼저 실행해야하는 AOP가 있다면 @Order를 통해 우선 순위를 지정할 수 있다. Spring에서 자주 사용하는 @Transectional 어노테이션을 사용하는경우 Transaction Advisor 다음에 다른 Advisor가 위치하면 해당 Advisor 또한 트랜잭션에 포함되므로 수행되는 시점은 굉장히 중요하다. 또한 경우에 따라 순서가 뒤섞이며 의존성 관련한 문제가 생길 수도 있다. 문법위치는 중첩되는 Advice 메서드 위에 위치한..

@AfterThrowing사용하면 예외가 발생해 비정상적으로 종료될 때 실행된다.이 때 어떤 예외가 발생했는지 알고 싶다면 throwing 속성을 사용할 수 있다. 다만 말 그대로 예외가 발생한 뒤 실행되기 때문에 예외가 발생하지 않도록 하는 것은 불가능하다. 예외를 다시 던져 전파하거나 특정 예외를 다른 예외의 형태로 변환해줘야할 때 사용된다. 다른 형태의 예외로 변환 예시DataAccessException이 발생하면 ApplicationException을 일으킨다.@Aspect@Servicepublic class MethodExceptionPropagationAspect { @AfterThrowing(value = "execution(* *..*ServiceImpl.*(..))", throwin..

트랜잭션 Transaction 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 기능의 단위 혹은 일련의 연산을 칭한다. 관계형 데이터베이스에서 하나의 작업 또는 밀접하게 연관되어 있는 작업 수행을 위해 나눌 수 없는 최소 수행 단위를 트랜잭션이라고 한다. 중간에 서비스가 제대로 처리되지 않는다면 수행 이전으로 돌아가는 롤백이 있다. 트랜잭션 또한 종단 기능 사이에 횡단으로 사용되는 기능이므로 Advice를 활용한다. 의존 주입 (dependency)connection 객체를 활용하므로 DataSource를 제공하는 의존성과 AOP를 사용할 수 있도록 도와주는 의존성을 주입해야한다. org.springframework spring-aop org.springfra..

템플릿 패턴복잡한 로직, 반복되는 로직을 캡슐화하는 패턴으로 중복되는 코드를 줄이고 유지보수를 편리하게 할 수 있다. GoF 디자인패턴 : 템플릿 패턴알고리즘의 구조를 메서드에 정의하고, 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴이다. 알고리즘이 단계별로 나뉘거나, 같은 역할을 하는 메서드이지만 여러 곳에서 다른 형태로 사용이 필요한 경우 유용한 패턴이다. 대표적인 예시로 JDBCTemplate가 있으며, JDBCTemplate를 적용하는 방법에 대해 정리한다. JDBCTemplateJDBC에 템플릿 패턴을 적용한 것으로 기존 반복되던 코드가 줄어들어 가독성이 좋고, 유지보수에 용이하다.버전에 따라 의존 주입을 필요로 하기 때문에 의존 주입을 먼저 진행한다. org.spring..

[Spring] 관점 지향 프로그래밍 AOP (xml)AOP 관점 지향 프로그래밍 Aspect Oriented ProgrammingSpring 프레임워크는 IoC와 AOP을 지원하는 경량의 프레임워크이다. 그 중 AOP는 관점 지향 프로그래밍을 의미하며, 횡단 관심사의 분리를 허용해 모듈minibcake.tistory.com xml 설정파일은 @어노테이션으로 대체 가능하므로 어노테이션으로 AOP 처리하는 법에 대해 정리한다. AOP 어노테이션 종류 (@AspectJ 지원)@Service (=@Component)Bean 등록 (핵심관심과 함께 관리하기 위해 Service)@AspectAspect 표기@Pointcut포인트 컷 지정@After핵심관심 전에 해당 메서드 실행@AfterReturning핵심관심에..

JoinPoint(import org.aspectj.lang.JoinPoint;) 어드바이스 메소드를 의미있게 구현하려면 클라이언트가 호출한 비즈니스 메소드의 정보가 필요하다. 예를들면 예외가 발생했을 때 예외발생한 메소드의 이름이 뭔지 등을 기록할 필요가 있을 수 있고, 해당 정보에 대한 로그를 띄우기 위해 사용할 수도 있다.Signature getSignature()클라이언트가 호출한 메소드의 시그니처(리턴타입, 이름, 매개변수) 정보가 저장된 Signature 객체 리턴Object getTarget()클라이언트가 호출한 비즈니스 메소드를 포함하는 비즈니스 객체 리턴Object[] getArgs()클라이언트가 메소드를 호출할 때 넘겨준 인자 목록을 Object 배열 로 리턴 Signature APIS..

[JSP] Servlet - 필터 Filter[JSP] Servlet - 리스너 Listener리스너 Listener컨테이너에서 발생하는 이벤트를 모니터링하다가 특정 이벤트가 발생하면 실행되는 특수한 서블릿으로, '이벤트 리스너(Event Listener)'라고도 한다. 웹 애minibcake.tistory.com [Spring] 관점 지향 프로그래밍 AOP (xml)AOP 관점 지향 프로그래밍 Aspect Oriented ProgrammingSpring 프레임워크는 IoC와 AOP을 지원하는 경량의 프레임워크이다. 그 중 AOP는 관점 지향 프로그래밍을 의미하며, 횡단 관심사의 분리를 허용해 모듈minibcake.tistory.com AOP를 배우며 Filter에 차이점이 알고 싶어져 찾아보니 int..

AOP 관점 지향 프로그래밍 Aspect Oriented ProgrammingSpring 프레임워크는 IoC와 AOP을 지원하는 경량의 프레임워크이다. 그 중 AOP는 관점 지향 프로그래밍을 의미하며, 횡단 관심사의 분리를 허용해 모듈성을 증가시키는 것이 목적인 프로그래밍 패러다임이다. 객체지향(OOP)의 단점(공통된 부가기능에 대한 코드가 중복, 반복되어 유지보수가 어렵다는 단점)을 해소하기 위해 등장했다. 이처럼 중복되는 횡단 기능을 분리해 모듈화하는 개념이다. 이 횡단 기능을 공통기능, 공통로직, 횡단관심 등이라고 부르기도 하며 종단 기능을 핵심기능, 핵심관심, 비즈니스 메서드, CRUD라고 부른다. 종단 기능은 biz의 common으로 빠지게 되며 Advice라고 한다. 이 Advice는 Ser..

@ResponseBody 응답 본문Spring에서는 경로를 return하면 ViewResolver가 개입해 해당 값을 완성시켜 이동하는 방식을 취하고 있다. 그러나 비동기 통신의 경우 페이지 이동이 없기 때문에 ViewResolver에게 해당 return은 페이지 이동이 아니라 값 전달을 위한 값 반환이라는 사실을 알려줄 필요가 있다. @RequestMapping("요청")public @ResponseBody 리턴타입 메서드명(인자){ return 전달할 데이터;} 그 때 ResponseBody 어노테이션이 사용되며 접근제한자와 리턴타입 사이에 위치한다. 해당 어노테이션이 있는 메서드는 ViewResolver가 개입하지 않는다. 자바 객체를 HTTP 요청의 바디 내용으로 매핑해 전달하며 해당 어노테이션이..

LogbackLogback은 Java에서 가장 많이 사용됐던 로깅 라이브러리인 log4j의 후속 버전으로 log4j의 아키텍처를 기반으로 재작성했으므로 완성도가 높다. 또한 Slf4j를 지원하기 때문에 마음에 들지 않으면 언제든지 다른 로거로 스위칭할 수 있도록 구성되어있다. Logback을 통해 로그를 관리하면 로그 색상 변경, 로그 레벨 설정, 로그 파일 저장 등등 다양한 기능을 사용할 수 있다. log4j대비 장점Logback에 SiftingAppender는 Filter의 기능화 유사하면서 다른 기능을 제공한다. 로그파일을 특정 주제별로 분류 하며, HTTP Session별로 파일을 저장한다거나 사용자별로 별도의 로그파일을 저장 할 수 있는 기능을 제공한다.Logback은 Exception 발생시 ..