[Spring] Filter?

조오닭·2022년 4월 7일
0

Concept of Spring Boot

목록 보기
2/3

5. Spring은 무수히 많은 Filter를 가지고 있다.

Filter : 권한 체크, 인증을 하는 검문소.

내가 본 강의에서는 아래와 같이 표현하였다.

💡 A라고 불리는 나라와 그 나라의 성이 있다고 가정하자.
A 나라의 성에는 내부와 외부에 문지기가 각각 존재한다.
외부 검문에서는 그 나라의 백성인지 판별을 하고, 내부에는 왕의 집이 있기 때문에 지정된 소수의 사람만 출입할 수 있다.

이 때 A 나라의 성을 Tomcat이라 부르며, 왕의 집을 Spring Container, 문지기는 Filter를 의미한다.
그리고 외부의 filter은 그대로 filter라고 불리우며 web.xml이 관리하고 내부의 filter은 Interceptor(AOP?)라고 부른다.

대충 무슨 얘기인지 알겠죠?^^*

추가적으로 Filter, Interceptor 그리고 AOP에 대해 구글링해보았다.

  • 사실 Filter는 Spring이 아닌 Java Servlet이 지원하는 것이라고 한다...?
  • 요청 시 Filter→Interceptor→AOP→Interceptor→Filter으로 진행된다!
    그리고 Interceptor와 AOP는 스프링 영역이다.

1) Filter(좁은 의미의 filter)

  • 요청과 응답을 거르는 역할
  • Dispatcher Servlet(앞단에서 HTTP 프로토콜로 들어오는 요청들을 먼저 받고 적절한 컨트롤러에 위임해주는 컨트롤러) 전후에 실행이 된다.
    (그림 참고)
  • 주로 web.xml에 등록되어 인코딩 변환, XSS 방어의 요청을 처리한다.

2) Interceptor

  • Dispatcher Servlet에서 컨트롤러를 호출하기 전 그리고 컨트롤러가 호출되고 난 후, 요청/응답을 참조 및 가공하는 기능을 제공한다!
  • 스프링에서 모든 빈 객체에 접근할 수 있다.
  • 여러 개를 사용할 수 있다.
  • 로그인, 권한체크, 로그확인 등을 처리한다.

3) AOP(Aspect Oriented Programming)

  • OOP를 보완하기 위해 나온 개념.
    • OOP : Object Oriented Programming, 즉 객체지향 프로그래밍.
    • 객체지향은 각 객체(Class 만질 때 그 객체가 맞다.)를 형성하여
      타 Class에서 상속, 위임을 통해 재사용하였다.
      → 코드 양 줄어듦
    • 하지만 여전히 상속, 위임은 불편하고 번거롭다. 또한 각 객체들의 공통적인 속성들을 다루기 어렵다.
  • 따라서 객체로 보는 것이 아닌 객체의 속성들로 보는 것!
  • 사용자의 권한체크, 인증, 예외처리 등을 한 번에 관리할 수 있다.
    OOP라면 객체의 설정을 각각 설정해야겠지...? 상상만 해도 극혐임.

6. Spring은 많은 Annotation을 가지고 있다.

Annotation?

  • 주석 기능 + 컴파일러에게 주는 힌트!
  • 기존의 주석 (ex. //, #, /* */ )은 컴파일러가 무시해서 아무 내용이나 기입해도 되었지만... Annotation은 컴파일러가 무시하지 않는다!
  • Java, Kotlin의 대표적 Annotation : @Override, @Deprecated
  • Spring에서의 Annotation : @[Annotation명]
    • 객체 생성이 가능하다.
    • Reflection을 이용하여 Annotation의 적용 여부 및 element 값을 읽고 처리할 수 있다.
      • Reflection : 런타임 중 Class 내에서 함수, annotation 등을 분석
    • @Component : Class를 Bean(메모리)에 등록하렴!
    • @Autowired : 코딩된 객체를 해당 변수에 집어 넣으렴! (Singleton)
      • IoC의 개념과 연결되는 부분이다.
    • 그 외에도 @Bean, @Controller, @Service, @Required 등이 존재!
profile
백엔드 응애

0개의 댓글