과거 서블릿 형태부터 현재 spring MVC 까지 어떤 필요에 의해 어떤 과정을 거쳐왔는지 확인해보자사전 준비 :java 11IDE : IntelliJhttps://start.spring.io프로젝트 선택Project : Gradle-GroovyLanguag
spring boot 환경에서 서블릿 등록하고 사용해 보자🤞 참고 ) servlet은 tomcat 같은 web application server(was)를 직접 설치하고, 그 위에 servlet 코드를 클래스 파일로 빌드해서 올린다음, tomcat server를 실행
🤞 참고)HTTP 응답에서 Content-Length는 Web Application server가 자동으로 생성해준다.
개발할 내용을 편리하게 참고할 수 있는 welcom page 만들기webapp 경로에 index.html을 두면 http://localhost:8080 호출 시 index.html이 열림경로: main/webapp/index.html경로 : main/webap
HTTP 요청 메세지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편하다.Servlet은 개발자가 HTTP 요청 메세지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메세지를 파싱한다.그리고 그 결과를 HttpServletRequest 객체에 담아서 제
주로 다음 3가지 방법을 사용GET - 쿼리 파라미터/url?username=hello&age=20메세지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달ex) 검색, 필터 , 페이징 등에서 많이 사용POST - HTML Formcontent-type: ap
HTTP 응답 코드 지정헤더 생성바디 생성Content-Type, 쿠키, Redirect경로) hello.servlet.basic.response.ResponseHeaderServletHTTP 응답 메세지는 주로 다음 내용을 담아서 전달한다.단순 텍스트 응답앞에서 살펴
이름 : username나이 : age회원 저장회원 목록 조회경로 ) hello.servlet.domain.member;id는 Member를 회원 저장소에 저장하면 회원 저장소가 할당 한다.경로 ) hello.servlet.domain.memeber;회원 저장소는 si
경로 ) hello.servlet.web.servletMemberFormServlet은 단순하게 회원 정보를 입력할 수 있는 HTML Form을 만들어 응답한다.자바 코드로 HTML을 제공해야 하므로 쉽지 않은 작업이다.실행 : http://localhost:
servlet과 자바 코드만으로 HTML을 만들면 매우 복잡하고 비효율적이다자바코드로 HTML을 만들어 내는것 보다 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣을 수 있다면 더 편리할 것이다.템플릿 엔진을 사용하면 HTML 문서에서 필요한 곳만 코드를
너무 많은 역할하나의 Servlet이나 JSP만으로 비즈니스 로직과 뷰 렌더링까지 모두 처리하게 되면, 너무 많은 역할을 하게 되고, 결과적으로 유지보수가 어려워 진다.비즈니스 로직을 호출하는 부분에 변경이 발생해도 해당 코드를 손대야 하고, UI를 변경할 일이 있어도
서블릿을 컨트롤러로 사용하고, JSP를 뷰로 사용해서 MVC Pattern 적용하기Model은 HttpServletRequest 객체를 사용한다.request는 내부에 데이터 저장소를 가지고 있는데, request.setAttribute(), request.getAtt
프론트 컨트롤러 서블릿 하나로 클라이언트 요청을 받음프론트 컨트롤러가 요청에 맞는 컴트롤러를 찾아서 호출입구를 하나로!공통 처리 가능프론트 컴트롤러를 제외한 나머지 컨트롤러는 서블릿을 사용하지 않아도 됨스프링 웹 MVC의 핵심도 바로 FrontController스프링
모든 컨트롤러에서 뷰로 이동하는 부분에 중복이 있고, 깔끔하지 않다.이 부분을 깔끔하게 분리하기 위해 별도로 뷰를 처리하는 객체를 만들어 보자뷰 객체는 이후 다른 버전도 사용하므로 패키지 위치를 frontcontroller에 두었다.경로 : hello.servlet.w
서블릿 종속성 제거 컨트롤러 입장에서는 HttpServletRequest, HttpServletResponse 꼭 필요?요청 파라미터 정보는 자바의 Map으로 대신 넘기도록 하면 지금 구조에서는 컨트롤러가 서블릿 기술을 몰라도 동작할 수 있다.그리고 Request 객체
앞서 만든 v3 컨트롤러는 서블릿 종속성을 제거하고 뷰 경로의 중복을 제거하는 등, 잘설계된 컨트롤러이다. 그런데 실제 컨트롤러 인터페이스를 구현하는 개발자 입장에서 보면, 항상 Model/View 객체를 생성하고 반환해야 하는 부분이 조금은 번거롭다.좋은 프레임워크는
만약 어떤 개발자가 ControllerV3방식으로 개발하고 싶고, 어떤 개발자는 ControllerV4방식으로 개발하고 싶다면 어떻게 해야 할까?지금까지 우리가 개발한 프론트 컨트롤러는 한가지 방식의 컨트롤러 인터페이스만 사용할 수 있다.ControllerV3,Cont
FrontContollerServletV5에 ControllerV4기능도 추가해보자.핸들러 매핑(handlerMappingMap)에 ControllerV4를 사용하는 컨트롤러를 추가하고, 해당 컨트롤러를 처리할 수 있는 어댑터인 ContollerV4HandlerAdap
FrontController -> DispatcherServlethandlerMappingMap -> HandlerMappingMyHandlerAdapter -> HandlerAdapterModelView -> ModelAndViewviewResolver -> View
스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작해서, 매우 유연하고 실용적이다.과거에는 자바 언어에 애노테이션이 없기도 했고, 스프링도 처음부터 이런 유연한 컨트롤러를 제공한 것은 아니다.스프링 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 만들었는데 이것
@RequestMapping을 잘 보면 클래스 단위가 아니라 메서드 단위에 적용된 것을 확인할 수 있다.따라서 컨트롤러 클래스를 유연하게 하나로 통합할 수 있다.경로 : hello.servlet1.web.springmvc.v2컨트롤러 클래스를 통합하는 것을 넘어서 조합
http://start.spring.io프로젝트 선택Project : Gradle ProjectLanguage : JavaSpring Boot : 2.7.7Project MetadataGroup : helloArtifact : springmvcName : sp
프로젝트 생성 http://start.spring.io
운영 시스템에서는 System.out.println()같은 시스템 콘솔을 사용해서 필요한 정보를 출력하지 않고, 별도의 로깅 라이브러리를 사용해서 로그를 출력한다.참고로 로그 관련 라이브러리도 많고, 깊에 들어가면 끝이 없음으로 최소한의 사용 방법만 알아본다.스프링 부
MappingContoller 경로 : hello.springmvc.basic.requestmappig @RequestMapping("/hello-basic") -hello-bsic URL 호출이 오면 이 메서드가 실행 되도록 Mapping한다. 대부분의 속성을 배
애노테이션 기반의 스프링 컨트롤러는 다양한 파라미터를 지원경로 : hello.springmvc.basic.requestHttpServletRequestHttpServletResponseHttpMethod : HTTP Method를 조회 org.springframewor
HTTP 요청 메세지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법을 알아보자Client에서 Server로 요청 데이터를 전달할 때는 주로 3가지 방법을 사용한다GET - QueryParameter/url?username=hello&age=20메세지 바디 없이,
실제 개발을 하면 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어 주어야 한다.보통은 아래 코드 처럼 작성할 것이다스프링은 이 과정을 완전히 자동화해주는 @ModelAttribute기능을 제공한다.먼저 요청 파라미터를 바인딩 받을 객체를 만들자경로 :
HTTP API에서 주로 사용하는 JSON 데이터 형식을 조회해보자기존 서블릿에서 사용했던 방식과 비슷하게 시작경로 : hello.springmvc.basic.requestHttpServletRequest를 사용해서 직접 HTTP 메세지 바디에서 데이터를 읽어와서, 문
spring(server)에서 응답 데이터를 만드는 방법은 크게 3가지정적 리스트ex) 웹 브라우저에 정적인 HTML,css,js를 제공할 때는, 정적 리소스를 사용뷰 템플릿 사용ex) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.HTTP 메세지
HTTP API를 제공하느 경우에는 HTML이 아니라 데이터를 전달해야 하므로, HTTP 메세지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.🤞참고 )HTML이나 뷰 템플릿을 사용해도 HTTP 응답 메세지 바디에 HTML 데이터가 담겨서 전달된다.여기서 설명하
뷰 템플릿으로 HTML을 생성해서 응답하는것이 아니라, HTTP API처럼 JSON 데이터를 HTTP 메세지 바디에 직접 읽거나 쓰는 경우 HTTP 메세지 컨버터를 사용하면 편리하다.@ResponseBody를 사용HTTP의 BODY에 문자 내용을 직접 반환viewRes