JAVA

스프링부트 공통기능 처리(Filter,Interceptor,AOP)

스프링부트 공통기능 처리(Filter,Interceptor,AOP)

프로그램의 공통기능

프로그램을 개발하다보면 공통적으로 처리해야할 기능들이 많다. 예를 들어 로그인 관련 처리, 권한체크, 보안, pc와 모바일웹의 분기처리, 페이지 인코딩 변환 등이 있다. 이러한 공통적인 코드는 모든 트렌젝션마다 관리하는 것 보다 트렌젝션이 이루어지기 전에 미리 필터링하면 서버의 부하를 줄일 수 있으며 중복된 코드를 제거할 수 있다.

필터링의 종류

JSP Filter

디스패쳐 서블릿이 실행되기 전에 프로그램 전반적으로 거는 필터링하는 역활을 한다. 일반적으로 web.xml에 등록하며 인코딩처리를 이곳에서 한다.

Interceptor

AOP를 기반으로 만든 구현체로 주소를 필터링하는 역활을 한다. JSP Filter와 달리 디스패쳐 서블릿이 실행된 후에 처리한다. 디스패쳐 서블릿이 실행된 후 컨트롤러에 있는 함수의 주소를 각각 파싱한다. 주로 로그인 체크, 권한체크를 이곳에서 한다.

프록시(proxy)

인터셉터의 함수 실행의 전(Pre handle)과 후(Post handle)를 관리한다.

AOP

AOP(Aspect Oriented Programming)의 개념적인 의미는 관점 지향 프로그래밍으로 객체를 추상화하여 모듈화하는 것이다. 예를 들어 요리사, 점원, 손님이라는 객체를 사람이라는 객체로 추상화한다. 이는 공통된 기능을 재사용할 수 있게 만들어 프로그램을 광범위하게 활용할 수 있다.

스프링에서는 AOP를 하나의 기능으로 제공해주는데 이는 모든 것의 전후 관리 할 수 있도록 만들어준다. 예를 들어 주소, 메서드, 매개변수, 퍼블릭, 패키직 등의 전후 공통적인 모든 부분을 필터링할 수 있다. 주소만 필터링할 수 있는 Interceptor와는 달리 보다 광범위한 처리가 가능하다.

리플렉션(reflection)

리플렉션은 반영하다, 비추다라는 의미로 클래스를 분석해서 커스텀하게 실행하게 만들어준다. 실행시에 클래스의 함수를 보고 파싱을 하는데 이는 AOP에서 전후 관리에서 사용되는 기능이다.

시큐리티라는 필터 + 인터셉터 + AOP 위 세 가지 기능을 모두 포함하고 있는 라이브러리입니다.

OAuth Service

오프너스(OAuth : Open Auth) 서비스란 국가, 카카오, 네이버, 구글, 페이스북 등의 규모가 큰 단체에서 개인의 정보를 모아 인증과 권한을 관리하는 서비스다. 이 서비스는 개인정보를 한 곳에서 관리함으로서 사이트마다 개인정보를 입력할 필요없이 접근할 수 있다는 장점이 있다. 오프너스 서비스를 도입하게 되면 자원(개인정보)을 기준으로 이해관계가 생성되기 때문에 기존의 개념과는 완전히 달라진다.

리소스 서버(Resource Server)

국가, Kakao, Facebook, Naver 등 자원(Resource)을 관리하고 있는 서버

리소스 오너(Resource Owner)

자원(Resource)의 주체가 되는 소유자.

클라이언트(Client)

리소스 서버에 접근하여 자원을 가져가는 대상.

OAuth Service의 흐름
OAuth
  1. 사전에 클라이언트가 앱등록을 거쳐 클라이언트 아이디(CI, Client ID)와 패스워드(CS, Client Security)를 소유한다.
  2. 리소스 오너가 클라이언트에게 로그인 페이지를 요청한다.
  3. 클라이언트가 리소스 오너에게 로그인 페이지를 응답한다.
  4. 리소스 오너가 로그인 페이지에서 카카오 로그인을 요청한다. 리소스 서버에서 카카오 로그인 버튼에 내장되어 있는 CI로 클라이언트 인증을 요청(GET)한다. (리다이렉션될 주소도 내장)
  5. 리소스 서버가 CI로 클라이언트 인증을 마치면 리소스 오너에게 카카오 로그인 페이지를 응답한다.
  6. 리소스 오너가 카카오 로그인을 요청(POST)을 하면 리소스 서버의 데이터베이스(resource)에서 인증을 한다.
  7. 인증되면 리소스 서버가 클라이언트에게 응답을 한다. (리다이렉션)

즉, 오픈어스는 리소스 오너의 카카오정보를 클라이언트가 대신 접근할 수 있게 하는 서비스를 말한다.

 

최신글