스프링 부트, 입문!

준비중..

스프링 부트, 입문!

기본 게시판 만들기!

08 폼(form) 데이터 주고 받기

# 폼(form) 데이터 주고 받기 ## 미션 --- 데이터 전송 미션! 폼 태그를 제출(submit)하고, ![클라우드스터딩-스프링부트-폼(form)-데이터-전달](https://i.imgur.com/HxeExTB.png) 그 값을 확인하시오. ![클라우드스터딩-스프링부트-폼(form)-데이터-받기-로그](https://i.imgur.com/hHRrNfu.png) ## 개념 --- #### ⭐️ HTTP 프로토콜 리뷰 - GET: 데이터 조회 요청 - POST: 데이터 생성 요청 - PUT/PATCH: 데이터 수정 요청 - DELETE: 데이터 삭제 요청 ![클라우드스터딩-스프링-부트-HTTP-동작-메소드-종류](https://i.imgur.com/EeWOkhh.png) #### ⭐️ form 태그 주 속성 데이터 전송을 위한 form 태그. 주요 속성은 "method"와 "action"이다. ``` <!-- method: HTTP의 요청 방식을 결정. get/post 가능 --> <!-- action: 데이터가 전송 될 도착지 URL --> <form method="post", action="/articles"> ... </form> ``` #### ⭐ DTO 폼 데이터를 서버에서 사용하려면, 객체로 만들어야 한다. 이를 위해 DTO(Data Transfer Object)가 필요하다. ![클라우드스터딩-스프링-부트-DTO란](https://i.imgur.com/Ve3lVW3.png) #### ⭐ 데이터 로그 남기기 서버는 24시간 돌아간다. 문제는 언제, 어떤 문제가 발생할 지 모른다는 것. 이러한 이유로 데이터 로깅(logging)은 필수다. 이는 자동차의 블랙박스와 같다. 문제 발생까지의 상황을 데이터로 기록하는 것이다. 이를 분석하여 문제 발생 원인과, 그 해결책을 마련할 수 있다. ![클라우드스터딩-스프링-부트-데이터-로깅](https://i.imgur.com/mrjCBPF.png) ## 튜토리얼 --- #### ⭐ 사용 파일 ![클라우드스터딩-스프링부트-폼(form)-데이터-전달-구조](https://i.imgur.com/OAf3FRM.png) #### ⭐ 뷰 페이지 1) form 태그 정보 추가: articles/new.mustache ``` {{>layouts/header}} <div class="jumbotron"> <h1>Article 등록</h1> <hr> <p>articles/new.mustache</p> </div> <!-- Form 태그, 아래 두 속성을 추가! method: HTTP 방식을 설정(GET/POST/...) action: 데이터를 보낼 url 주소지 --> <form class="container" method="post" action="/articles"> <div class="form-group"> <label for="title">제목</label> <!-- name="title" 추가, DTO의 필드명과 일치해야 함! --> <input name="title" type="text" class="form-control" id="article-title" placeholder="제목을 입력하세요"> </div> <div class="form-group"> <label for="content">내용</label> <!-- name="content" 추가, DTO의 필드명과 일치해야 함! --> <textarea name="content" class="form-control" id="article-content" placeholder="내용을 입력하세요" rows="3"></textarea> </div> <button type="submit" class="btn btn-primary">제출</button> </form> {{>layouts/footer}} ``` #### ⭐ 컨트롤러 2) 폼 태그 처리 메소드 추가: controller/ArticleController ``` @Slf4j // 로깅(logging) 기능 추가! Lombok 플러그인 설치 필요! @Controller public class ArticleController { ... @PostMapping("/articles") // Post 방식으로 "/articles" 요청이 들어오면, 아래 메소드 수행! public String create(ArticleForm form) { // 폼 태그의 데이터가 ArticleForm 객체로 만들어 짐! log.info(form.toString()); // ArticleForm 객체 정보를 확인! return "redirect:/articles"; // 브라우저를 "/articles" url로 보냄! } } ``` #### ⭐ DTO 3) 데이터 전송 객체 만들기: "dto/ArticleForm" ``` package com.example.myblog.dto; public class ArticleForm { private String title; private String content; public ArticleForm(String title, String content) { this.title = title; this.content = content; } public String getTitle() { return title; } public String getContent() { return content; } public void setTitle(String title) { this.title = title; } public void setContent(String content) { this.content = content; } @Override public String toString() { return "ArticleForm{" + "title='" + title + '\'' + ", content='" + content + '\'' + '}'; } } ``` #### ⭐ Lombok 플러그인 설치 4) Ctrl + Shift + A > plugins ![클라우드스터딩-스프링-부트-롬복-플러그인-설치-lombok-plugin](https://i.imgur.com/cXFFROu.png) #### ⭐ 결과 확인 5) 폼 데이터 전송 ![클라우드스터딩-스프링부트-폼(form)-데이터-전달](https://i.imgur.com/HxeExTB.png) 6) 서버 로그 확인 ![클라우드스터딩-스프링부트-폼(form)-데이터-받기-로그](https://i.imgur.com/hHRrNfu.png) 7) 혹시 한글이 깨진다면? 인텔리제이 VM, 프로젝트 파일 인코딩, 톰캣의 인코딩을 "utf-8"로 적용하자. ## 훈련하기 --- - Article 폼에 작성자(author)를 추가하고, 이를 DTO로 전달 받아, 로그로 확인하시오. - 작성한 프로젝트 코드를 저장(commit) 하고, 깃허브에 업로드(push) 하시오. ## 면접 준비 --- - 폼 태그의 역할? - DTO는 무엇이고, 왜 필요할까? - 데이터 로깅은 왜 사용? - Lombok은 왜 쓸까?