🌼DTO(Data Transfer Object)
데이터 전송을 위한 용도의 객체( 요청데이터 & 응답데이터)
🎀Request Body
요청 데이터 중 body에 해당되는 데이터
🌼DTO가 왜 필요할까?
코드의 간결성 : 요청 데이터를 하나의 객체로 전달 받음
데이터 유효성(Validation) 검증의 단순화 : DTO클래스에 유효성검증을 간편하게 포함시킬 수 있음
✔DTO의 사용 목적
HTTP 요청의 수를 줄이기 위함 ➜ 비용감소
✔DTO의 단점
DTO클래스를 만들때 Controller 클래스 안에 DTO클래스를 추가적으로 작성해야하는데
Controller 클래스가 늘어날수록 작성할 클래스들이 두배씩 늘어난다!
@RequestBody 애너테이션-역직렬화
JSON 형식을 Java의 객체로 변환
@ResponseBody 애너테이션-직렬화
Java의 객체를 JSON으로 변환
핸들러 메서드에 @ResponseBody 애너테이션이 붙거나 리턴값이 ResponseEntity일때
내부에서 JSON 형식으로 변환해준다 (리턴값이 ResponseEntity 이면 애너테이션 생략가능)
🌼유효성(Validation) 검증
프론트엔드쪽에서 유효성검사를 하긴 하지만 편의성요인이 더 크다
유효한 값인지 알 수 없기 때문에 서버에서도 유효성 검사를 해주어야 한다
유효성 검증시 build.gradle의 dependencies 항목에 따로 아래의 의존성을
추가해줘야 아래의 애너테이션들을 사용 가능
implementation 'org.springframework.boot:spring-boot-starter-validation'
java.validation 애너테이션
- @NotNull - Null 불가
- @Null - Null만 입력 가능
- @NotEmpty - Null, 빈 문자열 불가
- @NotBlank - Null, 빈 문자열, 스페이스만 있는 문자열 불가 ( String 타입에만 사용 )
- @Size(min =,max =) - 문자열, 배열등의 크기 지정
- @Pattern(regex =) - 정규식을 만족하는가
- @Max(숫자) - 받을 수 있는 최대값 지정
- @Min(숫자) - 받을 수 있는 최솟값 지정
- @Future - 현재 보다 미래의 순간(날짜, 시간)만 받도록 지정
- @Past - 현재 보다 과거의 순간(날짜, 시간)만 받도록 지정
- @Positive - 양수만 가능
- @PositiveOrZero - 양수와 0만 가능
- @Negative - 음수만 가능
- @NegativeOrZero - 음수와 0만 가능
- @Email - 이메일 형식만 가능
[참고] https://en.wikipedia.org/wiki/Email_address - @Digits(integer =, fraction =) - 대상 수가 지정된 정수와 소수 자리 수 보다 작은가?
- @DecimalMax(value =) - 지정된 값(실수) 이하인가?
- @DecimalMin(value =) - 지정된 값(실수) 이상인가?
- @AssertFalse - 값을 false만 받도록 지정
- @AssertTrue - 값을 true만 받도록 지정
각 애너테이션에는 공통적으로 message 속성 적용 가능
( 유효성 검사에 실패할 경우 렌더링 되는 메시지 , @NotNull (messag = "해당 값이 Null입니다.")
🎀유효성 검증 애너테이션이 추가된 DTO 클래스에서 실행시키려면 해당 Controller 클래스의 핸들러 메서드 파라미터에 @Valid 애너테이션을 추가해야한다
🎀핸들러 메서드의 URI path 에서 사용되는 Id의 유효성 제한을 두는 @PathVariable 애너테이션을 추가했을경우 클래스 레벨에 @Validated 애너테이션을 반드시 붙여줘야한다
정규표현식 (Regular Expression)
[Java] 정규표현식(Regular Expression) : 자주 쓰는 정규식 정리(휴대전화, 이메일, 비밀번호 등) (tistory.com)
Custom Validator
애너테이션을 직접 만들어서 유효성 검증에 적용 가능하다
정규표현식은 성능적인 면에서 비싼 비용을 써야할 수도 있다
모든 로직을 정규표현식위주로 작성하는건 좋지않음
Custom Validato 구현하기
1.Custom Anntation 정의
2. 정의한 Custom Annotation에 바인딩 되는 Custom Validator 구현
3. 유효성 검증이 필요한 DTO 클래스의 멤버 변수에 Custom Annotation 추가
'개발공부🌷 > Spring MVC' 카테고리의 다른 글
Spring MVC JPA (0) | 2023.11.28 |
---|---|
Spring MVC Data JPA (0) | 2023.11.27 |
Spring MVC 예외처리 (0) | 2023.11.23 |
Spring MVC 서비스계층 ,Mapper (0) | 2023.11.23 |
Spring MVC API 계층 1 (0) | 2023.11.22 |