HTTP 서버와의 통신방법 URLConnection jdk 1.2 부터 내장되어 있으며, java.net 패키지에 있다. URL의 내용을 읽어오거나, URL 주소에 GET, POST로 데이터를 전달 할 때 사용한다. 또한 http 프로토콜 이외에도 가능하다.(file 등) 주요 메소드 new URL("http:// ....") openConnection() URLConnection getInputStream, getOutputStream InputStream, OutputStream 처리 1. 응답코드가 4xx, 5xx 이면 IOException이 터진다 2. 타임아웃을 설정할 수 없다 3. 쿠키 제어가 불가하다 HttpClient 4.x부터는 Apache HttpComponents 로 불린다. mave..
둘의 공통점 - 이 둘은 무슨 행동을 하기전에 먼저 실행하거나, 실행 후에 추가적인 행동을 할 때 사용된다. - 공통업무를 프로그램 흐름의 앞, 중간, 뒤에 추가하여 자동으로 처리할 수 있는 방법을 제시한다. - 서블릿 단위에서 실행된다 그렇다면 왜 이 두개가 따로 존재하는지에 대한 차이점과 언제의 상황에 사용되는지에 대해 알아보자 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..
1. Cache란 ? 한번 읽은 데이터를 임시로 저장하고 필요에 따라 전송,갱신,삭제하는 기술 2. Cach를 쓰는 이유? 보통 데이터를 서버의 메모리에 저장하게되어 디스크에서 정보를 얻어오는 것보다 훨씬 빠른 I/O 성능을 얻을 수 있다 하지만 서버가 다운되거나 재부팅되는 경우 사라지는 휘발성의 성격을 가지고 있음으로 정보를 임시적으로 보관하고 그 정보에 빠르게 접근하기 위한 용도로 사용된다 서버간 불필요한 트래픽을 줄일 수 있다 웹어플리케이션 서버의 부하를 감소시킬 수 있다 어플리케이션의 빠른 처리성능(조회)를 확보할 수 있다 3. Cache를 상요할 때 주의할 점 캐싱하려는 정보, 캐싱 정보의 유효기간(TTL-Time To Live), 캐싱정보의 갱신시점 무작정 많은 정보를 캐싱하는 것이 좋은 것이..
스프링에서 제공하는 폼 로그인을 사용하는 경우 1. 로그인 2 UsernamePasswordAuthenticationFilter 에서 UserDetailService를 사용한 인증 후 Authentication 객체를 SpringSecurityHolder에 저장 3. 순차적으로 필터를 거친 후 마지막 필터인 FilterSecurityInterceptor에서 권한 인가 여부 결정 후 리다이렉트 하지만 JWT를 사용하는 경우 JWT를 가져와 인증하는 필터를 커스터마이징 하여야 한다 1. 로그인 2. JwtAuthenticationFilter에서 토큰 추출 & 토큰 유효성 검사 & UserDetailService를 사용한 인증 후 Authentication 객체를 SpringSecurityHolder에 저장 ..