✨스프링 백엔드를 공부하며 AOP / Spring Security 기능을 정리해보고자 한다
🛠핵심로직은 아니지만, 공통적으로 실행되야하는 부수적인 기능(횡단관심사)을 모아서
AOP로 구현해놓는다.
- Target : 순수 비지니스 로직, 실행되어야할 핵심 기능. 객체
- Proxy : 핵심기능의 실행은 다른객체에 위임하고, 부가적인 기능을 제공하는 객체를 proxy는 내부적으로 target을 호출하지만, 중간에 필요한 관심사들을 거쳐서 target을 호출하도록 자동 혹은 수동으로 작성된다.
- JoinPoint : Target객체가 가진 메서드. 특정 작업이 실행되는 시점.
- PointCut : 관심사와 비지니스 로직이 결합되는 지점을 결정하는 것. JointPoint의 부분집합. 실제상황, 발생하는 상황
- Aspect : 관심사 자체를 추상적으로 말함
- Advice : 실제 공통기능을 분리시켜놓은 코드 (*)
JointPoint에 삽입되어져 동작하는 코드.
-Before Advice : 핵심기능이 실행되기 전에
After Returning Advice : 핵심기능 정상적으로 실행완료된 후 실행
After Throwing Advice : 핵심기능 실행시 예외 발생했을때 실행
After Advice : 핵심기능 실행 후
Around Advice : 핵심 기능 전/후 둘다 적용.
* 어노테이션으로 제공 : @Before,@After....
- 컴파일 로딩시 weaving : AspectJ 사용방식
- 클래스 로딩시 weaving : AspectJ 지원
- 런타임시 weaving : 프록시 이용
대상객체(Service)의 인터페이스를 가지고 프록시를 만들어
프록시로 대상 객체에 간접 접근하게된다.
인테페이스가 없으면 aop적용이 안되니 만들도록하자.
client 요청 ---> Controller ----Model Proxy----> Model(Service) Before
<--- Model Proxy--- After
- spring-aop : 스프링 기본 라이브러리에 포함
- aspectj : 이미 프로젝트 생성하면 들어가있다
- aspectweaver
#1. execution() : 표현식 사용하여 적용할 메서드를 패턴으로 명시
execution(접근지정자 리턴타입 패키지경로포함클래스패턴.메서드이름패턴(파라미터패턴))
접근지정자 : public에만 aop 적용가능. -> 생략가능
리턴타입 : * (모든리턴타입)
* : 모든
.. : 0개이상
execution(public void set*(..))
execution(* test.ex01.package.*.*()) 리턴타입은 모든, 해당패키지 안의 모든 클래스의 모든 매개변수없는 메서드
execution(* get*(Integer,..))
#2. within() : 특정 타입에 속하는 메서드(범위)를 설정
#3. bean() : 스프링에서 제공해주는 명시자, 스프링빈을 지정.
로그인, 로그아웃, 자동로그인 모두 스프링 시큐리티가 처리해줌
1) 라이브러리 추가 : 4개
2) 스프링시큐리티 관련 설정 xml 파일 : security-context.xml
(나의 깃허브 샘플 프로젝트 기준)
* 권한
(ROLE_GUEST : 비회원
ROLE_USER : 사용자)
ROLE_MEMBER : 회원
ROLE_ADMIN : 관리자
* URI
/common/main : 로/비로그인 둘다 가능
/common/signup : 비로그인
/common/login : 비로그인
/member/mypage : 로그인
/member/modify
### 📈금융 개발 블로그 : https://quantpro.co.kr/
### 📈금융 개발 블로그 : https://quantpro.co.kr/