728x90
반응형
SignUpRequestDto
@Data
@NoArgsConstructor
public class SignUpRequestDto {
private String email;
private String password;
}
👉 이러한 DTO에서 습관적으로 @NoArgsConstructor 를 붙여서 사용하곤 했는데,
사용하는 이유를 제대로 알지 못해서 이번 기회에 제대로 알아보고자 한다.
우선, 기본 생성자가 필요한 이유를 알기 위해서는
스프링이 어떻게 Dto를 JSON으로 맵핑하는지 그 원리를 알아야 한다.
스프링은 바로 Jackson 라이브러리의 ObjectMapper를 사용하여 JSON으로 맵핑한다!
ObjectMapper는 직렬화(serialize), 역직렬화(deserialize)를 수행하는데,
이때 직렬화는 Java Object → JSON으로 파싱하는 것,
역직렬화는 JSON → Java Object로 파싱하는 것을 의미한다.
컨트롤러에서 DTO를 @RequestBody를 통해 가져올 때, 바인딩을 ObjectMapper가 수행한다.
이렇게 ObjectMapper가 직렬화, 역직렬화를 수행하여 맵핑할 때,
DTO를 DTO의 기본 생성자를 이용하여 생성하게 된다.
이러한 과정에서 DTO의 기본 생성자가 없다면, 맵핑 오류가 나는 것이다.
※ 추가적으로, DTO의 필드들은 ObjectMapper의 Setter 또는 Getter로 가져온다!
또한, Setter로 DTO 필드들에 주입을 하는 것이 아니라 reflection이라는 기능을 통해
값을 주입하므로 Setter는 딱히 필요가 없다.
따라서, Getter만 생성하는 것이 좋다!
728x90
반응형
'하루 작성 Today Project > Study' 카테고리의 다른 글
@CreatedDate Format 변경하기 (0) | 2022.11.02 |
---|---|
LocalDateTime 주요 메소드 정리 (0) | 2022.11.02 |
Try-with-resource를 통한 자원 해제 처리 (0) | 2022.11.02 |