MVC (25) 썸네일형 리스트형 [MVC] Validation(검증) 검증 요구사항상품 관리 시스템에 새로운 요구사항이 추가되었다고 가정해보자.요구사항: 검증 로직 추가 1️⃣ 타입 검증가격, 수량에 문자가 들어가면 검증 오류 처리2️⃣ 필드 검증상품명: 필수, 공백X가격: 1000원 이상, 1백만원 이하수량: 최대 99993️⃣ 특정 필드의 범위를 넘어서는 검증가격 * 수량의 합은 10,000원 이상 만약 폼 입력시 숫자를 문자로 작성하거나해서 검증 오류가 발생하면 오류 화면으로 바로 이동한다면사용자는 처음부터 해당 폼으로 다시 이동해서 입력을 해야 한다. 아마도 이런 서비스라면 사용자는 금방 떠나버릴 것이다. 고객이 입력한 데이터를 유지한 상태로 어떤 오류가 발생했는지 친절하게 알려주어야 한다.컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. .. [MVC] 메세지, 국제화 목차메시지, 국제화 소개 스프링 메시지 소스 설정 스프링 메시지 소스 사용 웹 애플리케이션에 메시지 적용하기 웹 애플리케이션에 국제화 적용하기 ✍ 메시지, 국제화 소개 메세지기획자가 화면에 보이는 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까?여러 화면에 보이는 단어를 변경하려면 화면들을 다 찾아가면서 모두 변경해야 한다. 지금처럼 화면 수가 적으면 문제가 되지 않지만 화면이 수십개 이상이라면 수십개의 파일을 모두 고쳐야 한다.왜냐하면 해당 HTML 파일에 메시지가 하드코딩 되어 있기 때문이다.이런 다양한 메시지를 한 곳에서 관리하도록 하는 기능을 메시지 기능이라 한다. messages.properties item=상품item.id=상품 IDitem.itemName=상품명i.. [MVC] Tymeleaf 스프링 통합과 폼 목차타임리프 스프링 통합 입력 폼 처리 요구사항 추가 체크 박스라디오 버튼 셀렉트 박스 ✍ 타임리프 스프링 통합타임리프는 크게 2가지 메뉴얼을 제공한다.기본 메뉴얼: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html스프링 통합 메뉴얼: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html타임리프는 스프링 없이도 동작하지만, 스프링과 통합을 위한 다양한 기능을 편리하게 제공한다. 그리고 이런 부분은 스프링으로 백엔드를 개발하는 개발자 입장에서 타임리프를 선택하는 하나의 이유가 된다.스프링 통합으로 추가되는 기능들스프링의 SpringEL 문법 통합 ${@myBean.doSomethi.. [MVC] Thymeleaf 기본 기능 목차텍스트 - text, utext변수 - SpringEL기본 객체들유틸리티 객체와 날짜URL 링크리터럴연산속성 값 설정반복조건부 평가주석블록자바스크립트 인라인템플릿 조각템플릿 레이아웃 ✍ 타임리프 소개공식 사이트: https://www.thymeleaf.org/공식 메뉴얼 - 기본 기능: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html공식 메뉴얼 - 스프링 통합: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html 타임리프 특징서버 사이드 HTML 렌더링 (SSR)네츄럴 템플릿스프링 통합 지원 1️⃣ 서버 사이드 HTML 렌더링 (SSR)타임리프는 백엔드 서버에서 HTML을.. [MVC] PRG 패턴 ✍ PRG Post/Redirect/Get웹을 개발하다 상품 등록을 완료하고 웹 브라우저의 새로고침 버튼을 클릭했을 때상품이 계속해서 중복 등록되는 경험을 해본 적이 있을 것이다.상품 관리를 하는 웹 프로그램이라고 가정해보자. 전체 흐름 POST 등록 후 새로 고침@PostMapping("/add")public String addItemV3(@ModelAttribute Item item) { itemRepository.save(item); return "basic/item";} 💡 웹 브라우저의 새로 고침은 마지막에 서버에 전송한 데이터를 다시 전송한다.상품 등록 폼에서 데이터를 입력하고 저장을 선택하면 POST /add + 상품 데이터를 서버로 전송한다.이 상태에서 새로 고침.. [MVC] Thymeleaf 뷰 템플릿 ✍ 타임리프 간단히 알아보기 ✅ 타임리프 사용 선언 ✅ 속성 변경 - th:hrefth:href="@{/css/bootstrap.min.css}" href="value1" 을 th:href="value2" 의 값으로 변경한다.타임리프 뷰 템플릿을 거치게 되면 원래 값을 th:xxx 값으로 변경한다. 만약 값이 없다면 새로 생성한다.HTML을 그대로 볼 때는 href 속성이 사용되고, 뷰 템플릿을 거치면 th:href 의 값이 href 로 대체되면서 동적으로 변경할 수 있다.대부분의 HTML 속성을 th:xxx 로 변경할 수 있다. 타임리프 핵심핵심은 th:xxx 가 붙은 부분은 서버사이드에서 렌더링 되고, 기존 것을 대체한다. th:xxx 이 없으면 기존 html의 xxx 속성이 그대로 사용된다.HTML.. [MVC] HTTP 응답 목차HTTP 응답 - 정적 리소스, 뷰 템플릿HTTP 응답 - HTTP API, 메시지 바디에 직접 입력HTTP 메시지 컨버터요청 매핑 헨들러 어뎁터 구조 ✍ HTTP 응답 - 정적 리소스, 뷰 템플릿 응답 데이터는 이미 앞에서 일부 다룬 내용들이지만, 응답 부분에 초점을 맞추어서 정리해보자.스프링(서버)에서 응답 데이터를 만드는 방법은 크게 3가지이다. 정적 리소스예) 웹 브라우저에 정적인 HTML, css, js를 제공할 때는, 정적 리소스를 사용한다.뷰 템플릿 사용 예) 웹 브라우저에 동적인 HTML을 제공할 때는 뷰 템플릿을 사용한다.HTTP 메시지 사용HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 한다.HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다.. [MVC] HTTP 요청 목차HTTP 요청 - 기본, 헤더 조회HTTP 요청 파라미터 - 쿼리 파라미터, HTML FormHTTP 요청 파라미터 - @RequestParamHTTP 요청 파라미터 - @ModelAttributeHTTP 요청 메시지 - 단순 텍스트HTTP 요청 메시지 - JSON HTTP 요청 - 기본, 헤더 조회애노테이션 기반의 스프링 컨트롤러는 다양한 파라미터를 지원한다. 이번 시간에는 HTTP 헤더 정보를 조회하는 방법을 알아보자.@Slf4j@RestControllerpublic class RequestHeaderController { @RequestMapping("/headers") public String headers(HttpServletRequest request, .. [MVC] 요청 매핑 방법 목차요청 매핑요청 매핑 - API 예시 ✍ 요청 매핑@RestControllerpublic class MappingController { private Logger log = LoggerFactory.getLogger(getClass()); /** * 기본 요청 * 둘다 허용 /hello-basic, /hello-basic/ * HTTP 메서드 모두 허용 GET, HEAD, POST, PUT, PATCH, DELETE */ @RequestMapping("/hello-basic") public String helloBasic() { log.info("hello-basic"); return "OK"; }} 💡 매핑 정보 @Re.. [MVC] 스프링 MVC 목차스프링 MVC 전체 구조 핸들러 매핑과 핸들러 어댑터 뷰 리졸버 스프링 MVC 스프링 MVC 전체 구조 SpringMVC 구조 💡 직접 만든 프레임워크 스프링 MVC 비교FrontController ➔ DispatcherServlet handlerMappingMap ➔ HandlerMapping MyHandlerAdapter ➔ HandlerAdapter ModelView ➔ ModelAndView viewResolver ➔ ViewResolver MyView ➔ View ✍ DispatcherServlet 핵심 구조 살펴보기org.springframework.web.servlet.DispatcherServlet스프링 MVC도 프론트 컨트롤러 패턴으로 구현되어 있다. 스프링 MVC의 프론트 컨.. 이전 1 2 3 다음