
상품 등록/수정 시 폼 데이터를 담는 DTO
빈 문자열 허용 X
null이거나 공백이면 검증 실패
null 허용 X
0은 가능
ModelMapper는 Java 객체 간 자동 매핑을 도와주는 매핑 자동화 라이브러리이다.
class Item {
private String itemName;
private int price;
// ... 기타 필드
}
class ItemFormDto {
private String itemName;
private int price;
// ... 기타 필드
}
ModelMapper modelMapper = new ModelMapper();
Item item = modelMapper.map(itemFormDto, Item.class);
public Item creatItem() {
return modelMapper.map(this, Item.class);
}
// 예시
ItemFormDto dto = new ItemFormDto();
dto.setItemName("라면");
dto.setPrice(1000);
Item item = dto.creatItem(); // 변환됨
이름과 타입이 같고 getter/setter가 있어야 같은 이름의 필드끼리 자동으로 복사된다.
다르다면 ModelMapper의 TypeMap, PropertyMap 또는 커스텀 매퍼를 사용한다.

상품 목록을 리스트 형태로 화면에 보여줄 때 사용하는 조회 전용 DTO
Querydsl과 함께 사용할 때 DTO를 타입 안전하게 조회하기 위해 사용한다.
이 생성자가 있어야 Querydsl이 Q 클래스를 만들 수 있다.
| DTO 이름 | 사용 목적 |
|---|---|
ItemDto, ItemFormDto | 상품 등록/수정에 사용 (폼 입력) |
MainItemDto | 메인 페이지에서 상품 목록 조회에 사용 |
ItemDto는 입력값 검증용 (@Notnull, @NotBlank)도 많고 이미지 리스트, 상태값 등 입력과 관련된 모든 정보를 다 담는다.
MainItemDto는 조회만을 위한 최소한의 정보만 담고 있어 불필요한 데이터는 제외된다.
조회 시 ItemDto를 그대로 사용하면 DB에서 모든 필드를 불러오게 된다. Dto를 나눔으로써 필요한 데이터만 가져오게 되어 성능이 향상된다.
등록용 DTO에는 민감하거나 관리자 전용 정보가 들어갈 수 있다. (등록일, 수정일, 작성자 등)
조회 전용 DTO는 외부에 보여줘도 되는 안정한 정보만 포함한다.
등록/수정 DTO 구조가 복잡해지더라도, 조회 DTO는 단순하게 유지할 수 잇다.
메인 페이지나 리스트 화면에서 보여주는 정보가 바뀌더라도 조회 전용 DTO만 수정하면 된다. (등록/수정용 DTO에는 영향 X)

회원가입 시 사용자로부터 입력받는 정보를 담는 DTO 클래스
이메일 형식 검증 (예: aaa@bbb.com 형태)
작성한 Dto외에도 ItemDto, ItemImgDto, ItemSearchDto가 있는데 이해하는데 크게 어려움이 없어 작성하지 않았다. 처음 보는 개념들, 헷갈리는 것들만 추려서 정리해보았다.