본문 바로가기

Spring/Spring MVC

(14)
[Spring MVC] MVC 구조4-2 - HTTP 메시지 컨버터 📌 학습 목차1. HttpMessageConverter 구조 및 동작 방식2. HttpMessageConverter 동작 예시1. HttpMessageConverter 구조 및 동작 방식1) HttpMessageConverter 구조•ArgumentResolver와 ReturnValueHandler는 다음 경우에   HTTP 메시지 컨버터(HttpMessageConverter)를 사용해 HTTP 요청 및 응답 메시지 바디의 데이터를 처리함   (1) HTTP 요청 시 @RequestBody 또는 HttpEntity(RequestEntity)를 사용할 경우   (2) HTTP 응답 시 @ResponseBody 또는 HttpEntity(ResponseEntity)를 사용할 경우 •스프링 부트는 기본 Htt..
[Spring MVC] MVC 구조4-1 - 요청 매핑 핸들러 어댑터 📌 학습 목차1. RequestMappingHandlerAdapter2-1. ArgumentResolver 구조 및 동작 방식2-2. ReturnValueHandler 구조 및 동작 방식3. ArgumentResolver & ReturnValueHandler 동작 예시1. RequestMappingHandlerAdapter•애노테이션 기반 컨트롤러(핸들러)를 처리하는 요청 매핑 핸들러 어댑터(RequestMappingHandlerAdapter)는   ArgumentResolver와 ReturnValueHandler를 사용해 HTTP 요청 및 응답 데이터를 처리함   이때 HTTP 요청 및 응답 메시지 바디의 데이터를 처리할 때 사용되는 HTTP 메시지 컨버터(HttpMessageConverter)는  ..
[Spring MVC] HTTP 응답 - 정적 리소스 / 뷰 템플릿 / HTTP API 📌 학습 목차1. HTTP 응답2-1. 정적 리소스2-2. 뷰 템플릿2-3. HTTP API1. HTTP 응답•서버에서 HTTP 응답 데이터를 만드는 경우는 다음 3가지로 구분됨   (1) 정적 리소스(HTML, CSS 등)를 제공하는 경우   (2) 템플릿 엔진으로 뷰 템플릿을 렌더링해 동적 HTML을 제공하는 경우     (3) HTTP API를 통해 HTTP 응답 메시지 바디에 데이터를 담아 제공하는 경우2-1. 정적 리소스•스프링 부트는 클래스 패스의 시작 경로(src/main/resources) 내   /static , /public , /resources ,/META-INF/resources 디렉토리에 있는 정적 리소스를 제공함   예시) 웹 브라우저에서 http://localhost:808..
[Spring MVC] HTTP 요청 메시지 - Text / JSON 📌 학습 목차1. HTTP 요청 메시지2-1. Text2-2. JSON1. HTTP 요청 메시지•HTTP 요청 메시지 바디에 데이터를 직접 담아 클라이언트에서 서버로 전달하는 방식은   주로 HTTP API에서 JSON 형식으로 POST, PUT, PATCH와 같은 HTTP 메서드와 함께 사용됨   이때 서블릿과 스프링으로 요청 메시지 바디의 데이터를 조회하는 방법을 단계적으로 학습하고자 함 •요청 파라미터를 조회할 때 @RequestParam 또는 @ModelAttribute가 생략된 경우, 스프링은 다음 규칙을 적용함   (1) 메서드 파라미터 타입이 단순 타입(int, Integer, String 등)일 경우, @RequestParam이 생략된 것으로 간주함   (2) 메서드 파라미터 타입이 단순..
[Spring MVC] HTTP 요청 파라미터 - 쿼리 파라미터 / HTML Form 📌 학습 목차1. HTTP 요청 파라미터2-1. @RequestParam2-2. @ModelAttribute1. HTTP 요청 파라미터•HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방식은 다음 3가지로 구분됨   (1) GET 쿼리 파라미터: URL의 쿼리 파라미터에 데이터를 담아 전달하는 방식   (2) POST HTML Form: 메시지 바디에 쿼리 파라미터 형식의 데이터를 담아 전달하는 방식   (3) 메시지 바디에 데이터를 직접 담아 전달하는 방식•서버 입장에서 GET 쿼리 파라미터 방식과 POST HTML Form 방식으로 전달되는 데이터 형식이 동일함   이때 두 방식으로 전달되는 데이터를 조회하는 것을 요청 파라미터(request parameter) 조회라고 함2-1..
[Spring MVC] MVC 구조3 - 애노테이션 기반 스프링 MVC 컨트롤러 사용 📌 학습 목차1. 스프링 MVC 시작(V1)2-1. 리펙터링1(V2)2-2. 리펙터링2(V3)1. 스프링 MVC 시작(V1)•스프링은 @RequestMapping 애노테이션을 기반으로 동작하는 매우 유연하고 실용적인 컨트롤러를 제공함•@RequestMapping 애노테이션 기반 컨트롤러를 지원하는 핸들러 매핑과 핸들러 어댑터는   RequestMappingHandlerMapping과 RequestMappingHandlerAdapter에 해당함   1) @Controller 사용•@Controller 애노테이션은 코드 내부에 @Component 애노테이션을 포함함   이에 @Controller을 사용한 클래스는 스프링의 컴포넌트 스캔 대상이 되어 스프링 빈으로 자동 등록됨•@Controller을 사용한 ..
[Spring MVC] MVC 구조2 - 핸들러 매핑 & 핸들러 어댑터 / 뷰 리졸버 📌 학습 목차1-1. 핸들러 매핑 & 핸들러 어댑터1-2. Controller1-3. HttpRequestHandler2. 뷰 리졸버1-1. 핸들러 매핑 & 핸들러 어댑터•핸들러(컨트롤러)가 호출되기 위해선 핸들러를 찾을 수 있는 핸들러 매핑과 해당 핸들러를 실행할 수 있는 핸들러 어댑터가 필요함•스프링 부트는 기본 핸들러 매핑과 핸들러 어댑터를 우선순위에 따라 자동 등록함   핸들러 매핑: RequestMappingHandlerMapping / BeanNameUrlHandlerMapping 등   핸들러 어댑터: RequestMappingHandlerAdapter / HttpRequestHandlerAdapter / SimpleControllerHandlerAdapter 등•애노테이션 기반 컨트롤러를..
[Spring MVC] MVC 구조1 - 디스패처 서블릿 / doDispatch() 동작 흐름 📌 학습 목차1. 스프링 MVC 구조2. 디스패처 서블릿 구조1. 스프링 MVC 구조•직접 구현한 MVC 프레임워크의 구조와 서블릿을 기반으로 동작하는 MVC 프레임워크인 스프링 MVC의 구조가 동일함   이때 스프링 MVC의 핵심인 DispatcherServlet이 프론트 컨트롤러 패턴으로 구현됨을 알 수 있음•스프링 MVC의 강점은 DispatcherServlet의 코드 변경 없이 주요 인터페이스를 구현해 원하는 기능으로 변경하거나 확장할 수 있음   org.springframework.web.servlet.HandlerMapping, HandlerAdapter, ViewResolver, View 1) 직접 구현한 MVC 프레임워크 구조  2) 스프링 MVC 구조 2. 디스패처 서블릿 구조1) 서블..
[Spring MVC] MVC 프레임워크 만들기3 - 핸들러 어댑터 도입 & 추가(V5) 📌 학습 목차1. 핸들러 어댑터 도입(V5-1)2. 핸들러 어댑터 추가(V5-2)1. 핸들러 어댑터 도입(V5-1)•V4까지 개발한 프론트 컨트롤러는 한 가지 방식의 컨트롤러 인터페이스만 사용할 수 있음   이에 호환되지 않는 인터페이스들을 연결하기 위해 어댑터 패턴(adapter pattern)을 적용하여   프론트 컨트롤러가 특정 인터페이스에 종속되지 않고 다양한 종류의 컨트롤러를 호출할 수 있도록 변경함•어댑터를 사용할 경우, 컨트롤러뿐만 아니라 어떠한 것이라도 해당 종류를 지원하는 어댑터만 있으면 처리할 수 있음   이에 기존 컨트롤러의 이름을 더 넓은 범위의 핸들러로 변경함  1-1) MyHandlerAdapter•핸들러를 실행할 수 있는지 여부를 확인하는 supports()와    실제 핸들..
[Spring MVC] MVC 프레임워크 만들기2 - 모델 추가(V3) & 리펙터링(V4) 📌 학습 목차1. 모델 추가(V3)2. 리펙터링(V4)1. 모델 추가(V3)1) 서블릿 종속성 제거•V2의 경우, 각 컨트롤러에서 HttpServletRequest 또는 HttpServletResponse 객체를 사용하지 않음   이에 HttpServletRequest가 제공하는 HTTP 요청 파라미터를 담는 Map과 뷰 렌더링에 필요한 데이터를 담는 Map을 사용해   각 컨트롤러가 서블릿 기술 없이도 동작할 수 있도록 변경함 2) 뷰 경로 중복 제거•V2의 경우, 각 컨트롤러에서 지정하는 뷰의 경로에 prefix(/WEB-INF/views/)와 suffix(.jsp)가 중복됨   이에 각 컨트롤러는 뷰의 논리 이름만을 반환하고, 실제 물리 위치의 이름은 프론트 컨트롤러에서 일괄 처리하도록 변경함  ..
[Spring MVC] MVC 프레임워크 만들기1 - 프론트 컨트롤러 도입(V1) / 뷰 분리(V2) 📌 학습 목차1-1. 프론트 컨트롤러 패턴1-2. 프론트 컨트롤러 도입(V1)2. 뷰 분리(V2)1-1. 프론트 컨트롤러 패턴•프론트 컨트롤러(FrontController) 패턴은 프론트 컨트롤러 역할을 담당하는 하나의 서블릿이    클라이언트의 모든 요청을 받아 공통 기능을 처리하고 요청에 맞는 컨트롤러를 조회해 호출하는 방식으로 동작함•서블릿 기반 MVC 프레임워크인 스프링 MVC의 DispatcherServlet 또한 프론트 컨트롤러 패턴으로 구현됨 1-2. 프론트 컨트롤러 도입(V1)•프론트 컨트롤러 역할을 담당하는 서블릿은 클라이언트의 모든 요청을 받아 매핑 정보에서 요청에 맞는 컨트롤러를 조회해 호출함•각 컨트롤러는 비즈니스 로직을 실행한 후, 뷰 렌더링을 위해 뷰에 제어권을 전달함  1-1..
[Spring MVC] 서블릿 & JSP의 한계 / MVC 패턴의 적용 및 한계 📌 학습 목차1. 서블릿 & JSP의 한계2-1. MVC 패턴의 적용12-2. MVC 패턴의 적용22-3. MVC 패턴의 한계1. 서블릿 & JSP의 한계1) 서블릿의 한계•서블릿을 사용해 회원 정보에 따라 화면이 동적으로 변경되는 HTML을 생성함   단, Java 코드에서 HTML을 생성해야 함에 따라 코드의 가독성과 유지보수성이 매우 떨어짐 @WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save")public class MemberSaveServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInst..
[Spring MVC] 서블릿 & 서블릿 컨테이너 / 서블릿 컨테이너의 동작 흐름 📌 학습 목차1-1. 서블릿 & 서블릿 컨테이너1-2. 멀티 쓰레드 지원2. 서블릿 컨테이너의 동작 흐름1-1. 서블릿 & 서블릿 컨테이너1) 서블릿(servlet)•초기 웹 서버는 클라이언트의 요청에 정적 리소스만을 제공했으나,   이후 클라이언트의 요청에 따라 동적으로 처리된 컨텐츠를 제공할 수 있는 웹 애플리케이션 기술이 필요하게 됨   이 과정에서 CGI(Common Gateway Interface) 스크립트의 단점을 보완한 Java EE(Jakarta EE) 표준의 일부인 서블릿 기술이 등장함•서블릿은 jakarta.servlet 패키지를 기반으로 서버 측에서 실행되는 Java 클래스로,   주로 jakarta.servlet.http.HttpServlet 클래스를 상속받아 HTTP를 통해 클라..
[Spring MVC] 웹 서버 & 웹 애플리케이션 서버(WAS) / 웹 시스템 구성 📌 학습 목차1. 웹 서버 & 웹 애플리케이션 서버2. 웹 시스템 구성1. 웹 서버 & 웹 애플리케이션 서버1) 웹 서버(Web Server)•HTTP를 기반으로 정적 리소스(정적 HTML, CSS, JS, 이미지, 영상 등)를 제공하는 서버를 의미함 예시) Nginx, Apache 2) 웹 애플리케이션 서버(Web Application Server, WAS) •HTTP를 기반으로 프로그램 코드를 실행해 애플리케이션 로직을 처리하여 동적 리소스(동적 HTML, HTTP API 등)를 제공할 수 있는 서버•대부분의 WAS는 정적 리소스를 제공하는 웹 서버의 기능을 포함함에 따라 웹 서버의 역할을 겸함•서블릿, JSP, 스프링 MVC 등은 WAS를 기반으로 동작함   예시) Tomcat, Jetty, Un..