👉 Mission. 사용자로부터 폼 데이터를 받고, 이를 컨트롤러에서 확인하시오
DTO(Data Transfer Object)
: 계층 간 데이터 교환을 위해 사용하는 객체이다. 여기서는 간단히 말해, '폼 데이터를 받는 객체' 정도로 말할 수 있다.
DTO는 클라이언트 요청에 포함된 데이터를 담아 서버 측에 전달하고, 서버 측의 응답 데이터를 담아 클라이언트에 전달하는 계층간 전달자 역할을 한다.
1. 폼 작성
파일명 : templates/articles/new.mustache
{{>layouts/header}}
<form class="container" action="/articles/create" method="post">
<div class="mb-3">
<label class="form-label">제목</label>
<input type="text" class="form-control">
</div>
<div class="mb-3">
<label class="form-label">내용</label>
<textarea class="form-control" rows="3"></textarea>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
{{>layouts/footer}}
action=””
method=””
2. 폼 작성 View 반환하는 Controller 만들기
@Controller
public class ArticleController {
//폼 작성 View 보여주기
@GetMapping("/articles/new")
public String newArticleForm(){
return "articles/new";
}
3. 폼 데이터 받을 DTO 객체 만들기
public class ArticleForm {
private String title;
private String content;
//우클릭 > Generate > Constructor : 생성자
public ArticleForm(String title, String content) {
this.title = title;
this.content = content;
}
//우클릭 > Generate > toString() : 출력해서 보기
@Override
public String toString() {
return "ArticleForm{" +
"title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
}
4. 폼 데이터 받고 이를 console에 출력해보는 Controller 내 메소드
@PostMapping("/articles/create")
public String createArticle(ArticleForm form) {
System.out.println(form.toString());
return "";
}
중요. 입력값 이름 지정해주기
입력을 받는 폼의 입력 태그들에게 DTO의 필드명과 동일한 이름(name="(필드명)"
)을 넣어야, 그 폼에 넘겨진 입력 데이터가 DTO에 전달이 됨!!
파일명 : templates/articles/new.mustache
<input type="text" class="form-control" name="title">
...
<textarea class="form-control" rows="3" name="content"></textarea>
Controller는 View와 도메인 Model의 데이터를 주고 받을 때 별도의 DTO 를 주로 사용한다.
도메인 객체를 View에 직접 전달할 수 있지만, 민감한 도메인 비즈니스 기능(도메인 Model의 속성 같은)이 노출될 수 있으며 Model과 View 사이에 의존성이 생기기 때문이라고 한다!
DTO : 계층 간 데이터 교환을 위해 사용하는 객체, 폼 데이터를 받는 객체이다.
action=””
method=””
강의 출처 : https://www.youtube.com/watch?v=_vDACE13Ubc&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=1 [스프링 부트 입문 - 홍팍]
참고 사이트 :
https://tecoble.techcourse.co.kr/post/2021-04-25-dto-layer-scope/ - DTO를 사용해서 데이터를 전달하는 이유에 대해 자세히 쓰여 있으니 참고!!
https://doing7.tistory.com/79 - 도메인 모델 이란?