-
Notifications
You must be signed in to change notification settings - Fork 0
DTO & Validation
English ID edited this page Dec 19, 2024
·
2 revisions
// `final` 클래스로 선언합니다.
public final class BoardCommandDto {
// private 생성자만 선언합니다.
private BoardCommandDto() {}
// 이곳에 내부 클래스로 각 요청/응답에 대한 DTO를 선언합니다.
}
유틸리티 클래스처럼 다음 선언 방식을 채택합니다.
-
final
클래스로 선언합니다 -
private
생성자만 선언합니다.
이 클래스의 용도 외 사용을 설계상 막아 둘 수 있습니다.
이 두 조치를 빠뜨려도 큰 실수를 유발하지 않습니다. 발견한 사람이 추후 추가합니다.
public final class BoardCommandDto {
private BoardCommandDto() {}
// All request DTOs listed below
// (here)
// All response DTOs listed below
// (here)
}
- 여러 기능의 Request와 Response가 번갈아 나오면 원하는 DTO를 눈으로 탐색하는 과정이 느려집니다.
- IDE가 탐색을 보조하지만, 육안으로 탐색하기 편한 배치는 높은 집중 요구로 인한 심적 피로도를 덜어 줍니다.
// ⚠️ Uncompleted example
public record BoardCreateRequest(String title, String content) {}
Record는 생성자와 클래스를 동시에 선언하며, 생성자 파라미터에 담은 것들이 동시에 필드입니다.
모든 필드는 불변(immutable)입니다.
- DTO는 전달 과정에서 의미와 내용이 변질되지 않는 것을 지향하기로 합니다.
즉, DTO는 불변 객체를 베스트 프랙티스의 요건 중 하나로 봅니다. - DTO 접미사는 Request 또는 Response로 합니다. (suffix는 논의 중이므로 채택이 바뀔 수 있습니다.)
- DTO는 접미사로 DTO를 붙이지 않습니다. 대신 다른 단어가 이 의미를 대신 전달합니다.
@Builder
public record BoardCreateRequest(
@NotNull(message = "제목을 입력하십시오.")
@Size(min = 3, message = "제목은 세 글자 이상 입력하십시오.")
@Size(max = 50, message = "제목은 최대 50글자입니다.")
String title,
@NotNull(message = "본문을 입력하십시오.")
@Size(min = 3, message = "본문을 세 글자 이상 입력하십시오.")
String content
) {}
- 파라미터에 많은 애노테이션이 있으므로, 섹션 구분을 위해 파라미터 사이에 빈 줄(single blank line)을 둡니다.
참고: 유효성 오류 응답 메시지는 추후 다국어를 지원할 예정입니다. 관련 설정과 예제는 다음 링크를 참고하세요:
- Home
- Code Styles
- Controller
- Service
- Interface: Use Cases
- Command Service
- Query Service
- Repository (Spring Data JPA Only)
- CQRS
- Command Repository
- Query Repository
- Domain
- Enum Status
- Base Entity
- UUID Base Entity
- JPA Entity
- Error Code & Exceptional Response
- Interface Error Code
- Enum Error Code (impl. Error Code)
- Custom Exception
- Extended Custom Exception
- 상수 관리
- Static Final 기호상수
- Enum을 통한 상수 관리
- 프로젝트 보조 도구 활용
- 작업 환경 및 운영 환경
- Docker Compose (작업 환경)
- Flyway (작업 환경, 운영 환경의 일치 필요)
- 작업 환경 및 운영 환경