전체 글
-
Optional 클래스Java 2023. 9. 8. 20:30
java.util.Optional 클래스 Optional 클래스는 Integer나 Double 클래스처럼 'T'타입의 객체를 포장해 주는 래퍼 클래스(Wrapper class)입니다. public final class Optional { /** * If non-null, the value; if null, indicates no value is present */ private final T value; } 이러한 Optional 객체를 사용하면 예상치 못한 NullPointerException 예외를 제공되는 메소드로 간단히 회피할 수 있습니다. 즉, 복잡한 조건문 없이도 널(null) 값으로 인해 발생하는 예외를 처리할 수 있게 됩니다. Optional 객체의 생성 of() 메소드나 ofNullabl..
-
[김영한 스프링] 31. 로그인 처리1 쿠키, 세션 - 로그인 요구사항 & 프로젝트 생성 & 세팅Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 8. 02:21
로그인 요구사항 홈 화면 - 로그인 전 회원 가입 로그인 홈 화면 - 로그인 후 본인 이름(누구님 환영합니다.) 상품 관리 로그 아웃 보안 요구사항 로그인 사용자만 상품에 접근하고, 관리할 수 있음 로그인 하지 않은 사용자가 상품 관리에 접근하면 로그인 화면으로 이동 회원 가입, 상품 관리 홈 화면 - 로그인 전 홈 화면 - 로그인 후 회원 가입 로그인 상품 관리 프로젝트 생성 이름 변경 다운로드한 파일 중 "login-start"를 원하는 곳으로 이동 후 "login"으로 이름변경 프로젝트 열기 build.gradle 열기 설정 설정 -> 파일 인코딩 -> 프로퍼티 파일에 대한 디폴트 인코딩을 UTF-8로 변경 설정 -> Gradle -> Intelij IDEA로 변경 실행 ItemServiceAppl..
-
[김영한 스프링] 30. 검증2 Bean Validation - HTTP 메시지 컨버터Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 7. 23:53
Bean Validation - HTTP 메시지 컨버터 @Valid, @Validated는 HttpMessageConverter(@RequestBody)에도 적용할 수 있다. 참고 @ModelAttribute는 HTTP 요청 파라미터(URL 쿼리 스트링, POST Form)를 다룰 때 사용한다. @RequestBody는 HTTP Body의 데이터를 객체로 변환할 때 사용한다. 주로 API JSON 요청을 다룰 때 사용한다. ValidationItemApiController 생성 package hello.itemservice.web.validation; import hello.itemservice.web.validation.form.ItemSaveForm; import lombok.extern.slf4j...
-
[김영한 스프링] 29. 검증2 Bean Validation - Form 전송 객체 분리 프로젝트 준비 V4 & 소개 & 개발Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 7. 23:18
Form 전송 객체 분리 - 프로젝트 준비 V4 ValidationItemControllerV4 컨트롤러 생성 ValidationItemControllerV3를 ValidationItemControllerV4로 복붙 validation/v3를 validation/v4로 모두 변경 템플릿 파일 복사 v3를 v4로 복붙 v4폴더를 선택하고 Ctrl + Shift + R을 눌러 하위 파일의 validation/v3를 validation/v4로 모두 변경 실행 Form 전송 객체 분리 - 소개 ValidationItemV4Controller 실무에서는 groups를 잘 사용하지 않는데, 그 이유가 다른 곳에 있다. 바로 등록 시 폼에서 전달하는 데이터가 Item 도메인 객체와 딱 맞지 않기 때문이다. 소위 "H..
-
[김영한 스프링] 28. 검증2 Bean Validation - 수정에 적용 & 한계 & groupsSpring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 7. 22:05
Bean Validation - 수정에 적용 ValidationItemControllerV3 - edit() 변경 @PostMapping("/{itemId}/edit") public String edit(@PathVariable Long itemId, @Validated @ModelAttribute Item item, BindingResult bindingResult) { // 특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("t..
-
[김영한 스프링] 27. 검증2 Bean Validation - 스프링 적용 & 에러 코드 & 오브젝트 오류Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 6. 01:27
Bean Validation - 스프링 적용 ValidationItemControllerV3 코드 수정 package hello.itemservice.web.validation; import hello.itemservice.domain.item.Item; import hello.itemservice.domain.item.ItemRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.Bind..
-
[김영한 스프링] 26. 검증2 Bean Validation - 소개 & 시작 & 프로젝트 준비 V3Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 5. 21:30
Bean Validation - 소개 검증 기능을 지금처럼 매번 코드로 작성하는 것은 상당히 번거롭다. 특히 특정 필드에 대한 검증 로직은 대부분 빈 값인지 아닌지, 특정 크기를 넘는지 아닌지와 같이 매우 일반적인 로직이다. 다음 코드를 보자. public class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 1000000) private Integer price; @NotNull @Max(9999) private Integer quantity; //... } 이런 검증 로직을 모든 프로젝트에 적용할 수 있게 공통화하고, 표준화한 것이 바로 Bean Validation이다. Bean..
-
[김영한 스프링] 25. 검증1 Validation - Validator 분리1, 2Spring/스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 2023. 9. 2. 02:13
Validator 분리1 목표 복잡한 검증 로직을 별도로 분리하자. 컨트롤러에서 검증 로직이 차지하는 부분은 매우 크다. 이런 경우 별도의 클래스로 역할을 분리하는 것이 좋다. 그리고 이렇게 분리한 검증 로직을 재사용할 수도 있다. ItemValidator main/java/hello/itemservice/web/validation/ItemValidator 생성 package hello.itemservice.web.validation; import hello.itemservice.domain.item.Item; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.spri..