본문 바로가기
백엔드/Springboot

0부터 시작하는 스프링부트 도전기 #2. Create

by 킁킁잉 2024. 11. 23.

프로젝트 버전 변경

Spring Initializr에서 프로젝트 생성 때 3.4.0 버전으로 생성하였는데, 교재는 3.1.0 버전을 사용하여 원활한 진행을 위해 스프링부트 버전 변경을 해주었습니다. 스프링부트 버전은 build.gradle 파일을 수정하여 쉽게 변경할 수 있습니다.

스프링부트 버전

 

위 부분을 3.1.0으로 변경하고, 옆에 나타나는 코끼리 아이콘을 클릭하면 버전 변경 완료입니다. 

 

코끼리 버튼

 

 


폼 데이터

HTML 요소인 <form> 태그에 실려 전송되는 데이터

 

<form> 태그는 웹 브라우저에서 서버로 데이터를 전송할 때 사용합니다. 어디로(where), 어떻게(how) 보낼지 등을 적어서, 서버에 전송하는 것입니다.

 

DTO

Data Transfer Object, 데이터를 전달하는 객체

태그에 실어 보낸 데이터는 서버의 컨트롤러가 객체에 담아 받는데, 이 객체를 DTO라고 합니다. DTO로 데이터를 받아, 데이터베이스에 저장합니다. 

 


입력 폼 실습

1. 폼 페이지 생성

resource > templates > articles 하위에 new.mustache 파일 생성하고, 폼 작성

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Document</title>
</head>
<body>
    <form>
        <input type = "text">
        <textarea></textarea>
        <button type = "submit" >Submit</button>
    </form>
</body>
</html>

 

java > 프로젝트명 폴더 > controller 하위에 ArticlesController 클래스 생성하고 코드 작성

package com.example.firstproject.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class ArticleController {
    @GetMapping("/articles/new")
    public String newArticleForm() {
        return "articles/new";
    }
}

 

localhost8080:/articles/new 접속하면 아래와 같은 화면이 나옵니다.

일단 스타일링은 생략하고, 폼 데이터 전송 기능부터 구현해보겠습니다.

 

2. 폼 데이터 전송 기능

만든 폼에는 입력 창과, 버튼이 있지만 텍스트를 입력하고 버튼을 아무리 눌러봤자 아무런 동작도 하지 않습니다. 입력한 텍스트들을 전송하려면, action, method 속성을 설정하여 전송 주소와 전송 방식을 설정해주어야 합니다.

 

먼저 폼 태그에 action, method 속성을 추가해줍니다.

  <form action="/articles/create" method = "post">

 

그리고, controller를 수정해줍니다.

@Controller
public class ArticleController {
    @GetMapping("/articles/new")
    public String newArticleForm() {
        return "articles/new";
    }

    @PostMapping("/articles/create")
    public String createArticle() {
        return "";
    }
}

 

@PostMapping()을 사용하여 URL 요청을 받고, 이에 대한 메서드와 반환값을 추가해주었습니다.

 

3. DTO 생성

컨트롤러에서는 폼 데이터를 DTO에 담아 받기 때문에, DTO를 생성해 주어야 합니다.

 

프로젝트명 폴더 > dto 패키지를 생성하고, ArticleForm 클래스를 추가해줍니다.

package com.example.firstproject.dto;

public class ArticleForm {
    private String title;
    private String content;

    //title, content를 필드에 저장하는 생성자
    public ArticleForm(String title, String content) {
        this.title = title;
        this.content = content;
    }

    @Override
    public String toString() {
        return "ArticleForm{" +
                "title='" + title + '\'' +
                ", content='" + content + '\'' +
                '}';
    }
}

 

4. 폼 데이터 DTO에 담고,  입력폼과 연결하기

 public String createArticle(ArticleForm form) {
        System.out.println(form.toString());
        return "";
    }

 

ArticleForm의 form 객체를 creatArticle()의 매개변수로 받아옵니다. 그리고 입력 폼에서 데이터 필드(title, content)를 지정하여 입력 폼과 DTO 필드를 연결해줍니다.

 

 <form action="/articles/create" method = "post">
        <input type = "text" name = "title">
        <textarea name = "content"></textarea>
        <button type = "submit" >Submit</button>
 </form>

 

 

입력 폼에 텍스트를 입력하고, [Submit]을 누르면, IntelliJ의 터미널에서 데이터가 출력되는 것을 확인할 수 있습니다.

 

 


컨트롤러에서 폼 데이터를 받아 DTO에 담는 코드를 작성해보았습니다. 간단한 실습이지만, form, controller, DTO간 관계 때문에 조금 더 정리가 필요할 것 같습니다...