Spring/MVC 10

학습 // Spring // MVC // Test

업데이트 :: 2018.08.22 스프링 MVC 테스트MockMvcMockMvc 란MockMvc 설정테스트 실행요청 데이터 설정실행 결과 검증실행 결과 출력스프링 MVC 테스트스프링 MVC 컨트롤러의 테스트컨트롤러의 주요역할은 다양컨트롤러의 주요역할요청 경로처리내용의 매핑입력값 검사요청한 데이터의 취득비즈니스 로직 호출다음 이동 화면의 제어정작 컨트롤러 자체에는 단위 테스트가 필요할 만한 비즈니스 로직이 존재하지 않음스프링 MVC의 프레임워크 기능까지 통합된 상태인 통합 테스트의 관점으로 봐야함통합한 상태에서 컨트롤러 테스트E2E(End to End)로 테스트뷰가 생성한 응답 데이터(HTML)의 유효성을 검증할 수 있다는 장점단점애플리케이션이나 데이터베이스를 반드시 기동트랜잭션이 커밋되기 떄문에 테스트를..

Spring/MVC 2018.08.22

학습 // Spring // MVC // Locale

업데이트 :: 2018.08.21 Locale 결정Locale 활용UI를 이용한 Locale 전환LocaleChangeInterceptor 빈정의Locale 전환용 화면요소Locale 결정org.springframework.web.servlet.LocaleResolver 인터페이스스프링 MVC는 Locale정보를 어디서 가져오느냐에 따라 다른 구현 클래스르 가짐구현클래스AcceptHeaderLocaleResolverHTTP 요청의 Accept-Language 헤더에 설정된 Locale 정보를 활용Locale을 변경하고 싶다면 사용자가 브라우저의 언어 설정을 바꾸 수 있음SessionLocaleResolverHTTP 세션에 저장된 Locale 정보를 활용Locale 변경은 LocaleChangeInterc..

Spring/MVC 2018.08.21

학습 // 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