일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 김영한
- java
- 인프런
- Exception
- transaction
- 그리디
- QueryDSL
- Android
- Proxy
- SpringBoot
- pointcut
- Spring Boot
- JDBC
- JPQL
- spring
- Thymeleaf
- http
- 스프링
- 백준
- AOP
- jpa
- springdatajpa
- Servlet
- kotlin
- 알고리즘
- 스프링 핵심 기능
- Greedy
- db
- 자바
- 스프링 핵심 원리
- Today
- Total
목록spring (109)
개발자되기 프로젝트
???오류 코드를 얼마나 자세히 만들어야 할까 오류 코드를 만들 때 다음과 같이 자세히 만들 수도 있고, required.item.itemName : 상품 이름은 필수 입니다. range.item.price : 상품의 가격 범위 오류 입니다. 또는 다음과 같이 단순하게 만들 수도 있다. required : 필수 값 입니다. range : 범위 오류 입니다. 단순하게 만들면 범용성이 좋아서 여러곳에서 사용할 수 있지만, 메시지를 세밀하게 작성하기 어렵다. 반대로 너무 자세하게 만들면 범용성이 떨어진다. 가장 좋은 방법은 범용성으로 사용하다가, 세밀하게 작성해야 하는 경우에는 세밀한 내용이 적용되도록 메시지에 단계를 두는 방법이 좋음. 예를 들어서 required 라고 오류 코드를 사용한다고 가정해보자. 다..
1. BindingResult?? 스프링이 제공하는 검증 오류를 보관하는 객체이다. 검증 오류가 발생하면 여기에 보관하면 된다. BindingResult 가 있으면 @ModelAttribute 에 데이터 바인딩 시 오류가 발생해도 컨트롤러가호출된다! @ModelAttribute에 바인딩 시 타입 오류가 발생하면? BindingResult 가 없으면 400 오류가 발생하면서 컨트롤러가 호출되지 않고, 오류 페이지로이동한다. BindingResult 가 있으면 오류 정보( FieldError )를 BindingResult 에 담아서 컨트롤러를 정상 호출한다. Field error in object 'item' on field 'itemName': rejected value [null]; codes []; a..
1. 상품 저장 성공 시나리오 2. 상품 저장 실패 시나리오 이런 저런 이유로 data가 누락되거나 잘못된 data가 넘어오는 경우 검증에 실패해야함. 이렇게 검증에 실패한 경우 고객에게 다시 상품 등록 폼을보여주고, 어떤 값을 잘못 입력했는지 알려줘야함. 검증에 실패할 경우 Model에 data를 담아서 상품등록 폼에 다시 전달함. Thymeleaf는 넘어온 data를 가지고 랜더링을 다시함. 3. 검증로직 추가 : addItem. 검증시 오류가 발생하면 errors 에 담아둔다. 이때 어떤 필드에서 오류가 발생했는지 구분하기 위해 오류가 발생한 필드명을 key 로 사용한다. 이후 뷰에서 이 데이터를 사용해서 오류 메시지를 출력 @PostMapping("/add") public String addIte..
1. 메시지 기능. 화면에 보이는 문구가 마음에 들지 않는다고, 상품명이라는 단어를 모두 상품이름으로 고쳐달라고 하면 어떻게 해야할까? 여러 화면에 보이는 상품명, 가격, 수량 등, label 에 있는 단어를 변경하려면 관련있는 모든 화면들을 다 찾아가면서 변경해야 한다. addForm.html , editForm.html , item.html , items.html 귀찮다.. 이렇게 다 바꿔야 하는 이유가 뭘까? 바로 HTML 파일에 메시지가 하드코등 되어있기 때문. 메시지를 한 곳에서 관리하는 기능이 메시지 기능임. 예를들어 message.properties 와 같은 관링용 파일 생성. item=상품 item.id=상품 ID item.itemName=상품명 item.price=가격 item.quant..
1. Thymeleaf 매뉴얼 기본 메뉴얼: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html 스프링 통합 메뉴얼: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html 2. Spring 통합으로 추가되는 기능 스프링의 SpringEL 문법 통합 SpringEL 표현식 ~~.username : 프로퍼티 접근 -> user.getUsername() ~~['username'] -> user.getUsername() ~~.getUsername() -> -> getUsername() 직접 호출. ${@myBean.doSomething()} 처럼 스프링 빈 호출 지원 편리한 폼 관리를 위..
1. 구현 기능 상품 등록 상품 목록 조회 상품 수정 2. 개발 순서 상품 엔티티 개발, 비느지느 로직 추가 상품 repository 상품 service 상품 기능 test 3. Item class 개발 객체 지향 관점으로는 데이터를 가지고 있는 곳 에서 business method가 있는 것이 좋다. 따라서 도메인 주도 설계 시 엔티티 자체가 해결할 수 있는 것은엔티티 안에 메서드를 만듦. 이 때 Setter로 변경하는 것이 아니라 특정 메서드(로직)을 통해 값을 변경해야 한다. 예제의 경우 주문에 따라 재고 수량(stockQuantity)가 변경이된다. stockQuantity는 Item에서 가지고 있다. 따라서 stockQuantity가 변경되는 로직은 Item에 추가하자. Item class - ..
1. H2 DB 설치 및 사용법은 이전 글 참고 H2 Database 설치 및 사용 법 2021.05.22 - [JPA] - H2 In-Memory DB H2 In-Memory DB 1. H2 DB 란? DB는 JAVA기반의 경량화된 관계형 DB file 로 저장하여 실제 DB처럼 유지할 수 있고, memory DB로 사용하여 실제 인스턴스가 동작하는 시점에.. bsh-developer.tistory.com DB 파일 생성 방법 - 최초 url : jdbc:hs~/jpashop --> 파일로 접근 - jpasho.mv.db 파일 생성 확인 (사용자 폴더 경로) - 이후 : jdbc:h2:tcp://localhost/~/jpashop --> 네트워크모드로로 접근
1. proxyMode @Component @Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS) public class MyLogger { private String uuid; private String requestURL; proxyMode = ScopedProxyMode.TARGET_CLASS를 추가. - 적용 대상이 class? --> TARGET_CLASS - 적용 대상이 interface? --> INTERFACE MyLogger를 상속받는 가짜 프록시 객체를 빈으로 등록함. 그럼 mylogger의 클래스를 확인해보자 System.out.println("myLogger = " + myLogger.getClass()); Requ..