: Serialize하는 과정에서 제외하고 싶은 경우 선언하는 키워드
: 특정 클래스에 속하는지 확인
# Pair.of
MD5, SHA를 이용한 알고리즘을 사용하려면 해당 클래스를 이용해야한다.
해당 클래스에는 update() 메서드가 있는데 이 메서드를 호출할 때 마다 객체 내에 저장된 digest 값이 계속해서 갱신된다.
최종적으로 digest() 메서드를 호출하면 그 값을 가져올 수 있다.
: 바이트 배열로 해쉬를 반환합니다. 패딩 등의 최종 처리를 행해 해시 계산을 완료.
update()를 실행, 해시 계산 완료 후 해시화된 값을 반환한다.
: 바이트 데이터를 저장하고 읽는 저장소
참고
Runnable 인터페이스는 구현할 메소드가 run() 함수 하나뿐인 인터페이스이다.
runnable은 다른 인터페이스를 구현할 수 있을 뿐만 아니라, 다른 클래스도 상속받을 수 있습니다. 따라서 해당 클래스의 확장성이 중요한 상황이라면 Runnable 인터페이스를 구현하는 것이 더 바람직할 것
참고
J2EE 표준 스펙 기능으로 디스패치 서블릿에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공
필터에서는 기본적으로 스프링과 무관하게 전역적으로 처리하는 작업을 할 수 있다.
인터셉터보다 앞단에서 동작하므로 전역으로 처리해야하는 보안검사(XSS 방어 등)를 하여 올바른 요청이 아닐 경우 차단할 수 있다.
그러면 스프링 컨테이너까지 요청이 전달되지 못하고 차단되므로 안정성을 더욱 높일 수 있다.
또는 이미지나 데이터의 압축이나 문자열 인코딩과 같이 웹 애플리케이션에 전반적으로 사용되는 기능을 구현하기에 적당하다.
Filter는 다음 체인으로 넘기는 ServletRequest/ServletResponse 객체를 조작할 수 있다는 점에서 인터셉터보다 훨씬 강력한 기술이다.
공통된 보안 및 인증/인가 관련 작업
모든 요청에 대한 로깅 또는 감사
이미지/데이터 압축 및 문자열 인코딩
spring과 분리되어야 하는 기능
: 필터 객체를 초기화하고 서비스에 추가하기 위한 메소드
웹 컨테이너가 1회 init 메소드를 호출하여 필터 객체를 초기화하면 이후의 요청들은 doFilter를 통해 처리
: url-pattern에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메소드이다. doFilter의 파라미터로는 FilterChain이 있는데 doFilter 통해 다음 대상으로 요청을 전달하게 된다.
: 필터 객체를 서비스에서 제거하고 사용하는 자원을 반환하기 위한 메소드
웹 컨테이너에 의해 1번 호출되며 이후에는 이제 doFilter에 의해 처리되지 않는다.
spring이 제공하는 기술로 디스패처 서블릿이 컨트롤러를 호출하기 전/후에 요청과 응답을 참조하거나 가공할 수 있는 기능 제공
: preHandle 메서드는 컨트롤러가 호출되기 전에 실행되기 때문에 그렇기 때문에 컨트롤러 이전에 처리해야 하는 전처리 작업이나 요청 정보를 가공하거나 추가하는 경우에 사용할 수 있다.
: 컨트롤러를 호출한 후에 실행된다.
컨트롤러 이후에 처리해야 하는 후처리 작업이 있을 때 사용
: 모든 뷰에서 최종 결과를 생성하는 일을 포함하여 모든 작업이 완료된 후에 실행.
요청 처리 중에 사용한 리소스를 반환할 때 사용하기에 적합하다.
postHandler와 달리 컨트롤러 하위 계층에서 작업을 진행하다가 중간에 예외가 발생하더라도 반드시 호출된다.
참고
네트워크/서버 요청 받은 것을 여러 서버로 부하 분산 시켜주는 것
작업을 나누는 것
1) Scale-up : 서버 자체의 성능을 확장하는 것. 비유하자면 CPU가 i3인 컴퓨터를 i7으로 업그레이드하는 것과 같다.
2) Scale-out : 기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것을 의미한다. CPU가 i3인 컴퓨터를 여러 대 추가 구입해 운영하 것에 비유할 수 있다.
=> 이 경우, 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요하다!!
참고