Servlet Filter와 Spring Interceptor의 차이는 무엇인가요?
Servlet Filter
Servlet Filter는 디스패처 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다!
이 그림에서 처럼 필터는 스프링의 범위 밖에서 처리가 되는 것임!!
그니까 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 되는 것임! (스프링 빈으로 등록은 됨)
필터를 추가하기 위해서는 javax.servlet의 Filter 인터페이스를 구현해야 함
init(), doFilter(), destroy() 메서드가 존재함
쓰이는 용도
- 공통된 보안 및 인증/인가 관련 작업
- 모든 요청에 대한 로깅 또는 감사
- 이미지/데이터 압축 및 문자열 인코딩 (웹 애플리케이션에 전반적으로 사용되는 기능)
- Spring과 분리되어야 하는 기능
Spring Interceptor
Spring Interceptor는 필터와 달리 Spring이 제공하는 기술로써, 디스패처 서블릿이 컨트롤러를 호출하기 전과 후에 요청과 응답을 참조하거나 가공할 수 있는 기능을 제공한다.
필터와 다르게 스프링 컨텍스트 안에서 동작하는 것을 그림을 통해 알 수 있음
preHandle(), postHandle(), afterCompletion() 메서드가 존재함
쓰이는 용도
- 세부적인 보안 및 인증/인가 공통 작업 (클라이언트의 요청과 관련되어 전역적으로 처리해야 하는 작업)
- APU 호출에 대한 로깅 또는 감사
- Controller로 넘겨주는 정보(데이터)의 가공
Spring에서 CORS 에러를 해결하기 위한 방법을 설명해주세요
CORS는 Cross-Origin Resource Sharing임.
브라우저에서 다른 출처의 리소스를 공유하는 방법에서의 정책을 위반할 때 발생함
참고
https://velog.io/@jiseok/Spring-CORS-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0
Access-Control-Allow-Origin 헤더를 포함한 응답을 브라우저에게 보내는 방식으로 CORS에러를 해결할 수 있다.
Spring에서는 위에서 설명한 javax.servlet의 Filter를 이용하거나, CrossOrigin 어노테이션을 사용하거나(@CrossOrigin), WebMvcConfigurer를 main 함수에서 Bean으로 추가해주면 된다!
Bean/Component 어노테이션이란? 둘의 차이점은?
@Bean
개발자가 직접 제어가 불가능한 외부 라이브러리 또는 이미 정의되어 있는 객체들이 서로 종속성을 가지고 있을 경우의 빈 등록에 사용하는 어노테이션이다. 반환 값이 바로 Bean으로 등록되는 것이다. 이미 정의된 기본 객체를 재정의하거나 내가 만든 객체의 종속성을 위해 빈을 등록할 때 사용한다. 이거 붙이면 빈으로 등록하겠다는 뜻!
즉, 메소드 단위에서 개발자가 외부 라이브러리 및 개발자가 정의하지 않은 객체를 유연하게 넘기기 위해 사용하는 어노테이션이다.
@Component
개발자가 직접 정의한 객체 클래스 자체를 빈 등록할 때 사용하는 어노테이션이다.
POJO란 무엇인가요? Spring Framework에서 POJO는 무엇이 될 수 있을까요?
POJO(Plain Old Java Object, 게터와 세터같은 기본적인 기능만 가지고 있는 Java 객체)
객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트......? 라고 하는데 그러니까 객체 지향의 장점을 살리기 위한 ! 우리가 객체 지향적인 설계를 하기 위해 지향해야하는 객체 ! 라고 보면 될듯???
POJO는 특정 규약에 종속되지 않고(자바 언어와 꼭 필요한 API 외에는 종속되지 않아야 함), 특정 환경에 종속되지 않으며(특정 서버나 프레임 워크에서만 동작 가능하면 POJO가 아님) 객체 지향적 원리(책임과 역할이 각기 다른 코드를 한 클래스에 몰아 넣거나 상속과 다형성이 깨지면 POJO가 아님)에 충실해야 한다!!
스프링에서는 도메인과 비즈니스 로직을 수행하는 대상(Service)이 POJO가 될 수 있음