스프링 프레임 워크의 3대 핵심 개념
1. DI ( Dependency Injection )
필요한 핵심 의존 객체를 주입 받아서 사용하는 구조
2. IOC ( Invesion Of Controll ) 제어의 역전
객체의 생성과 조립(DI 등등) 관리를 스프링이 실행될때 알아서 동작하는 구조
3. AOP ( Aspect Oriented Programming ) 관점 지향 프로그래밍
핵심 비지니스 로직과는 상관없는 횡단관심사를 따로 작성해 놓고 원하는 위치에 따로 작성된 로직을 설정해서 적용시키는 구조이다.
주로 로그 기록이나, 테스트, 인증(auth) 등의 작업을 할때 사용한다.
예를 들어 다수의 메소드에 핵심 비지니스 로직과는 상관없는 작업을 할때 해당 작업을 따로 만들어 놓고 특정 메소드의 설정 만으로 적용시킬 수 있다. 즉 따로 작성하기 때문에 유지, 보수가 편리하다.
Aspect 가 적용되는 조건
1. aspectj expression 이 적용될 메소드에 부합되야 한다
2. aspect 객체는 spring bean 컨테이너에서 관리되야 한다
3. 적용할 메소드를 가지고 있는 객체도 spring bean 컨테이너에서 관리되는 객체여야 한다.
필터와 aspect 의 차이
필터는 클라이언트의 요청이 서블릿 혹은 jsp 페이지에 도달하기 전에 요청경로를 확인해서 동작
apect는 스프링 프레임워크가 동작하는 도중에 특정 pattern의 메소드가 호출될때 동작
스프링 프레임워크가 동작하는 도중 -> xxx.do 요청을해서 DispatcherSevlet을 거친 이후 -> controller or service or dao 의 메소드 중 어디에든 적용시킬 수 있다.
Aspectj Expression
1. execution(* *(..))
=> 접근 가능한 모든 메소드가 point cut
2. execution(* test.service.*.*(..))
=> test.service 패키지의 모든 메소드 point cut
3. execution(void insert*(..))
=>리턴 type 은 void 이고 메소드명이 insert 로 시작하는 모든 메소드가 point cut
4. execution(* delete*(*))
=> 메소드 명이 delete 로 시작하고 인자로 1개 전달받는 메소드가 point cut (aop 가 적용되는 위치)
5. execution(* delete*(*,*))
=> 메소드 명이 delete 로 시작하고 인자로 2개 전달받는 메소드가 point cut (aop 가 적용되는 위치)
6. execution(String update*(Integer,*))
=> 메소드 명이 update 로 시작하고 리턴 type 은 String 메소드의 첫번째 인자는 Integer type, 두번째 인자는 아무 type 다되는 메소드가 point cut (aop 가 적용되는 위치)
스프링에서 트랜잭션
비지니스에서 쪼개질 수 없는 하나의 단위 작업을 트랜잭션이라고 한다.
트랜잭션은 4가지 특성을 가지며 이를 ACID 원칙으로 부르기도 한다.
1. 원자성 (Atomicity)
하나의 트랜잭션은 하나의 단위로 일괄 처리 되어야 한다. 부분 실행이 불가능하다.
2. 일관성 (Consistency)
트랜잭션이 성공했다면 데이터베이스의 모든 데이터는 일관성을 유지해야 한다.
3. 독립성 (Isolation)
트랜잭션으로 처리되는 동안 외부의 간섭은 없어야 한다.
4. 지속성 (Durability)
트랜잭션이 성공적으로 처리되면 그 결과는 지속적으로 보관되어야 한다.
AOP 용어 정리
애스펙트(Aspect)
Advice + PointCut = Aspect
애스펙트는 부가기능을 정의한 코드인 어드바이스(Advice)와 어드바이스를 어디에 적용하지를 결정하는 포인트컷(PointCut)을 합친 개념이다.
AOP 개념을 적용하면 핵심기능 코드 사이에 침투된 부가기능을 독립적인 애스펙트로 구분해 낼수 있다.
구분된 부가기능 애스펙트를 런타임 시에 필요한 위치에 동적으로 참여하게 할 수 있다.
타겟(Target)
핵심 기능을 담고 있는 모듈로 타겟은 부가기능을 부여할 대상이 된다.
어드바이스(Advice)
어드바이스는 타겟에 제공할 부가기능을 담고 있는 모듈이다.
조인포인트(Join Point)
어드바이스가 적용될 수 있는 위치를 말한다.
타겟 객체가 구현한 인터페이스의 모든 메서드는 조인 포인트가 된다.
포인트 컷(Pointcut)
어드바이스를 적용할 타겟의 메서드를 선별하는 정규표현식이다.
포인트컷 표현식은 execution으로 시작하고 메서드의 Signature를 비교하는 방법을 주로 이용한다.
애스펙트(Aspect)
애스펙트는 AOP의 기본 모듈이다.
애스펙트 = 어드바이스 + 포인트컷
애스펙트는 싱글톤 형태의 객체로 존재한다.
어드바이저(Advisor)
어드바이저 = 어드바이스 + 포인트컷
어드바이저는 Spring AOP에서만 사용되는 특별한 용어이다.
위빙(Weaving)
위빙은 포인트컷에 의해서 결정된 타겟의 조인 포인트에 부가기능(어드바이스)를 삽입하는 과정을 뜻한다.
위빙은 AOP가 핵심기능(타겟)의 코드에 영향을 주지 않으면서 필요한 부가기능(어드바이스)를 추가할 수 있도록
해주는 핵심적인 처리과정이다.
'spring > spring' 카테고리의 다른 글
| Step03_MyBatis (aspect) (0) | 2022.09.02 |
|---|---|
| Step03_MyBatis (typeAliases) (0) | 2022.09.02 |
| Step03_MyBatis ( @service ) (0) | 2022.09.01 |
| Step03_MyBatis (ModelAndView, redirect) (0) | 2022.09.01 |
| Step03_todo list 만들기 (0) | 2022.08.31 |