MVC 패턴은 어플리케이션을 개발할 때 그 요소를 Model, View, Controller 세가지 역할로 구분하는 디자인 패턴이다. 비즈니스 처리 로직(Model) 과 UI 영역(View) 는 서로의 존재를 인지하지 못하고, Controller가 Model과 View의 연결을 담당한다.
Controller는 View로부터 들어온 사용자 요청을 해석하여 Model을 업데이트 하거나 Model로부터 data를 받아 View로 전달하는 작업을 수행한다.
MVC 패턴의 장점은 Model과 View를 분리함으로써 서로의 의존성을 낮추고 독립적인 개발을 가능하게 한다.
Controller는 View와 도메인 Model의 데이터를 주고 받을 때 별도의 DTO를 주로 사용한다.
도메인 객체를 View에 직접 전달할 수 있지만, 민감한 도메인 비즈니스 기능이 외부에 노출될 수 있으며 Model과 View 사이에 의존성이 생기기 때문이다.
TodoSaveDto
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 파라미터가 없는 생성자
@AllArgsConstructor // 파라미터가 있는 생성자
public class TodoSaveDto {
private Long id;
@NonNull
private String userName;
private boolean checkBox;
private String works;
@Builder
public Todo toEntity(){
return Todo.builder()
.id(id)
.checkBox(checkBox)
.works(works)
.build();
}
}
TodoController
public Long todoSave(TodoSaveDto todoSaveDto){
Long id = todoService.save(todoSaveDto);
return id;
}
이렇게 DTO를 사용하면 도메인 Model을 캡슐화하고, UI 화면에서 사용하는 데이터만 선택적으로 보낼 수 있다.
DTO는 클라이언트 요청에 포함된 데이터를 담아 서버 측에 전달하고, 서버 측의 응답 데이터를 담아 클라이언트에 전달하는 계층간 전달자 역할을 한다.
Reference
https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/