자바 스프링 : AOP , 로그인 시큐리티 정리하기

DongJoo Kwak·2022년 5월 2일
1
post-thumbnail

📈금융 개발 블로그 : https://quantpro.co.kr/

✨스프링 백엔드를 공부하며 AOP / Spring Security 기능을 정리해보고자 한다

📌AOP에 대해 알아보자

🌳 AOP Aspect Oriented Object : 관점지향 프로그램

🛠핵심로직은 아니지만, 공통적으로 실행되야하는 부수적인 기능(횡단관심사)을 모아서
AOP로 구현해놓는다.

🌱 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....

🌱 3가지 Advice weaving 방식

	- 컴파일 로딩시 weaving : AspectJ 사용방식 
	- 클래스 로딩시 weaving : AspectJ 지원 
	- 런타임시 weaving : 프록시 이용

	대상객체(Service)의 인터페이스를 가지고 프록시를 만들어 
	프록시로 대상 객체에 간접 접근하게된다. 
	인테페이스가 없으면 aop적용이 안되니 만들도록하자. 

	client 요청 ---> Controller ----Model Proxy----> Model(Service) Before
				               <--- Model Proxy---        	    After 

🌱라이브러리 추가

	- spring-aop : 스프링 기본 라이브러리에 포함	 
	- aspectj	: 이미 프로젝트 생성하면 들어가있다 
	- aspectweaver 

🌱 PointCut 표현식

	#1. execution() : 표현식 사용하여 적용할 메서드를 패턴으로 명시 
		
		execution(접근지정자 리턴타입 패키지경로포함클래스패턴.메서드이름패턴(파라미터패턴))

		접근지정자 : public에만 aop 적용가능. -> 생략가능 
		리턴타입 : * (모든리턴타입) 
		

		* : 모든
		.. : 0개이상 


		execution(public void set*(..))
		execution(* test.ex01.package.*.*()) 리턴타입은 모든, 해당패키지 안의 모든 클래스의 모든 매개변수없는 메서드 
		execution(* get*(Integer,..))


	#2. within()	: 특정 타입에 속하는 메서드(범위)를 설정 
	#3. bean()	: 스프링에서 제공해주는 명시자, 스프링빈을 지정. 




📌 스프링 시큐리티 (Spring Security)

로그인, 로그아웃, 자동로그인 모두 스프링 시큐리티가 처리해줌

🌳 구조

1) 라이브러리 추가 : 4개
2) 스프링시큐리티 관련 설정 xml 파일 : security-context.xml 

(나의 깃허브 샘플 프로젝트 기준)


🌳 시큐리티가 필요한 URI 설계

* 권한 
(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/
profile
즐거운 개발 공간

0개의 댓글