728x90

MVC 11

Spring(스프링) - 스프링MVC 구조이해

스프링 MVC 전체 구조 DispatcherServlet 프론트 컨트롤러 패턴으로 구현 스프링 MVC의 핵심 HttpServlet을 상속 서블릿으로 등록하면서 모든 경로에 대해서 매핑 urlPatterns=”/” 요청 흐름 서블릿이 호출되면 HttpServlet이 제공하는 service() 메서드 호출 스프링MVC는 DispatcherServlet의 부모인 FrameworkServlet에서 service() 메서드를 오버라이드 해 둠 FrameworkServlet.service()를 시작으로 여러 메서드가 호출되면서 DispatcherServlet.doDispatch()가 호출 됨 동작 순서 핸들러 조회 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회 핸들러 어댑터 조회 핸들러를 실행할 수 있는 ..

모델1 구조와 모델2 구조/커맨드핸들러/MVC패턴

모델 1 모델1 구조는 하나의 페이지에서 입력과 출력을 동시에 구현하고 있습니다. 유지보수와 가독성 문제가 발생하는 구조입니다. 모델2 모델2 구조는 입력 부분은 JAVA로 구현되는 Servlet객체로 처리하고 출력은 JSP로 구현하는 구조입니다. 커맨드핸들러 커맨드핸들러는 요청경로에 해당하는 요청의 내용을 처리하는 객체입니다. 요청마다 서블릿을 두는 방식은 web.xml에 일일이 다 등록을 해주어야 하고 파일이 커지는 문제점이 발생합니다. 그러므로 요청을 받아들이는 서블릿을 두고 요청의 각 세부 내용에 대해 별도의 처리를 할 수 있는 방식으로 작성합니다. 서블릿객체는 요청에 대해 요청의 세부 내용을 판별하고 분류하는 작업을 수행하고 실제 요청 수행은 커맨드 핸들러 객체를 호출하여 수행하도록 합니다. 이..

학습(구)/JSP 2020.12.13

서블릿,필터,리스너

서블릿 서블릿은 웹을 통해 클라이언트와의 입출력을 수행하는 자바객체입니다. 서블릿은 클래스로부터 객체생성, 요청 처리를 위한 URL 매핑, 초기화설정은 톰캣 컨테이너가 수행하기 때문에 서블릿 관련 설정은 web.xml을 사용하여 설정을 합니다. 서블릿 클래스는 HttpServlet 클래스를 상속받아 doGet, doPost, init 메소드를 재정의하여 구현합니다. doGet은 GET 요청 방식을 처리하고 doPost는 POST요청방식을 처리하며 init 메소드는 서블릿 객체가 처음 생성될 때 수행되는 초기화 메소드 입니다. 서블릿 객체 생성과 요청 경로 매핑 서블릿 클래스의 객체생성과 요청 경로 매핑은 web.xml을 이용하거나 어노테이션을 사용하여 설정할 수 있는데 어노테이션은 변경시 일일이 다 바꾸..

학습(구)/JSP 2020.12.12

JSON 응답과 요청 처리

API사용시 HTML 뿐만 아니라 JSON이나 XML을 사용하여 응답하는 경우도 있습니다. JSON(JavaScript Object Notation) JSON은 간단한 형식을 갖는 문자열로 데이터 교환에 주로 사용합니다. {"이름":"값"}의 형태로 객체를 표현합니다. 배열은 ["값", "값"]으로 ","로 구분한 값 목록으로 표현합니다. Jackson Jackson은 자바객체와 JSON 형식 간 변환을 처리하는 라이브러리입니다. Jackson을 사용하기 위해선 pom.xml에 Jackson을 의존 설정 해주어야 합니다. Jackson은 프로퍼티의 이름과 값을 JSON객체의 (이름,값)으로 사용합니다. 프로퍼티 타입이 배열이나 List이거나 배열인 경우 JSON배열로 변환됩니다. @RestControll..

간단한 웹 어플리케이션 구조

간단한 어플리케이션 구성요소 Dispatcher Servlet -> 컨트롤러 -> 서비스 -> DAO 프론트 서블릿(Dispatcher Servlet) 요청 경로를 분석하여 알맞은 컨트롤러에 전달 합니다. 컨트롤러 + 뷰(JSP) - 컨트롤러 : 클라이언트가 요구한 기능을 실행하고 응답결과를 생성하는데 필요한 모델생성과 응답결과를 생성할 뷰를 선택합니다. - 뷰 : 응답 결과 생성 및 클라언트에게 전달합니다. 서비스 실질적인 기능의 로직을 구현합니다. DAO DB관련 데이터 CRUD를 수행합니다. 서비스의 구현 콘솔,윈도우,웹 등 상관없이 서비스는 동일한 로직을 수행합니다. 서비스 메소드는 트랜잭션 단위로 수행되며 실행도중 실패할 경우 롤백하고 모두 성공해야 커밋됩니다. ex) 비밀번호 변경 - 비밀번호..

날짜 값 변환, @PathVariable, 익셉션 처리

날짜 값 변환 가입일자를 기준으로 select하는 회원 검색 기능은 DB관련 MemberDao에서 selectByRegdate()메소드를 작성합니다. from,to를 매개변수로 받아 해당 날짜 사이의 데이터를 select하고 결과로 나온 ResultSet을 RowMapper를 이용해 객체로 만들어 List를 반환합니다. from과 to 파라미터는 커맨드 객체를 이용하여 표현합니다. 파라미터는 모두 String 타입이지만 기본 타입의 변환은 핸들러 어댑터에서 수행시켜주므로 해당 필드에 @DateTimeFormat 어노테이션을 사용하여 pattern을 지정하면 핸들러 어댑터가 자동으로 지정한 패턴에 따라 LocalDateTime으로 변경시켜줍니다. 커맨드 객체 생성은 WebDataBinder가 수행하고 요청..

세션, 인터셉터, 쿠키를 사용한 로그인 구현

세션 : 사용자와 연결 지속 인터셉터 : 가로채기 쿠키 : http프로토콜 요청에 대해 응답이 일회성이 므로 이를 연결 시켜줌 사용자 인증을 위해 로그인을 합니다. 이 로그인을 지속시키기 위해 세션과 쿠키를 이용하고 인터셉터를 통해 로그인이 되어있지 않으면 연결 시켜주지 않고 로그인 되어져있으면 해당 요청을 수행합니다. 이때 로그인 유지는 세션을 통해 구현하고 쿠키를 이용해 확인할 수 있습니다. 로그인 수행 먼저 로그인 요청을 수행할 컨트롤러를 작성합니다. 이때 Get일 경우 로그인 폼페이지를 보여주고 Post일 경우 로그인 성공 페이지를 보여줍니다. Post방식의 처리 메소드에는 커맨드 객체와 Error객체를 사용하여 Validator 검증을 수행하여 발생한 에러에 대해서 Error객체에 넣습니다. 에..

객체의 분류

입력 객체 - 필터 객체 : 요청 데이터를 필터링하여 데이터를 변경하거나 수행 흐름을 변경하는 객체 - 서블릿 객체 : 클라이언트의 모든 요청을 받아 들여 요청 경로에 따라 분류하여 커맨드 핸들러 객체를 구동시키고 커맨드 핸들러가 반환한 JSP 뷰 페이지를 연결하는 객체 - 커맨드 핸들러 객체 : 요청 경로에 해당하는 요청의 내용을 처리하는 객체 서비스 객체 - 업무 처리 객체 - 커맨드 핸들러에서 모두 수행하지 않고 서비스 객체로 넘겨 수행 시킴 DAO 객체 - DB서버와 연동하는 객체 데이터 객체 - 커맨드 객체 : 요청 파라미터를 객체화 한것 - 모델 객체 : 응답 문서를 생성하는 JSP 페이지에서 사용할 내용을 담은 각채 - VO 객체 : 매개변수로 사용되는 자바Bean 객체 매핑 객체 - DAO..

학습(구)/JSP 2020.11.19

Spring - MVC

스프링 MVC 설정 파일 설정이므로 @Configuration과 mvc설정인 @EnableWebMvc를 설정합니다. WebMvcConfigurer를 구현하는 클래스로 정의합니다. 이때 여러 디폴트 메소드들이 구현되어져 있으며 필요한 메소드만 재정의하여 사용합니다. 기본적으로 configureDefaultServletHandling메소드와 ConfigureViewResolvers메소드를 구현합니다. 전자는 매핑경로가 '/'일때 html/css 등을 처리해주기 위해 디폴트 서블릿을 설정하고 후자는 컨트롤러의 실행 결과를 보여주기 위해 뷰 리졸버에 관련된 설정을 해줍니다. web.xml WAS안에서 dispatcher가 생성될 때 같이 스프링 컨테이너도 생성이 됩니다. 이때 스프링 컨테이너 생성시 필요한 정보..

Spring - DI(의존주입)

의존이란 클래스 내부에서 다른 클래스의 메소드를 사용하는 것으로 클래스의 변화에 영향을 받는 관계를 말합니다. 의존 객체의 직접 생성하는 경우는 클래스 내부에서 의존 객체를 new 연산자를 사용하여 직접 생성하여 사용하는 방식을 말합니다. 의존 객체를 직접 생성하는 경우 다형성이 불가하여 유지보수 측면에서 문제가 생깁니다. 의존 주입, 즉 DI의 경우에는 생성자나 setter메서드를 통해 객체를 받아오는 방식을 말합니다. 의존 주입은 의존 클래스를 변경할 때 사용됩니다. 예를 들어 A라는 클래스를 상속 받는 B클래스를 사용해야 할 때 직접생성의 경우 클래스 내부에서 new 연산자를 통해 객체 생성하는 부분을 모두 바꿔 주어야 합니다. 그러나 의존 주입을 통해 생성자나 setter 메서드를 사용할 경우 클..