Programming-[Backend] (394) 썸네일형 리스트형 [스프링 웹MVC] 8. 프론트 컨트롤러(Front Controller) - 2. 컨트롤러 개선, MVC 패턴 요약 1. ControllerV4 ControllerV4에서는 controller에서 ModelView 객체를 FrontController에 반환해야만 했던 부분을 개선한다. 대신 로직을 처리한 객체를 model로 넘기고, viewName은 단순 String으로 반환하게 된다. ControllerV4 다른 Controller들과 똑같이 process 메서드를 작성하되, paramMap외에 두 번째 파라미터로 model 객체를 전달받는다. 이 부분은 FrontController에서 각 Controller들의 process 메서드를 호출할 때, Controller에서 FrontController로 전달할 로직을 처리한 객체를 담을 수 있도록 미리 빈 사물함(?)을 정의해놓는 것이라고 이해하면 된다. 1 2 3 p.. [스프링 웹MVC] 7. 프론트 컨트롤러(Front Controller) - 1. 컨트롤러 수정 1. 프론트 컨트롤러의 개념 이제 Controller의 공통적인 부분을 담당하는 Front Controller를 만들어본다. 여기서부터 Controller를 발전시켜나가다보면, 결국 스프링 MVC 프레임워크에 다다르게 된다. 기존에는 각 클라이언트가 필요한 정보에 따라 각 Controller에 요청하는 구조였지만, Front Controller로 Controller 간 공통적인 부분이 통합되어 모든 요청들이 Front Controller를 거치고 나서, 각 Controller 부분으로 전달되는 구조가 된다. 2. 프론트 컨트롤러 작성해보기(V1) 작성할 파일들의 구조는 다음과 같다. 각 페이지에 해당하는 컨트롤러인 MemberFormControllerV1, MemberListControllerV1, Me.. [TIL] 1:N 관계 DB를 SQL 문으로 합계로 조회하기 po라는 테이블과 pol 이라는 테이블이 1:N의 관계를 갖고 있다고 가정하자. 합계 구하기 다음과 같이 조회한다면 3개의 행 값(id = 1, 2, 3)인 값이 조회될 것이다. SELECT * FROM po po.id별로 조회되는 것을 확인할 수 있다. LEFT JOIN을 하면, 6개의 행 값이 조회된다. SELECT * FROM po LEFT JOIN pol on po.id = pol.po_id 갯수가 더 많은 pol 기준으로 조회되고, 이에 따라 po.id가 중복된 값들을 확인할 수 있다. 이렇게 LEFT JOIN이 된 상황에서, po.id의 갯수를 구함과 동시에 pol.id의 갯수 합계를 구하고자 하면 어떻게 해야할까? 예를 들어 위 그림에서 총 13개 행 중에 po.id가 중복되지 않는 갯수는 .. [스프링 웹MVC] 6. MVC 패턴 적용 1. MVC 패턴 개념 MVC 패턴을 적용한다. 서블릿이나 JSP로 작성하던 방식들은 HTML 코드와 자바 코드가 혼재되어 유지보수에 좋지 않은 단점이 있었다. 이 통합된 코드를 컨트롤러(Controller)와 뷰(View)로 분리하는 것이 MVC 패턴의 개념이다. 또 다른 요소인 Model 까지의 기본 개념은 다음과 같다. Controller : HTTP 요청을 받고, 비즈니스 로직을 실행하는 부분이다. 비즈니스 로직을 호출해서 처리 결과를 Model에 담고, View 로직을 실행한다. 비즈니스 로직은 Service에 있다. Controller에서는 Service 객체를 호출하는 것이다. 그리고 Service 에서 Database에 접근하는게 일반적이다. View : Model에 담긴 데이터를 참고하여.. [스프링 웹MVC] 5. 서블릿, JSP 로 회원관리 웹앱 만들기 회원관리 웹 애플리케이션을 만든다. 서블릿, JSP 순서대로 만들어가면서 어떤 점이 개선되어야 하는지, 그리고 개선점이 어떻게 반영되어 현재의 Spring MVC에 도달하였는지 이해해보자. 앞서 HttpServletRequest, HttpServletResponse 객체에 대해 이해했다면, 코드는 길지만 쉬운, 실습 목적의 내용이다. 1. 회원관리 객체 생성 Member 클래스를 만든다. id, username, age를 필드로 갖는다. Member 클래스 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 package hello.servlet.domain.member; import lombok.. [스프링 웹MVC] 4. HTTP 응답 정보 : 서블릿 - HttpServletResponse HttpServletResponse는 서버에서 클라이언트로 전달하고자 하는 응답 메시지를 작성하기 위한 기능들을 제공하는 객체이다. 기본적으로 HTTP 응답코드 지정, 헤더, 바디 생성 기능을 해준다. 또한 편의기능으로 Content-Type 지정, 쿠키 지정, Redirect 기능을 제공한다. 1. 헤더에 정보 담기 헤더 헤더에 정보를 담을 수 있다. .setStatus(), .setHeader() 등을 사용해보자. 응답 결과는 브라우저의 Network 탭에서 확인할 수도 있지만, postman으로 편하게 조회해볼 수도 있다. HttpServletResponse.SC_OK와 같이 의미를 바로 전달할 수 있는 상수 타입을 사용할 수 있는 것을 확인하자. 그리고 .setHeader()뿐 아니라 setCon.. [스프링 웹MVC] 3. HTTP 요청 정보 : 서블릿 - HttpServletRequest 서블릿이 제공하는 요청에 대한 정보를 담고 있는 HttpServletRequest 객체에 대해서 더 자세히 알아보자. 1. Header 정보 Header Start Line 정보 HttpServletRequest에서는 아래와 같은 다양한 메서드를 제공한다. 브라우저에서 localhost:8080/request-header?username=charlie 로 접속하여 결과를 출력해보자. 그리고 출력 함수를 [Ctrl + Alt + m] 단축키로 printStartLine이라는 메서드로 뽑아내자. RequestHeaderServlet 파일 일부 - printStartLine 메서드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @WebServlet(.. [스프링 웹MVC] 2. 프로젝트 생성과 웹서블릿 기본 개념 1. 프로젝트 세팅 프로젝트 생성을 위해 스프링부트 initializer 사이트(start.spring.io)로 이동하여 다음과 같이 프로젝트를 GENERATE한다. IntelliJ에서 초기 세팅은 이전 작성글과 같이 해주면된다. https://whitepro.tistory.com/298 다만 여기서는 lombok을 기본으로 전제로 프로그램을 작성할 것이기 때문에, 사진과 같이 환경설정에서 AnnotationProcessor를 enabled로 변경해주도록 한다. 혹시라도 lombok 관련 오류가 발생한다면, Settings > Plugins > Lombok이 설치되어 있는지 확인한다. 2. 프로젝트 생성 쓰레드를 실행하는 ServletApplication(main method가 있는 파일)에서 @Serv.. 이전 1 ··· 39 40 41 42 43 44 45 ··· 50 다음