일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JDBC
- 인프런
- java
- 그리디
- Thymeleaf
- transaction
- pointcut
- jpa
- 스프링 핵심 기능
- Exception
- Spring Boot
- 스프링
- 알고리즘
- Greedy
- http
- 자바
- Proxy
- db
- spring
- Servlet
- springdatajpa
- QueryDSL
- Android
- 스프링 핵심 원리
- kotlin
- 김영한
- AOP
- SpringBoot
- 백준
- JPQL
- Today
- Total
목록Thymeleaf (26)
개발자되기 프로젝트
1. Paging 처리 - Repository JPA를 사용하면 Paging처리가 간단한다. setFirstResult : 어디서부터 시작? seMaxResults : 한 페이지에 몇개?? public List findAllPaging(int offset, int limit){ return em.createQuery("select p from Post p order by p.id asc", Post.class) .setFirstResult(offset) .setMaxResults(limit) .getResultList(); } 2. Paging 구현 - Page Page List를 담고있는 List를 사용할 예정. @Data public class Page { private List pages = new..
Thymeleaf에 Converter를 적용해보자. 1. Controller @Controller public class ConverterController { @GetMapping("/converter-view") public String converterView(Model model){ model.addAttribute("number", 10000); model.addAttribute("ipPort", new IpPort("127.0.0.1", 8080)); return "converter-view"; } } 2. converter-view.html ${number}: ${{number}}: ${ipPort}: ${{ipPort}}: 기존과는 다르게 ${{...}}가 있다. ${number}: ${{..
1. BasicErrorController제공 기능. BasicErrorController 컨트롤러는 다음 정보를 model에 담아서 뷰에 전달한다. 뷰 템플릿에서 이 값을 활용해서 출력할 수 있다. * timestamp: Fri Feb 05 00:00:00 KST 2021 * status: 400 * error: Bad Request * exception: org.springframework.validation.BindException * trace: 예외 trace * message: Validation failed for object='data'. Error count: 1 * errors: Errors(BindingResult) * path: 클라이언트 요청 경로 (`/hello`) 2. Thym..
1. 오류 코드 관리 전략 핵심은 구체적인 것에서! 덜 구체적인 것으로! MessageCodesResolver 는 required.item.itemName 처럼 구체적인 것을 먼저 만들어주고, required 처럼 덜 구체적인 것을 가장 나중에 만든다. 이렇게 하면 앞서 말한 것 처럼 메시지와 관련된 공통 전략을 편리하게 도입할 수 있다. 복잡하게 사용하는 이유?? 모든 오류 코드에 대해서 메시지를 각각 다 정의하면 개발자 입장에서 관리하기 힘들다. 크게 중요하지 않은 메시지는 범용성 있는 requried 같은 메시지로 끝내고, 정말 중요한 메시지는 꼭 필요할 때 구체적으로 적어서 사용하는 방식이 더 효과적 2. 메시지 추가 #required.item.itemName=상품 이름은 필수입니다. #range..
지금부터 스프링이 제공하는 검증 오류 처리 방법 중 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가 ..