타임리프를 간단하게 mvc1 에서 했었고, 이번엔 타임리프에 대해서 자세하게 알아보자.백엔드 서버에서 HTML을 동적으로 렌더링을 하느 용도로 사용된다.순수 HTML을 최대한 유지하는 특징타임리프로 작성한 파일은 HTML을 유지하기 때문에 웹브라우저에서 파일을 직접
타임리프에는 ${...} 라는 변수 표현식을 사용함변수 표현식에는 스프링 EL 이라는 스프링이 제공하느 표현식을 사용함.user.username : user의 username을 프로퍼티 접근함 -> user.getUsername()user'username' : 위와 같
타임리프에서 URL 생성시 @{...} 문법을 사용하면됨.@{/hello(param1=${param1}, param2=${param2})}/hello?param1=data1¶m2=data2()부분은 쿼리 파라미터로 처리됨.소스 코드상에 고정 된 값을 말함.예시Hello
HTML 주석자바스크립트 표준 HTML 주석은 타임리프가 렌더링 하지않고 그대로 남겨둠.타임리프 파서 주석타임리프의 진짜 주석 -> 렌더링시 주석 부분을 제거타임리프 프로토타입 주석HTML 파일을 웹 브라우저에서 그대로열면 웹브라우저가 렌더링을 하지않는다.타임리프 렌더
웹페이지 개발시 공톡영역으로 자주 사용하는 상단 ,하단 ,좌측 카테고리 등등 여러 페이지에서 함꼐 사용하는 영역들을 코드로 복사해서 사용할 경우 변경시 여러페이지를 다 수정하는 비효율적인 작업을 해야하는 것을 해결하기 위한 템플릿 조각fragment 가 있는 태그는 다
스프링의 SpringEL 문법 통합${@myBean.doSomething()} 처럼 스프링 빈 호출 지원 편리한 폼 관리를 위한 추가 속성폼 컴포넌트 기능checkbox,radio button,list 등을 편리하게 사용할 수 있게 기능 지원.스프링 메시지, 국제화 기
여러 선택지중 하나를 선택할 때 사용이 가능자바 ENUM을 활용해서 개발멀티 체킹을 했던 것처럼 @ModelAttribute을 통해서 itemType을 추가해두자.ItemType.values()를 사용시 해당 ENUM의 모든 정보를 배열로 반환해줌.라디오 버튼의 경우
현재까지 진행상황으로는 상품명이라는 단어와 상품이라는 단어가 하드코딩 상태로 들어가 있는 상태다.만약 이 단어를 바꿔달라는 소리를 듣게 된다면 내가 썼던 모든 단어를 직접 다 바꿔야되는 상태가 되어버려서 엄청난 노가다를 해야한다.이런 다양한 단어들을 한곳에서 관리하도록
컨트롤러의 중요한 역할 중 하나는 HTTP 요청이 정상인지 검증 하는 것.클라이언트 검증은 조작이 가능하기 때문에 보안에 취약서버만으로 검증시 즉각적인 고객 사용성이 부족둘을 적절히 섞어서 사용하고, 최종적으로 서버 검증 필수API 방식 사용시 API 스펙을 잘 정의해
스프링이 제공하는 검증 오류를 보관하는 객체 -> 오류 발생시 여기에 보관필드 오류가 있으면 FieldError객체를 생성해서 bindingReuslt에 담기.objectName : @ModelAttribute 이름field : 오류가 발생하 필드 이름defaultMe
FieldError에는 2가지 생성자가 존재한다.field : 오류 필드rejectValue : 사용자가 입력한 값여기에 오류가 발생했을때 사용자가 입력한 값을 저장하는 필드이게 없다면 내가 전에 입력한 것들이 오류가 발생하면 다 날라가게된다.bindingFailur
required.item.itemName : 상품이름은 필수입니다.와 같이 자세히 만들수도 있으며,required: 필수값 입니다.라고 만들 수 있다.단순하게 만들경우 범용성이 좋아 여러곳에서 사용이 가능하지만 메시지를 세밀하기 작성하기 어려움.너무 자세하게 만들경우
검증 오류 코드는 2가지로 나뉜다.개발자가 직접 작성한 오류 코드 -> rejectValue()를 직접 호출스프링이 직접 검증 오류를 추가한 경우 -> 주로 타입 정보가 맞지않는다.price 필드에 문제 "A" 를 입력할 경우이렇게 bindingResult가 담겨있을
검증 기능을 지금처럼 매번 코드로 작성하게 된다면 굉장히 번거로워지기 때문에 사용된다.Bean Validation은 특정한 구현체가 아닌 Bean Validation 2.0 이라는 기술 표준Item 클래스에 Bean Validation 애노테이션을 적용검증 애노테이션
BealValidation에서 해당 오브젝트 오류 관련 오류를 처리하는 방법@ScriptAssert()를 사용해서 진행하지만 제약이 많고 복잡해서 굳이 사용하지 않고 직접 자바코드로 작성하는 것이 좋다고 한다.데이터를 등록할 때와 수정할 때는 요구사항이 다를수 있다.수
HTML form -> Item -> Controller -> Item -> Repository장점 : Item 도메인 객체를 컨트롤러, 레포지토리 까지 직접 전달 -> 중간에 Item 만드는 과정이 없어서 간단단점 : 간단한 경우에만 적용 가능, 수정시 중복될 수
도메인 = 화면, UI, 기술 인프라 등등의 영역을 제외한 시스템이 구현해야하는 핵심 비즈니스 영역web부분을 다른 기술로 바꾼다해도 도메인은 그대로 유지되어야함.이렇게 되게 할려면 web은 domain을 알고 있지만 domain은 web을 몰라야 가능domain은 w
세션의 개념은 대부분의 웹 애플리케이션에 필요하다.서블릿은 세션을 위해 HttpSession이라는 기능을 제공해준다.세션을 일정시간 사용하지 않을 경우 해당 세션을 삭제하는 기능도 제공서블릿이 제공하는 HttpSession을 생성시쿠키 이름 : JSESSIONID값
세션 정보를 확인해볼 컨트롤러 추가sessionId : 세션 ID ==> JsessionID 의값maxInactiveInterval : 세션의 유효시간createTime : 세션 생성일시lastAccessedTime : 세션과 연결된 사용자가 최근에 서버에 접근한 시
요구사항이 로그인 한 사용자만 상품 관리 페이지에 들어갈 수있어야한다.현재 상황은 로그인을 하지 않은 사용자도 직접 URL을 호출하면 관리 화면에 들어갈 수있는 문제가 있다.상품 관리 컨트롤러에 로그인 여부를 체크하는 로직하나하나 작성해서도 관리가 가능하지만 등록,수정
스프링 MVC 가 제공한다.서블릿 필터와 같이 웹과 관련된 공통 사항 관심 사항을 효과적으로 해결할 수 있는 기술.디스패처 서블릿과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출됨.스프링 MVC 가 제공하는 기능이기 때문에 디스패처 서블릿 이후에 등장하게 되는 것.필터와
스프링이 아닌 순수 서블릿 컨테이너가 예외를 처리하는 방법Exception(예외)response.sendError(Http 상태 코드, 오류 메시지)자바의 메인 메서드를 직접 실행하는 경우 main이라는 이름의 쓰레드가 실행실행도중 예외를 잡지 못하고 처음 실행한 ma
예외 처리에 따른 필터와 인터셉터 , 서블릿이 제공하는 DispatchType 이해하기현재 오류가 발생하게되면 오류페이지를 출력하기 위해서 WAS 내부에서 다시한번 호출이 발생되고 있다.이미 한번 필터나 인터셉터에서 오류 페이지를 호출한다고 한번 호출 한 것을 또 호출
ErrorPage를 자동으로 등록 ==> /error 라는 경로로 기본 오류페이지가 설정되있다.상태코드와 예외를 설정하지 않을 경우 기본 오류 페이지로 사용된다.서블릿 밖으로 예외 발생 도는 response.sendError() 가 호출시 모든 오류는 /error 를
API 의 경우에는 각 오류 상황에 맞는 오류 응답 스펙을 정해서 JSON으로 내려줘야 오류를 대처할 수있다.API 는 오류페이지 처럼 단순히 고객에게 오류화면을 보여주는걸로 끝나지 않기 때문에api 예외 컨트롤러 추가정상 호출의 경우에는 api 설계대로 제대로 작동하
기본적으로 ModelAndView를 반환해야하는데, API 응답의 경우에는 필요하지않음.API 응답을 위해서 Response에 응답 데이터를 직접 넣어줘야하는 불편함이 존재특정 컨트롤러에서만 발생하는 예외를 별도로 처리하기 힘듬.회원을 처리하는 컨트롤러에서 발생하는 r