Java & Spring/Spring MVC

@ModelAttribute public String modelAttributeV1(@ModelAttribute HelloData helloData) { ex) GET요청 username=jay&age=28 -> HelloData객체를 먼저 만들고, username과 age가 HelloData에 있는지 찾은 후에 있으면 이 프로퍼티의 setter를 가지고 파라미터의 값을 입력한다. ex) helloData.setUserName("jay) helloData.setAge(28) -> 그러면 helloData(HelloData타입, 이름 jay,나이 28)라는 이름을 가진 객체를 만들게 되는 것이고, 이 객체는 나중에 템플릿에서 활용할 수 있다. @RequestParam public String request..


현재 실무에서는 이런 방식의 Spring MVC 구조를 이루고 있다. Dispatcher Servlet 이전까지의 FrontController와 같은 역할을 한다고 보면 된다. 클라이언트로부터의 요청을 앞단에서 받고, URI에 Mapping된 Handler를 조회함.(Handler는 쉽게 얘기해서 이전까지의 Controller라고 보면 된다.) Handler Mapping URI를 입력했을 때 실행되는 로직들을 Handler들이 하는데 원래는 Controller라고 불렀지만, 이제는 더 많은 것들을 Adapter 통해서 다룰 수 있기 때문에 Handler로 이름을 변경함. Mapping된 Handler에 맞는 Adapter를 조회해야 됨 Handler Adapter List (조회) Handler를 컨..

• RequestDispatcher & forward() RequestDispatcher는 클라이언트의 HTTP 요청을 forward()메서드를 이용해서 다른 서블릿이나 JSP로 이동할 수 있는 기능이다. 서버 내부에서 다시 호출이 발생한다. • Redirect와 Forward의 차이점 리다이렉트는 실제 클라이언트에 응답이 나갔다가, 클라이언트가 redirect 경로로 다시 요청한다.(총 2번의 HTTP 요청) 따라서 클라이언트가 인지할 수 있고, URL 경로도 실제로 변경된다. 반면에 포워드는 서버 내부에서 일어나는 호출이기 때문에 클라이언트가 전혀 인지할 수 없다.

• V1 기존에는 클라이언트의 요청마다 그에 맞는 컨트롤러를 찾는 방식이었는데, 공통적인 처리 등은 하나의 컨트롤러에서 처리를 하자라는 취지로 Front-Controller가 도입이 되었고, Controller 인터페이스 생성 후 Controller를 구현하여 사용한다. Front-Controller는 이 인터페이스 구현한 클래스들을 호출해서 로직의 일관성을 가져갈 수 있다. • V2 아래의 중복된 코드를 줄이고자 MyView라는 객체를 만듦. 이 MyView객체에서 render()라는 메소드를 통해 위의 중복되는 코드를 반환할 수 있게끔 하였다. 즉, ControllerV2의 process()는 MyView객체를 반환하게 되고 역할이 종료된다. String viewPath = "/WEB-INF/vie..

• MVC 패턴 서블릿이 하나거나, JSP 하나만 가지고 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 된다면, 코드도 길어지고 유지보수가 어려워진다. 그리고 변경의 라이프사이클이 다른 기능들끼리 모여있는 경우 유지보수하기 힘듦. 마지막으로 JSP같은 뷰 템플릿은 뷰 렌더링 하는 것에 최적화가 되어 있기 때문에 그 역할에만 충실히 할 수 있도록 분리하는 게 좋다. 그래서 비즈니스 로직과 그 외의 것들을 분리시키고자 MVC 패턴이 등장함 ! Model, View, Controller 3가지로 역할과 기능을 분리를 시켜 각자의 일에 집중할 수 있도록 되었다. • Model 뷰에 출력할 데이터를 담아두는 곳 *모델은 HttpServletRequest 객체를 사용한다. request는 내부에 데이터 저장소를 가지..

• Servlet 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고,그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행하면 된다. 하지만 이 과정은 매우 번거롭다. 스프링 부트는 톰캣 서버를 내장하고 있으므로, 톰캣 서버 설치 없이 편리하게 서블릿 코드를 실행할 수 있다. 서블릿은 Java를 이용하여 웹 페이지를 동적으로 생성하는 서버 측 프로그램이다. 웹 브라우저에서 요청을 받으면 서블릿 내부의 코드(기능)를 수행한다. 서블릿마다 역할을 지정해놓고 사용함. • Servlet Container 스프링 부트가 내장 톰캣 서버를 생성하고 이 서버가 Servlet을 생성한다. 서블릿 컨테이너는 구현되어 있는 Servlet 클래스의 규칙에 맞게 서블릿 객체를 생성, 초기화, 호출 종료하는..