본문 바로가기
관리자

Programming-[Backend]/Spring

(76)
[스프링 웹MVC-2] 9. 검증(Validation) - groups, 객체 분리 적용, API 전송에서의 성공, 실패 케이스 1. groups 동일한 모델 객체를 상품 등록과 상품 수정 두 군데에서 사용하기 위해서, Bean Validation의 검증 기능 중 하나인 groups를 적용해보자. 구분을 위한 interface, SaveCheck, UpdateCheck를 2개 만들어준다. 그리고 Item 객체에는 groups 속성을 주면된다. java/hello/itemservice/domain/item/Item.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 @Data public class Item { @NotNull(groups = UpdateCheck.class) private Long id; @NotBlank(groups = {SaveCh..
[스프링 웹MVC-2] 8. 검증(Validation) - Bean Validation 사용하기 1. Bean Validation 어노테이션 적용해보기 Bean Validation 개념 자바 if 코드로 작성했던 특정값이 null이거나 blank가 있으면 안된다. , 숫자값은 최소값 ~ 최대값 사이여야 한다는 검증 조건 등은 매우 기본적인 조건이다. 이런 간단한 제약조건은 어노테이션으로 지원이 되는데, 이런 검증 내용을 표준화하고 자동화해주는 것이 Bean Validation 이다. Bean Validation은 구현체가 아니라, Bean Validation 이라는 JSR-380의 표준기술이다. 하이버네이트 Validator의 공식사이트는 다음과 같다. https://beanvalidation.org/2.0/ 2. Bean Validation 테스트 라이브러리 추가하기 본격적인 사용에 앞서, Bea..
[스프링 웹MVC-2] 7. 검증(Validation) - 오류코드, 메시지 처리 이제 검증된 내용을 앞서 배운 메시지로 공용화하여 처리하는 방법을 배운다. 이렇게 공용화함으로써 유지보수에 유리하고, 계층적인 오류 및 메시지 관리가 가능하게 된다. 살펴볼 순서는 다음과 같다. 1. FieldError, ObjectError 객체의 codes, arguments 파라미터 알아보기 2. bindingResult의 rejectValue, reject 사용해보기 3. 범용적 메시지 처리 4. 처리 원리 : MessageCodesResolver 5. 오류 메시지 계층화 하기, ValidationUtils 6. 스프링이 만든 오류 처리 : typeMismatch 1. FieldError, ObjectError 객체의 codes, arguments 파라미터 앞선 글에서 FieldErrors와 Ob..
[스프링 웹MVC-2] 6. 검증(Validation) 개선 : BindingError, FieldError, ObjectError 1. 코드 개선을 위한 코드 복사 및 변경 코드 replace 검증을 위한 코드를 개선해본다. 우선 앞선 글에서 작성한 코드를 복사해서 V2 버전으로 만든다. 코드 내에 있는 v1, V1 부분을 v2, V2로 만드는데, 변경을 원하는 코드를 블록하고, [Ctrl + R]을 누르면 intelliJ에서 선택하여 변경, replace All 기능을 제공한다. 디렉토리 내 단어 변경 [Ctrl + Shift + R]을 누르면 디렉토리 내부의 단어들을 전부 바꿔줄 수 있다. 2. BindingResult 적용 : 기본 에러의 종류와 메시지를 담는 errors 객체를 직접 생성하는 것이 아니라, 스프링에서 제공하는 BindingResult 객체를 사용하도록 한다. BindingResult 객체는 View로 넘기는 ..
[스프링 웹MVC-2] 5. 검증(Validation) 강의에서 받은 validation 프로젝트 파일을 기반으로 검증에 대해서 공부한다. 초기 세팅은 이전 프로젝트들과 동일하게 해주도록 한다. 1. 검증 내용 검증 예제를 바탕으로 학습을 해볼 것이다. 검증 요구사항이 아래와 같다고 가정한다. 1. 타입 검증 가격, 수량에 문자가 들어가면 에러 2. 필드 검증 상품명 : 필수 입력, 공백X 가격 : 1,000원 이상, 1,000,000원 이하 수량 : 최대 9,999개 3. 전체 검증 가격*수량의 값은 10,000원 이상 프론트 VS 백 검증 검증에는 클라이언트(프론트)상에서 입력값을 바로 검증하는 방법이 있고, 입력값을 서버(백)로 가져와서 검증하는 방법이 있다. 그러나 결론은 프론트, 백 모두에서 검증해야한다. 왜냐하면 프론트에서만 검증할 경우, 입력창에..
[스프링 웹MVC-2] 4. 메시지, 국제화 기존 상품 등록 프로젝트를 그대로 가져온다. 강의에서 받을 수 있는 파일로 받는데, 이전 시간에 다룬 체크박스 등의 내용은 제외된다. 1. 개요 현재 프로젝트는 만약 html 상 하드코딩된 단어들을 변경해야 된다면, 일일이 찾아서 고쳐야하는 상황이다. 아래 사진에서 상품명, 가격, 수량 등을 바꿔야 한다면 직접 찾아가며 바꿔야되는 것이다. 이런 어려움을 해결해줄 수 있는 것이 메시지 이다. 단어들을 하드코딩하지 않고, 별도의 파일(messages.properties)에 놔두고 관리하는 것이다. 국제화 도 메시지에서 영어버전 파일은 messages_en.properties, 한글 버전 파일은 message_ko.properties로 두면 될 것이다. 그리고 HTTP의 accept-language 헤더 값을..
[스프링 웹MVC-2] 3. 타임리프/스프링으로 폼 양식 만들기 - th:object, th:field, 체크박스, 라디오 버튼, 셀렉트 박스 form 프로젝트를 생성한다. 강의에서 기초 자료를 받아서 진행한다. MVC 1편에서 상품 관련 폼을 만들던 프로젝트이다. 스프링 통합 폼을 실습하기 위해서, 타임리프를 스프링 빈 형태로 등록해야한다. 기존 스프링은 다소 복잡한 과정을 통해 타임리프 템플릿 엔진을 스프링 빈으로 등록해야 하지만, 스프링 부트는 아래 구문으로 build.gradle 파일에 타임리프를 import 해옴으로써 이런 과정을 한번에 처리해준다. implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' 1. 입력 폼 수정 상품 등록/수정 폼 우선 html 파일에서 객체 정보를 바로 넘길 수 있도록 하기 위해, Controller에서 객체를 넘겨줘야 한다. 이때 ..
[스프링 웹MVC-2] 2. 타임리프 기본 - 2 : 대표 문법 공부 계속 - 반복, 조건, 주석, 블록, 자바스크립트, 템플릿, 레이아웃 1. 타임리프 기능 살펴보기 - 이전 글에 이어서 반복 반복 기능은 반복적으로 데이터를 렌더링 해준다. 아래 코드와 같이 th:each="파라미터1, 파라미터2 : ${반복객체}" 로 표현한다. 파라미터1은 반복 객체 속의 각 객체를 의미하고, 파라미터2는 각 객체의 상태값을 표현한다. 파라미터1의 이름이 user인 경우 파라미터2의 이름은 userStat으로 자동지정되어 파라미터2는 생략해도 정상 동작한다. 표현할 수 있는 상태값은 코드에 나와 있는 것과 같으며, current는 현재 반복 index의 각 객체를 표시한다. 결과 화면을 참고하자. 예시를 위해서 addUsers 메서드를 추가했다. 반복 기능의 경우 예시문의 List 뿐만 아니라, java.util.Iteration, java.util.E..