일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 | 31 |
- Greedy
- QueryDSL
- 백준
- db
- 인프런
- spring
- 그리디
- Proxy
- pointcut
- 김영한
- Spring Boot
- 스프링 핵심 원리
- 스프링 핵심 기능
- Exception
- 알고리즘
- AOP
- Thymeleaf
- java
- 스프링
- http
- 자바
- SpringBoot
- JDBC
- jpa
- Android
- springdatajpa
- kotlin
- Servlet
- transaction
- JPQL
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
1. BindingResult?? 스프링이 제공하는 검증 오류를 보관하는 객체이다. 검증 오류가 발생하면 여기에 보관하면 된다. BindingResult 가 있으면 @ModelAttribute 에 데이터 바인딩 시 오류가 발생해도 컨트롤러가호출된다! @ModelAttribute에 바인딩 시 타입 오류가 발생하면? BindingResult 가 없으면 400 오류가 발생하면서 컨트롤러가 호출되지 않고, 오류 페이지로이동한다. BindingResult 가 있으면 오류 정보( FieldError )를 BindingResult 에 담아서 컨트롤러를 정상 호출한다. Field error in object 'item' on field 'itemName': rejected value [null]; codes []; a..
지금부터 스프링이 제공하는 검증 오류 처리 방법 중 BindingResult를 알아보자. 1. 변경 전 @PostMapping("/add") public String addItem(@ModelAttribute Item item, RedirectAttributes redirectAttributes, Model model) { //검증 오류 결과를 보관 Map errors= new HashMap(); //검증 로직 if(!StringUtils.hasText(item.getItemName())){ errors.put("itemName", "상품 이름을 필수 입니다."); } } 2. BindingResult 적용 @PostMapping("/add") public String addItemV1(@ModelAtt..
1. 상품 저장 성공 시나리오 2. 상품 저장 실패 시나리오 이런 저런 이유로 data가 누락되거나 잘못된 data가 넘어오는 경우 검증에 실패해야함. 이렇게 검증에 실패한 경우 고객에게 다시 상품 등록 폼을보여주고, 어떤 값을 잘못 입력했는지 알려줘야함. 검증에 실패할 경우 Model에 data를 담아서 상품등록 폼에 다시 전달함. Thymeleaf는 넘어온 data를 가지고 랜더링을 다시함. 3. 검증로직 추가 : addItem. 검증시 오류가 발생하면 errors 에 담아둔다. 이때 어떤 필드에서 오류가 발생했는지 구분하기 위해 오류가 발생한 필드명을 key 로 사용한다. 이후 뷰에서 이 데이터를 사용해서 오류 메시지를 출력 @PostMapping("/add") public String addIte..
1. 검증 로직 추가 타입 검증 가격, 수량에 문자가 들어가면 검증 오류 처리 필드 검증 상품명: 필수, 공백X 가격: 1000원 이상, 1백만원 이하 수량: 최대 9999 특정 필드의 범위를 넘어서는 검증 가격 * 수량의 합은 10,000원 이상 2.Controller의 역할 컨트롤러의 중요한 역할중 하나는 HTTP 요청이 정상인지 검증하는 것이다. 그리고 정상 로직보다 이런 검증 로직을 잘 개발하는 것이 어쩌면 더 어려울 수 있음 3. Client 검증, Server 검증 클라이언트 검증은 조작할 수 있으므로 보안에 취약하다. 서버만으로 검증하면, 즉각적인 고객 사용성이 부족해진다. 둘을 적절히 섞어서 사용하되, 최종적으로 서버 검증은 필수 API 방식을 사용하면 API 스펙을 잘 정의해서 검증 오류..
영어 메시지를 추가해보자! 1. 영어 메시지 추가 messages_en.properties label.item=Item label.item.id=Item ID label.item.itemName=Item Name label.item.price=price label.item.quantity=quantity page.items=Item List page.item=Item Detail page.addItem=Item Add page.updateItem=Item Update button.save=Save button.cancel=Cancel 끝 이미 HTML에 message사용하도록 설정해둠, 브라우저의 언어를 영어로 변경해보자. 언어설정을 변경하면 Request Headers의 Accept-Language가 ..
1. 메시지 추가 messages.properties label.item=상품 label.item.id=상품 ID label.item.itemName=상품명 label.item.price=가격 label.item.quantity=수량 page.items=상품 목록 page.item=상품 상세 page.addItem=상품 등록 page.updateItem=상품 수정 button.save=저장 button.cancel=취소 2. Thymeleaf Message 적용 메시지 표현 식: #{...} #{...}을 사용하면 스프링 메시지 조회 가능. ex) #{label.item} 랜더링 전 랜더링 후 상품 3. 사용 예시 랜더링 전 상품 등록 폼 랜더링 후 상품 등록 해당되는 부분에 모두 적용 ㅋㅋ 4. 잘되는..
1. MessageSource Interface public interface MessageSource { String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException; } code와 일부 파라미터로 메세지를 읽어올 수 있는 기능을 제공 2. 예시-기본 앞서 messages.properties에 아래와 같이 등록했다. 여기서 hello는 code, 안녕은 message 이다. hello=안녕 hello..
1. Spring Message Source 설정 메시지 관리 기능을 사용하려면 스프링이 제공하는 MessageSource 를 스프링 빈으로 등록이 필요하다. MessageSource 는 인터페이스이다. 따라서 구현체인 ResourceBundleMessageSource 를 스프링 빈으로 등록하면 된다. 2. 직접 등록 @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasenames("messages", "errors"); messageSource.setDefaultEncoding("utf-8"); re..