본문 바로가기
Spring Boot

스프링부트+JPA - 2편 ( Filter , Annotation )

by SICDev 2021. 4. 14.
반응형

 

스프링은 엄청나게 많은 필터(🚿....?)를 가지고 있다

A나라🏳‍🌈와 B나라🏁가 있다고 가정을 해보자!! 근데... A나라와 B나라가 전쟁 중이다!!!
근데 자꾸만 B나라의 첩자 놈들이 A나라의 성을 침입하는 것이다!! 그.래.서 입구에서 문지기가 A나라의 사람이면 안으로 들여보내주고!⭕ B나라의 사람이면 꺼져!!🚫하고 내보내게 하였다.
이 문지기가 하는 검열의 역할이 바로 필터(Filter)이다..!

 

스프링 자체가 기본적으로 가지고 있는 여러 필터의 기능이 있다.

  • 이것들은 우리는 그냥 사용해도 되고!
  • 그 많은 필터들 중에 사용되고 있지 않은 필터를 사용하겠다고 설정할 수도 있고!
  • 직접 필터를 생성해서 사용할 수도 있다!!

 

톰켓가지고 있는 필터는 말그대로 필터(Filter)라고 불린다.
이 필터(Filter)의 기능을하는 파일이 있는데 그게 바로바로 web.xml 이다!

스프링컨테이너도 필터를 가지고 있는데, 이 스프링컨테이너가 가지고 있는 필터는 인터셉터라고 불린다!
이 인터셉터는 바로 AOP(Aspect Oriented Programming)이다. AOP에 관해서는 나중에 더 자세히 알아보자!!


스프링은 엄청나게 많은 어노테이션을 가지고 있다. (리플렉션, 컴파일체킹)

컴파일체킹??? -> 컴파일체킹을 이해하기 위해서는 어노테이션을 알아야한다...!

어노테이션이란???

  • 어노테이션은 주석이다!
    우리가 자바에서 //주석은 이렇게 달아요 이런식으로 주석을 단다. 이렇게 주석을 달아놓으면 컴파일러가 무시한다!
    하지만 어노테이션은 컴파일러가 뭔가를 체킹할수 있도록 힌트를 주는 주석이다! 그래서 컴파일러가 무시하지 않는다!

스프링은 이 어노테이션을 통해 주로 객체생성을한다!!  예를들어 두개의 어노테이션이 있다!

  • @Component -> 클래스를 Heap메모리에 로딩해!
  • @Autowired -> Heap메모리에 로딩된 객체를 해당 변수에 접어 넣어!! 라는 약속을 하고 있다면...

@Component
Class A {
}
-> @Component라고 어노테이션이 붙어있으면, 스프링이 이 A라는 클래스를 스캔해서(읽어서) Heap메모리 공간에 A라는 클래스를 로드시킨다! ( IoC -> 스프링이 객체를 관리한다! 제어의 역전!! )


Class B {
   @Autowired
   
   A a;
}
-> 스프링이 B라는 클래스를 스캔할때 B클래스 내부에 어떠한 것들이 있는지 분석하는 기법이 리플렉션이다.
리플렉션을 통해 해당 클래스안에 어떤 메서드, 필드, 어노테이션 등등이 있는지 체킹할수 있다.

-> @Autowired라고 어노테이션이 붙어있으면, 스프링은 IoC를 통해 Heap메모리 공간에 로드시킨 객체들을 모두 스캔하여 A라는 타입을 가진 객체가 있다면 해당 객체를 주입시킨다! ( DI -> 의존성 주입!! )



어노테이션 : 주석 + 힌트 ( 주석이지만 컴파일러가 무시하지 않아요! )
리플렉션 : 어떤 클래스가 어떤 필드, 어떤 메서드, 어떤 어노테이션, 어떤 것들이 있는지 분석하는 기법이다. 
              언제 분석하냐?!?! 바로 런타임시에 분석한다!

 

 

 

 

 

 

 

 

 

 

 

출처

https://www.youtube.com/watch?v=XBG6CUtVCIg&list=PL93mKxaRDidG_OIfRQ4nztPQ13y74lCYg
반응형