[Spring] 메시지와 국제화 - 어떻게 국제화가 자동으로 일어날까요?
·
Spring/MVC
메시지가 뭐고 왜 필요하냐면요예를 들어 이런 필드가 있다고 할 때, 상품명 이라는 라벨을 모두 상품 이름으로 변경해달라고 하면 어떻게 할 것인가?모든 코드를 까서 ctrl F 로 라벨을 찾아 수정하는 방법이 가장 단순한 방법일 것이다.근데 만약 수정해야하는 파일의 개수가 1000개면 하루종일 그것만 하고 있을 것인가? 기존 코드는 다음과 같이 상품명 이라는 텍스트가 하드코딩 되어 있기 때문에, 모두 까서 수정하기 힘들다. 상품명 그래서 이러한 메시지를 Key - value 형태로 저장해두고 관리하도록 하는 기능을 메시지 기능이라고 한다.hello=안녕hello.name=안녕 {0}label.item=상품label.item.id=상품 IDlabel.item.itemName=상품명label.it..
[Spring] @ModelAndAttribute 의 동작 과정
·
Spring/MVC
실제 개발을 할 때, 요청 파라미터를 받아서 필요한 객체를 생성한 뒤에 객체에 값을 setXXX 을 통해 해주는게 정석적인 방법이다.그렇다면 대충 코드는 다음과 같을 것이다.@RequestParam String username;@RequestParam int age;HelloData data = new HelloData();data.setUsername(username);data.setAge(age); 스프링은 위 과정을 완전히 자동화 해주는 @ModelAndAttribute 에노테이션 기능을 제공한다.@ModelAndAttribute 써보기파라미터를 바인딩 받을 객체 - HelloDatapackage hello.springmvc.basic;import lombok.Data;@Datapublic clas..
[Spring] Spring MVC가 제공하는 Request 매핑 기능
·
Spring/MVC
요청 매핑코드를 보기 전에 기본 지식으로, @RestController 에노테이션이 붙어 있는 클래스는 반환 객체가 응답 HTML로 렌더링 된다는 걸 까먹지 말자.자세한 설명은 주석으로 확인하자 !package hello.springmvc.basic.requestmapping;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.bind.annotation.*;@RestControllerpublic class MappingController { private Logger log = LoggerFactory.getLogger(getClass());// @RequestMapping의 HTTP 메서드 옵션..
[Spring] Spring MVC - 스프링이 제공하는 컨트롤러
·
Spring/MVC
현대의 스프링이 제공하는 컨트롤러는 애노테이션 기반으로 동작하여 유연하고 실용적이다.@RequestMapping스프링의 애노테이션을 활용한 가장 실용적인 방법은 바로 @RequestMapping 애노테이션을 사용하는 컨트롤러이다.@RequestMapping 애노테이션을 사용한 컨트롤러가 사용하는 핸들러 매핑은 RequestMappingHandlerMapping 이고, 이에 맞는 핸들러 어댑터는 RequestMappingHandlerAdapter을 사용한다.기존에 직접 구현했던 MVC 패턴을 이제 스프링 MVC를 사용하여 구현해보자그전에, 먼저 뷰 리졸버의 기능을 사용하기 위해 application.properties에 다음과 같은 코드를 반드시 추가해야한다.spring.mvc.view.prefix=/WE..
[Spring] 내가 만든 MVC 와 Spring MVC 차이
·
Spring/MVC
직접 구현한 MVC vs Spring MVC 구조이전 포스팅까지 우리가 직접 구현했던 MVC 구조는 다음과 같다.요약하면, 핸들러(컨트롤러)와 핸들러 어댑터를 찾아와서, 해당 핸들러의 비즈니스 로직을 수행하고 값을 모델에 담은 후, 해당 논리뷰 경로를 절대 뷰 경로로 변경하여 뷰로 포워딩하는 형태로 작성하였다.스프링이 제공하는 MVC 패턴은 어떨까? 다음 그림을 보자구조는 똑같다. 다만 표현 방식이 약간 다르다.표현 방식은 다음 표와 같다.직접 구현한 MVC스프링 MVCFrontControllerDispatcherServlethandlerMappingMapHandlerMappingMyHandlerAdapterHandlerAdapterModelViewModelAndViewviewResolverViewRes..
[Spring] FrontController V5(完) - 다양한 인터페이스 구현체 처리하기
·
Spring/MVC
[Spring] FrontController V4 - 개발자 친화적 리팩토링[Spring] FrontController 도입하기 V3 - 서블릿 종속성 제거[Spring] FrontController 도입하기 V2 - 포워딩 중복 제거https://bdisappointed.tistory.com/154 [Spring] FrontController 도입하기 V1[Spring] 서블릿과 JSP로 MVC 흉내내bdisappointed.tistory.com이전에 실용적이고 개발자 친화적인 MVC 구조를 구현 하였다.이번에는 다양한 인터페이스를 처리할 수 있도록 컨트롤러를 리팩토링 해보자Adapter 패턴 적용public interface ControllerV3 { ModelView process(Map pa..
[Spring] FrontController V4 - 개발자 친화적 리팩토링
·
Spring/MVC
[Spring] FrontController 도입하기 V3 - 서블릿 종속성 제거[Spring] FrontController 도입하기 V2 - 포워딩 중복 제거https://bdisappointed.tistory.com/154 [Spring] FrontController 도입하기 V1[Spring] 서블릿과 JSP로 MVC 흉내내기 , 그리고 한계점서블릿과 JSP를 통해 MVC를 구현 해bdisappointed.tistory.com지난번에 이어 ModelView를 반환하는 부분을 리팩토링하여 개발자 친화적으로 바꿔보자!어떻게 바꿀꺼냐면요..기본적인 구조는 V3와 같지만, 컨트롤러가 ModelView를 반환하는 대신에 뷰 이름만 반환하도록 해보자. V4 인터페이스 변경package hello.servlet..
[Spring] FrontController 도입하기 V3 - 서블릿 종속성 제거
·
Spring/MVC
[Spring] FrontController 도입하기 V2 - 포워딩 중복 제거https://bdisappointed.tistory.com/154 [Spring] FrontController 도입하기 V1[Spring] 서블릿과 JSP로 MVC 흉내내기 , 그리고 한계점서블릿과 JSP를 통해 MVC를 구현 해볼 예정이다. 구현은 다음과 같다.서블릿 : 컨트롤bdisappointed.tistory.com이번에는 사용하지 않는 request나 response를 제거하는 서블릿 종속성을 제거 해본다. 리팩토링 절차쉽게 얘기 해서, 파라미터 정보를 Map으로 저장하여 대신 넘기도록 하면 컨트롤러가 서블릿에 종속 되지 않고 넘겨 받은 파라미터들로만 지지고 볶고 하면 된다는 뜻이다.하지만 이전에 우리는 save 컨..
[Spring] FrontController 도입하기 V2 - 포워딩 중복 제거
·
Spring/MVC
https://bdisappointed.tistory.com/154 [Spring] FrontController 도입하기 V1[Spring] 서블릿과 JSP로 MVC 흉내내기 , 그리고 한계점서블릿과 JSP를 통해 MVC를 구현 해볼 예정이다. 구현은 다음과 같다.서블릿 : 컨트롤러JSP : 뷰HttpServletRequest 가 제공하는 내부 저장소 (Attribute) :bdisappointed.tistory.com이전 글에 이어 추가로 리팩토링 해보겠다.프론트 컨트롤러 도입 - V2String viewPath = "/WEB-INF/views/new-form.jsp";RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);dispa..