[Spring] MVC 1편 (10) - 실용적인 스프링 MVC
·
Spring
📌 @RequestMapping 스프링에서는 애노테이션을 활용한 매우 유연하고 실용적인 컨트롤러를 사용할 수 있다. 가장 우선순위가 높은 핸들러 매핑과 핸들러 어댑터는 애노테이션 기반의 컨트롤러를 지원하는 각각 RequestMappingHandlerMapping과 RequestMappingAdapter이다. 실무에서는 이 방식의 컨트롤러를 사용한다! 회원 등록 폼 @Controller public class SpringMemberFormControllerV1 { @RequestMapping("/springmvc/v1/members/new-form") public ModelAndView process() { return new ModelAndView("new-form"); } } @Controller : ..
[Spring] MVC 1편 (9) - 스프링 MVC 프레임워크 구조
·
Spring
📌 스프링 MVC 구조 ✅ 동작 순서 핸들러 조회: 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러를 조회한다. 핸들러 어댑터 조회: 핸들러를 실행할 수 있는 핸들러 어댑터를 조회한다. 핸들러 어댑터 실행: 핸들러 어댑터를 실행한다. 핸들러 실행: 핸들러 어댑터가 실제 핸들러를 실행한다. ModelAndView 반환: 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환한다. viewResolver 호출: 뷰 리졸버를 찾고 실행한다. View 반환 : 뷰 리졸버가 뷰의 논리 이름을 물리 이름으로 바꾸고, 렌더링 역할을 담당하는 뷰 객체를 반환한다. 뷰 렌더링 : 뷰를 통해 뷰를 렌더링한다. 📌 간단한 핸들러 매핑과 핸들러 어댑터 사용해보기 OldController @Compon..
[Spring] MVC 1편 (8) - MVC 프레임워크 만들기 v4,v5
·
Spring
v1, v2, v3 [Spring] MVC 1편 (7) - MVC 프레임워크 만들기 v1, v2, v3 📌 프론트 컨트롤러 ✅ 프론트 컨트롤러 도입 전 프론트 컨트롤러 도입 전에는 각 컨트롤러에서 공통 로직을 구현해줘야 했다. ✅ 프론트 컨트롤러 도입 후 모든 요청 메세지는 공통 로직이 구 suaring.tistory.com 📌 MVC 프레임워크 만들기 ✅ v4 - 단순하고 실용적인 컨트롤러 v3 컨트롤러는 서블릿의 종속성을 제거하고 뷰 경로의 중복을 제거하여 잘 설계된 컨트롤러이다. 그러나 개발자 입장에서 항상 컨트롤러에서 ModelView 객체를 생성해서 반환해야 하는 부분이 번거롭다. 이번 버전에서는 조금 더 실용적인 방법으로 리팩토링 해본다. 기본적인 구조는 v3와 같지만, 각 컨트롤러는 이제 M..
[Spring] MVC 1편 (7) - MVC 프레임워크 만들기 v1, v2, v3
·
Spring
📌 프론트 컨트롤러 ✅ 프론트 컨트롤러 도입 전 프론트 컨트롤러 도입 전에는 각 컨트롤러에서 공통 로직을 구현해줘야 했다. ✅ 프론트 컨트롤러 도입 후 모든 요청 메세지는 공통 로직이 구현되어 있는 프론트 컨트롤러로 들어온다. 프론트 컨트롤러는 요청에 맞는 컨트롤러를 찾아 호출해준다. 프론트 컨트롤러에서 요청 메세지를 매핑 시켜주면, 나머지 컨트롤러는 서블릿을 사용하지 않아도 된다. 스프링 웹 MVC의 핵심도 FrontController → 스프링 웹 MVC의 DispatcherServlet이 FrontController 패턴으로 구현되어 있음! 📌 MVC 프레임워크 직접 만들어보기 ✅ v1 - 프론트 컨트롤러 도입 HTTP 요청이 들어오면 프론트 컨트롤러는 요청의 URL을 바탕으로 매핑 정보에서 요청 ..
[Spring] MVC 1편 (6) - MVC 패턴 적용
·
Spring
📌 MVC 패턴 사용 이유? 너무 많은 역할 : 하나의 파일에서 비즈니스 로직을 수행하고 뷰 렌더링까지 처리하면 유지보수가 어렵다. 변경의 라이프 사이클 : 비즈니스 로직과 뷰 렌더링의 변경의 라이프 사이클이 다르므로 한 파일에 두면 유지보수하기 좋지 않다. 기능 특화 : JSP는 뷰 템플릿으로 화면을 렌더링하는데 최적화 되어있다. 📌 Model-View-Controller 컨트롤러 : HTTP 요청을 받아 파라미터를 검증하고, 비즈니스 로직을 실행한다. 뷰에 전달할 결과 데이터를 조회해서 모델에 담는 역할을 한다. 모델 : 컨트롤러가 담은 데이터를 뷰에 전달한다. 뷰는 덕분에 비즈니스 로직이나 데이터 접근을 몰라도 되고, 화면을 렌더링하는 일에 집중할 수 있다. 뷰 : 모델에 담겨 있는 데이터를 사용해..
[Spring] MVC 1편 (5) - ​ 서블릿, JSP를 사용한 회원 관리 웹 애플리케이션
·
Spring
📌 회원 관리 웹 애플리케이션 요구사항 회원 정보 : username(이름), age(나이) 기능 요구사항 : 회원 저장, 회원 조회 📌 서블릿으로 구현하기 ✅ 회원 등록 폼 - Servlet @WebServlet(name = "memberFormServlet", urlPatterns = "/servlet/members/new-form") public class MemberFormServlet extends HttpServlet { private MemberRepository memberRepository = MemberRepository.getInstance(); @Override protected void service(HttpServletRequest request, HttpServletRespon..
[Spring] MVC 1편 (4) - HTTP 응답 데이터
·
Spring
📌 HttpServletResponse ✅ 역할 HTTP 응답코드 지정 헤더, 바디 생성 편의 기능 제공 : Content-type, 쿠키, Redirect 📌 HTTP 응답 데이터 ✅ 종류 단순 텍스트 응답 HTML 응답 HTTP API - MessageBody JSON 응답 ✅ HTML 응답 content-type: text/html @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //Content-Type: text/html;charset=utf-8 response.setContentType("text/html"); ..
[Spring] MVC 1편 (3) - HTTP 요청 데이터
·
Spring
📌 HttpServletRequest ✅ 역할 HTTP 요청 메세지 POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded username=kim&age=20 서블릿은 개발자가 HTTP 요청 메세지를 편리하게 사용할 수 있도록 파싱해줌 그 결과를 HttpServletRequest 객체에 담아서 제공 + 부가기능 임시 저장소 기능 저장: request.setAttribute(name, value) 조회: request.getAttribute(name) 세션 관리 기능 request.getSession(create: true) 📌 HTTP 요청 메세지 전달 (클라이언트 → 서버) ✅ GET - 쿼리 파라미..
[Spring] MVC 1편 (2) - 서블릿
·
Spring
📌 서블릿 (Servlet) ✅ 스프링 부트 서블릿 환경 구성 @ServletComponentScan // 스프링이 하위 패키지에 있는 서블릿을 자동으로 찾아 등록해줌 @SpringBootApplication public class ServletApplication { public static void main(String[] args) { SpringApplication.run(ServletApplication.class, args); } } 스프링 부트는 서블릿을 직접 등록해서 사용할 수 있도록 @ServletComponetScan 애노테이션을 지원한다. ✅ 서블릿 등록 @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class H..