● dto 란?
dto는 data transfer object로 계층간 데이터 전송시 도메인 대신 사용되는 객체이다.
dto는 비지니스 로직을 가져선 안되고 데이터와 데이터에 대한 getter, setter만 가진다.
● dto 사용이유
dto를 사용하지않고 도메인 entity을 v바로 전달하게 되면
1. 도메인 entity 데이터가 전부 넘어가기 때문에 뷰단에서 너무 많은 정보를 알게 된다.
2. 거쳐가는 레이어에서 entity에 접근이 가능 하므로 도메인 entity가 의도와 다르게 변경 될 수 있다.
3. view계층과 db계층 역할을 분리 해준다.
주문 생성시 request값에 대한 dto
@Getter
@NoArgsConstructor
public class OrderRequestDto{
private long orderId;
private int count;
private int orderPrice
}
@NoArgsConstructor = 모든 필드 값 생성자 자동생성 : dto만들어 줄때 생성자 기본 사용하기 때문
request용 dto는 @Noempty @Size 등으로 입력값 검증 할 수 있고
response용 dto는 @Setter 사용하지 않고 생성자 이용해 값을 할당한다.
● mapper 란?
위에서 설명한 dto로의 변환은 어디서 해줘야하나?
1. controller에서 변환 -> post request: dto를 entity로 변환해 service로, get: service가 준 entity dto로 변환해 반환
2. controller, servicer 에서 변환 -> 비슷한 맥락
이렇게 하면 controller, service에 코드 늘어남 -> controller와 service 사이에 mapper 만들어 해결
● mapStruct
변환시 mapStruct 라이브러리 사용
@Mapper(componentModel = "spring")
public interface OrderMapper{
Order toEntity(OrderRequestDto dto)
OrderResponseDto toDto(Order entity)
}
toEntity : dto를 entity로
toDto : entity를 dto로
'Spring' 카테고리의 다른 글
| [스프링] 스프링빈 사용이유 (0) | 2024.01.13 |
|---|---|
| [스프링] 스프링빈이 없다면? (0) | 2023.12.04 |
| [스프링] Security (0) | 2023.08.05 |
| [스프링] 트랜잭션 (0) | 2023.08.04 |
| [스프링] AOP (0) | 2023.08.02 |