Spring 49

학습 // Spring // MVC // 정적리소스

업데이트 :: 2018.08.21 정적리소스기본서블릿과 DispatcherServlet의 공존스프링 MVC 리소스 취급방법캐시제어ResourceResolver & ResoureceTransformer정적리소스mavengradlesrc/main/webappJavaEE를 준수하는 웹 애플리케이션에서 정적리소스http://localhost:8080/context-path/static/css/app.css/src /main /webapp /static /html /css /js 기본서블릿과 DispatcherServlet의 공존서블릿 사양에서 루트 경로(/)에 매핑되는 서블릿을 기본 서블릿기본 서블릿을 통해 웹 애플리케이션의 문서 루트 이하의 파일에 접근 할 수 있음DispatcherServlet을 루트경로에 ..

Spring/MVC 2018.08.21

학습 // Spring // MVC // 공통처리

업데이트 :: 2018.08.21 공통처리서블릿 필터 이용DI 컨테이너에서 관리되는 빈 인젝션스프링에서 제공하는 서블릿 필터HandlerInterceptor@ContollerAdviceHandlerMethodArgumentResolver공통처리컨트롤러 핸들러 메서드 호출 전후에 공통 처리 실행 방법서블릿 필터 이용스프링 MVC(DispatcherServlet) 호출 전후에 공통된 처리javax.servlet.Filter 인터페이스서블릿필터 지원클래스GenericFilterBean서블릿 필터의 초기화 파라미터를 서블릿 필터 클래스의 프로퍼티에 바인드하는 기반 클래스OncePerRequestFilter같은 요청에 대해서 단 한번만 처리가 수행되는 것을 보장하는 기반 클래스GenericFilterBean를 상..

Spring/MVC 2018.08.21

학습 // Spring // MVC // Async

업데이트 :: 2018.08.21 비동기 요청비동기 활성화 설정비동기 처리 구현예외처리비동기 실행에 대한 공통처리비동기 요청비동기 실행이 종료된 후에 HTTP응답을 하는 패턴비동기 실행이 처리되는 중에 HTTP응답을 하는 패턴비동기 실행이 종료된 후에 HTTP응답을 하는 패턴부하가 커서 시간이 많이 걸리는 처리를 애플리케이션 서버가 관리하는 스레드에서 분리된 스레드에서 실행하게 만듬애플리케이션 서버를 더 효율적으로 동작하게 만듬실제로 HTTP응답은 비동기 처리가 완료된 후에 나오기 때문에 클라이언트 측에서 보면 동기 처리를 한 것처럼 보임스프링 MVC가 이와 같은 패턴을 처리하는 방법스프링 MVC의 스레드에서 비동기 처리를 하는 방법컨트롤러의 핸들러 매서드에서 Callable 타입을 반환WebAsyncT..

Spring/MVC 2018.08.21

학습 // Spring // MVC // FileUpload

업데이트 :: 2018.08.21 파일업로드구조파일 업로드 기능설정업로드 데이터 취득파일업로드서블릿 표준 업로드기능Apache Commons FileUpload 업로드기능구조업로드할 파일을 선택하고 업로드를 실행DispatcherServlet은 MultipartResolver 인터페이스의 메서드를 호출해서 멀티파트 요청을 해석MultipartResolver 구현클래스는 멀티파트 요청을 해석하고 업도르 데이터를 담을 MultipartFile 생성DispatcherServlet은 컨트롤러의 처리 메서드를 호출, MultipartFile 객체는 컨트롤러 인수나 폼객체에 바인드컨트롤러는 MultipartFile 객체의 메서드를 통해 업로드된 파일의 내용이나 메타 정보를 가져옴파일 업로드 기능설정파일 업로드 기능..

Spring/MVC 2018.08.21

학습 // Spring // MVC // Session

업데이트 :: 2018.08.21 HTTP 세션세션 속성 (@SessionAttributes)세션 스코프 빈HTTP 세션javax.servlet.http.HttpSession세션에서 데이터를 관리하는 법@SessionAttributes(세션속성) 이용스프링 MVC의 org.springframework.ui.Model에 추가한 객체세션 스코프 이용HTTP 세션에 관리하고 싶은 객체를 DI 컨테이너에 세션 스코프 빈으로 등록HttpSession API 이용HttpSession API( setAttribute, getAttribute, removeAttribute )를 직접 사용세션 속성 (@SessionAttributes)@org.springframework.web.bind.annotation.Session..

Spring/MVC 2018.08.21

학습 // Spring // MVC // 구조

업데이트 :: 2018.08.09 프런트 컨트롤러DispaterServletHandlerHandlerMappingHandlerAdapterViewResolverViewDI 컨테이너와 연계ApplicationContext 구성ApplicationContext LifeCycle프런트 컨트롤러스프링 MVC는 프론트 컨트롤러 패턴(Front Controller)의 아키택처를 채택하고 있음클라이언트 요청을 프런트 컨트롤러라는 컴포넌트가 받아 요청 내용에 따라 수행하는 핸들러를 선택하는 아키택처기능클라이언트의 요청 접수요청 데이터를 자바객체로 변환입력값 검사 (Bean Validation)핸들러 호출뷰 선택클라이언트에 요청 결과 응답예외 처리흐름DispatcherServlet 클래스는 클라이언트의 요청을 받음Con..

Spring/MVC 2018.08.21

학습 // Spring // MVC

업데이트 :: 2018.08.09 스프링 MVC웹 애플리케이션 개발특징MVC 특징스프링 MVCModel : 애플리케이션 상태(데이터)나 비즈니스 로직을 제공View : 모델이 보유한 애플리케이션 상태(데이터)를 참조하고 클라이언트에 반환할 응답데이터를 생성Controller : 요청을 받아 모델과 뷰의 호출을 제어, 요청과 응답의 처리흐름을 제어웹 애플리케이션 개발특징POJO(Plain Old Java Objecct) 구현컨트롤러나 모델등의 클래스는 POJO 형태로 구현특정 프레임워크에 종속적일 필요가 없어 단위테스트에 유리애너테이션을 이용한 정의 정보 설정요청 매핑과 같은 각종 정보를 설정파일이 아닌 애너테이션 방식으로 설정비즈니스 로직과 그 로직을 수행하기 위한 각종 정의정보를 자바 파일안에서 함께 ..

Spring/MVC 2018.08.21

학습 // Spring // REST // Exception

업데이트 :: 2018.08.20 REST API 오류응답스프링 MVC 에외 핸들러예외클래스 추가입력값 검사 예외의 처리REST API 오류응답Json 오류 응답{ "message" : "Not Found", "documentation_url" : "http://developer.github.com/v3" } 오류를 담을 자바빈즈public class ApiError implements Serializable { private static final long serialVersionUID = -8119817744873562082L; private String message; @JsonProperty("documentation_url") private String documentationUrl; } 스프링..

Spring/REST 2018.08.20

학습 // Spring // REST // Resource

업데이트 :: 2018.08.20 Resource 클래스JacksonJackson 활용Resource 클래스리소스 클래스 예제public class BookResource implements Serializable { private static final long serialVersionUID = -9115030674240690591L; // == [주의] Json 필드명 == 자바빈즈 프로퍼티명 == private String bookId; private String name; private List authors; @DateTimeFormat(pattern="yyyy-MM-dd") // ISO 8061 private LocalDate publishedDate; private BookPublisher ..

Spring/REST 2018.08.20