둘의 공통점 - 이 둘은 무슨 행동을 하기전에 먼저 실행하거나, 실행 후에 추가적인 행동을 할 때 사용된다. - 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법을 제시한다. - 서블릿 단위에서 실행된다 그렇다면 왜 이 두개가 따로 존재하는지에 대한 차이점과 언제의 상황에 사용되는지에 대해 알아보자 1. Filter (필터) 위의 그림에서 알 수 있듯 Dispatcher Servlet 이전에 실행된다. 필터가 동작하도록 지정된 자원의 앞단에서 요청내용을 변경하거나, 여러가지 체크를 수행할 수 있다 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수 있다. 사용 예시 서블릿 필터의 경우 Web.xml에 등록하고 인코딩 변환처리, XSS방어 등의 요청에 대한 ..
1. DispatcherServlet : 애플리케이션으로 들어오는 모든 Reqest를 받는 서블릿 구현체, 주로 웹 서버의 HttpServlet을 상속받아 구현된다. 2. HadlerMapping : DispatcherServlet은 Request url에 따라 어떤 Controller로 처리해야하는지 Controller를 찾아주는 역할 3. HandlerAdapter : HandlerMapping에게서 얻은 정보로 HandlerAdapter 객체를 가져온와 객체의 메소드를 실행한다. 즉 컨트롤러 실행 4. Controller : Reqeust를 처리 후 그 결과를 뷰에 전달할 데이터를 Model 객체에 저장하여 DispatcherServlet에게 View name을 리턴한다. 5. ModelAndVie..
1. 서블릿 탄생 배경 : 예전에 웹 프로그램은 html과 image 등의 정적인 데이터만을 주고 받을 수 있었다. 시간이 지남에 따라 사용자의 요구에 따라 동적 데이터도 주고 받을 수 있어야 했는데 이때 탄생된 것이 CGI 이다. CGI란? : Common Gatewat Interface의 약자로 http 통신 규약을 사용하는 웹서버가 웹애플리케이션과 데이터를 주고받은 처리 규약, 인터페이스므로 여러 언어로 구현이 가능했다. 클라이언트는 웹 서버에게 요청을 보내고 웹 서버는 웹 애플리케이션에게 요청을 전달한다. 웹 애플리케이션에서는 CGI를 구현한 구현체로 동적인 데이터를 처리하여 response하게된다. 단점 모든 요청은 하나의 프로세스로 이루어진다. 이렇게 되면 많은 메모리 소모가 일어나게 된다. ..
프록시 패턴이란? 원래 객체를 감싸고 있는 객체이며 원래 객체와 타입이 동일하다. 프록시 패턴을 쓰는 상황 원래 객체에 접근을 제어하고 싶거나, 부가 기능을 추가하여야 할때 사용된다 public interface ExampleService { void firstEvent(); void secondEvent(); } public class TestService implements ExampleService { @Override public void fristEvent(){ Sytem.out.printl("This is firstEvent"); } @Override public void secondEvent(){ System.out.printn("This is secondEvent"); } } 만약 위의 코..
Exception 처리 방법 1. @ExceptionHandler + @RestControllerAdvice 전역 Exception 처리를 지원한다 ResponseEntity를 사용하여 예외를 처리할 수 있다 같은 메소드에 여러 Exception을 매핑하여 사용이 가능하다 @ControllerAdvice @RestController public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity processValidationError(MethodArgumentNotValidException exception) { BindingResult bindingResul..
1st Debug Rest API 호출 Error Log { "timestamp": "2020-02-18T10:16:18.507+0000", "status": 504, "error": "Gateway Timeout", "message": "com.netflix.zuul.exception.ZuulException: Hystrix Readed time out" } Multipart로 이미지를 받는 api를 테스트중 이러한 오류를 만났다. Data가 커서 응답이 오래걸려 나타난 문제였다 먼저 Zuul에서 라우팅되어 요청이 가는 Display 서비스의 설정파일을 수정하였다 ribbon: ConnectTimeout: 3000 # 클라이언트 서버에 연결되는 제한시간 ReadTimeout: 7000 # 요청에 대한 ..
이전 포스팅에 Zuul 에 대한 정의와 Zuul 서버 구현에 대하여 알아보았다 오늘은 더 나아가 Zuul의 동작 원리와 Zuul에서 제공하는 Filter들의 기능에 대하여 정리하려한다 Zuul 동작 과정 Zuul은 클라이언트 요청의 많은 트래픽과 다양한 형태의 요청으로 인한 이슈를 신속하고 동적으로 해결하기 위해 groovy언어로 작성된 다양한 형태의 Filter를 실행한다. Filter에 기능을 정의하고, 이슈사항 발생시 적절한 Filter을 추가함으로써 이슈사항을 대비할 수 있다 Filter File Manager에서는 일정 주기(정해진 시간) 마다 정해진 directory에서 groovy로 정의된 filter 파일을 가져온다. javax.servlet.http.HttpServlet을 상속받아서 Zu..
1. Cache란 ? 한번 읽은 데이터를 임시로 저장하고 필요에 따라 전송,갱신,삭제하는 기술 2. Cach를 쓰는 이유? 보통 데이터를 서버의 메모리에 저장하게되어 디스크에서 정보를 얻어오는 것보다 훨씬 빠른 I/O 성능을 얻을 수 있다 하지만 서버가 다운되거나 재부팅되는 경우 사라지는 휘발성의 성격을 가지고 있음으로 정보를 임시적으로 보관하고 그 정보에 빠르게 접근하기 위한 용도로 사용된다 서버간 불필요한 트래픽을 줄일 수 있다 웹어플리케이션 서버의 부하를 감소시킬 수 있다 어플리케이션의 빠른 처리성능(조회)를 확보할 수 있다 3. Cache를 상요할 때 주의할 점 캐싱하려는 정보, 캐싱 정보의 유효기간(TTL-Time To Live), 캐싱정보의 갱신시점 무작정 많은 정보를 캐싱하는 것이 좋은 것이..