DTO
DTO란?
- Data Transfer Object의 약자로 엔터프라이즈 애플리케이션 아키텍처 패턴 중 하나이다.
- 데이터를 주고받을 때 사용하는 객체 (클라이언트와 주고 받을 때)
- 받을 때 사용되는 DTO와 줄 때 사용하는 DTO는 같으면 안된다. ( 원하는 것만 줘야함 )
DTO가 필요한 이유
- 코드의 간결성
- 요청 데이터를 하나의 객체로 전달받는 역할을 해준다. - 유효성 검증의 단순화
- 유효성 검증 로직을 DTO 클래스로 빼내어 핸들러 메서드의 간결함을 유지할 수 있다.
DTO의 사용 목적
- 가장 중요한 목적은 비용이 많이 드는 작업인 HTTP 요청의 수를 줄이기 위함
- 도메인 객체와의 분리
GET 메서드에는 DTO 사용할 수 없음 ( Body에 데이터를 못담기 때문에 )
JSON 직렬화와 역직렬화
- JOSN 형식의 데이터를 DTO 같은 Java 객체로 변환하는데 이를 역직렬화라고 한다.
- 반대로 Java의 객체를 JSON 형식으로 변환하는 것을 직렬화라고 한다.
DTO 클래스의 대표적인 단점
- Controller 클래스가 늘어남에 따라 HTTP 메서드 별 DTO도 추가적으로 작성해야 한다.
- 이 부분은 공통된 멤버 변수의 추출 및 내부 클래스를 이용해서 개선이 가능하긴 하다. 추후 예정
유효성 검증
프론트엔드 영역에서 유효성 검사를 진행해도 백엔드에서 유효성 검증을 다시 해야하는 이유
- 자바스크립트로 전송되는 데이터는 브라우저의 개발자 도구를 사용해서 브레이크포인트를 추가한 뒤에 얼마든지 그 값을 조작할 수 있기 때문에 프론트엔드 쪽에서 유효성 검사를 진행했어도 서버 쪽에서 한 번 더 유효성 검사를 진행해야한다.
유효성 검증을 위한 어노테이션
- @Email, @NotBlank, @Pattern 등
@Valid 없으면 @Email 이 유효성 검증 안함 ( @Email 뿐만 아니라 DTO를 사용하는 부분에 @Valid를 붙여줘야한다.)
@Email 은 빈 문자열을 대응 못하기 때문에 @NotBlank 써야함
@PathVariable에 유효성 검증을 하는 경우에는 컨트롤러 클래스 상단에 @Validated 어노테이션을 붙여줘야한다.
@NotEmpty // null X, 빈문자열 X, " " O
@NotBlank // null X, 빈문자열 X, " " X // NotBlank가 문자열 중간의 공백이나 앞뒤의 공백을 인식 못함
Request에 필요한 데이터는 @Setter와 기본 생성자가 있거나 전체 생성자가 있어야함
Response에 필요한것은 전체 생성자가 있어야함
'공부기록 > Spring' 카테고리의 다른 글
| [Spring] Spring Data JDBC를 통한 데이터 액세스 계층 구현 (0) | 2025.01.15 |
|---|---|
| [Spring] JDBC 기반 데이터 액세스 계층 / 25.01.13 (0) | 2025.01.13 |
| [Spring MVC] 서비스 계층 /25.01.08 (0) | 2025.01.09 |
| [Spring] API 계층 Controller(2/2) (0) | 2025.01.07 |
| [Spring] @SpringBootApplication의 역할 (0) | 2025.01.06 |