1.DTO(Data Transfer Object) |
-마틴 파울러(Martin Fowler)가 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나
-클라이언트에서 서버 쪽으로 전송하는 요청 데이터를 전달 받을 때, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터를 전송하기 위한 용도로 사용
-DTO가 필요한 이유
(1)클라이언트의 Request Body를 하나의 객체로 모두 전달 받을 수 있기때문에 코드 자체가 간결해짐
(2)Request Body의 데이터 유효성(Validation) 검증이 단순해Request Body의 데이터 유효성(Validation) 검증이 단순해짐
-DTO 클래스 적용을 위한 코드 리팩토링 절차
(1)정보를 전달 받을 DTO 클래스를 생성
*전달 받는 각 데이터 항목들을 DTO 클래스의 멤버 변수로 추가
(2)클라이언트 쪽에서 전달하는 요청 데이터를 @RequestParam 애너테이션으로 전달 받는 핸들러 메서드를 찾기
*Request Body가 필요한 핸들러는 HTTP POST, PATCH, PUT 같이 리소스의 추가나 변경이 발생할 때 이므로, 결국 @PostMapping, @PatchMapping 애너테이션이 붙은 핸들러 메서드를 찾는것과 동일
(3)@RequestParam 쪽 코드를 DTO 클래스의 객체로 수정
(4)Map 객체로 작성되어 있는 Response Body를 DTO 클래스의 객체로 변경
-DTO 클래스의 단점 : Controller 클래스가 늘어남에 따라 DTO 클래스가 두 배(ex. xxxxPostDto + xxxxPatchDto)씩 늘어남(이후 코스 후반부에 개선 예정)
+DTO 클래스를 만들 때 주의해야 할 부분 : 멤버 변수 이외에 각 멤버 변수에 해당하는 getter 메서드가 있어야 함
*getter 메서드가 없으면 Response Body에 해당 멤버 변수의 값이 포함되지 않는 문제가 발생(setter는 필요에 따라)
*현업에서는 lombok이라는 라이브러리를 이용해서 getter/setter 메서드를 내부에서 자동으로 만들어 사용
+직렬화(Serialization) : 서버 쪽에서 클라이언트에게 응답 데이터를 전송하기 위해서 DTO 같은 Java의 객체를 JSON 형식으로 변환하는 것
+역직렬화(Deserialization) : 클라이언트 쪽에서 JSON 형식의 데이터를 서버 쪽으로 전송하면 서버 쪽의 웹 애플리케이션은 전달 받은 JSON 형식의 데이터를 DTO 같은 Java의 객체로 변환하는 것
2.DTO 유효성(Validation) 검증 |
-자바스크립트로 전송되는 데이터는 브라우저의 개발자 도구를 사용해서 브레이크포인트(breakpoint)를 추가한 뒤에 얼마든지 그 값을 조작할 수 있기 때문에 프런트엔드 쪽에서 유효성 검사를 진행했다고 하더라도 서버 쪽에서 한번 더 유효성 검사를 진행해야함
-Jakarta Bean Validation은 애너테이션 기반 유효성 검증을 위한 표준 스펙으로, Controller 로직에서 유효성 검증 로직을 분리할 수 있음
-Jakarta Bean Validation 스펙을 구현한 구현체는 Hibernate Validator임
-Spring에서 지원하는 @Validated 애너테이션을 사용하면 쿼리 파라미터(Query Parameter 또는 Query String) 및 @Pathvariable에 대한 유효성 검증을 진행할 수 있음
-유효성 검증 애너테이션 종류
@NotBlank
@NotEmpty
@NotNull
@Size
@Email
@Pattern
-이 외에도 원하는 목적에 맞는 애너테이션을 직접 만들어서 유효성 검증에 적용할 수 있음(Custom Validator)
-정규 표현식(Regular Expression, regexp) : 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어
●‘^’은 문자열의 시작을 의미
●‘$’는 문자열의 끝을 의미
●‘*’는 ‘*’ 앞에 평가할 대상이 0개 또는 1개 이상인지를 평가
●‘\s’는 공백 문자열을 의미
●‘\S’ 공백 문자열이 아닌 나머지 문자열을 의미
●‘?’는 ‘?’ 앞에 평가할 대상이 0개 또는 1개인지를 의미
●‘+’는 ‘+’ 앞에 평가할 대상이 1개인지를 의미
**https://www.w3schools.com/java/java_regex.asp
Java Regular Expressions
W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.
www.w3schools.com
-내용 출처 : code states
'부트캠프' 카테고리의 다른 글
Spring MVC - 예외 처리 (0) | 2023.02.17 |
---|---|
Spring MVC - Service 계층 (0) | 2023.02.17 |
Spring MVC - API계층 part 1 (0) | 2023.02.13 |
Spring Framework 핵심 개념 - AOP (0) | 2023.02.09 |
Spring Framework 핵심 개념 - DI (0) | 2023.02.07 |