@PostMapping

이건희·2023년 3월 24일
0

Spring Post

Spring 강의를 듣던 도중, Post Method를 사용할 때 이해가 되지 않는 부분이 있었었다. 밑에 코드로 문제 상황을 살피겠다.

@PostMapping(value = "/members/new")
public String create(MemberForm form) {
    
   Member member = new Member();
   member.setName(form.getName());
   memberService.join(member);
   return "redirect:/";
}
public class MemberForm {
    
    private String name;
    
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}   
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<div class="container">
    <form action="/members/new" method="post"> //사용자로부터 입력받음
        <div class="form-group">
            <label for="name">이름</label>
            <input type="text" id="name" name="name" placeholder="이름을 입력하세요">

        </div>
        <button type="submit">등록</button>
    </form>
</div> <!-- /container -->
</body>
</html>
  • 아래는 해당 Html을 실행시킨 결과이다.

이렇게 코드가 있을 때, 해당 url(/members/new)에서 등록 버튼을 클릭하면 자동적으로 create 함수의 인자인 MemberForm 객체가 만들어지고 MemberForm의 클래스 변수인 name에 자동적으로 html에서 넘어간 값이 저장된다는 것이였다.
강의에서 제대로 설명을 해주지 않아 혼자서는 코드를 이해하기가 힘들어 주변 지인에게 물어보고 인터넷을 찾아봤다.

결과는 생각보다 단순했다.
name = "변수명"을 일치시켜주면 자동적으로 해당 객체 생성 후 "변수명"과 같은 변수에 값을 넣어준다.
해당 값이 없을 경우 변수 기본값이 자동적으로 입력된다.

더 자세한 예시를 보며 자세히 이해해보자.

// DTO
public class CuteDTO {
    private String first; //변수명1
    private String second; //변수명2
    private Integer third; //변수명3
    
    // Getter and Setter
 }
// HTML...
<form name="cuteForm" action="/cutePage" method="post">
    <input type="text" name="first" value="테스트 입력1"> //변수명 일치1
    <input type="text" name="second" value="테스트 입력2"> //변수명 일치2
    <input type="password" name="third" value="1234567"> //변수명 일치3
    <input type="submit" value="전송!">
</form>
import CuteDTO;

@Controller
public class CuteController {
    
    @PostMapping("/cutePage")
    public String cutePage(CuteDTO cuteDTO) {
        String a = cuteDTO.getFirst; // a = 테스트 입력1
        String b = cuteDTO.getSecond; // b = 테스트 입력2
        Integer c = cuteDTO.getThird; // c = 1234567
        return "viewPage";
    }
}

Controller의 인자에 DTO가 있다면 해당 DTO가 자동으로 생성되어 Form에서 넘어온 값이 주입된다.
이 때 DTO 변수에 해당하는 값이 없을 경우 변수 기본값이 자동으로 할당된다.


  • 아까부터 나오는 DTO는 뭘까? DTO에 대해 찾다보니 DAO, AO도 DTO와 관련되어 있다는 사실을 알게 되었다. 이에 대해 간단하게 알아보자.

DTO (Data Transfer Object)

  • DTO는 계층 간(Controller, View, Business Layer) 데이터 교환을 위한 자바 빈즈(Java Beans) 를 의미한다.
    DTO는 로직을 가지지 않는 데이터 객체이고 getter/setter 메소드만 가진 클래스를 의미한다.

DAO (Data Access Object)

  • DB의 data에 접근하기 위한 객체이다. DB에 접근하기 위한 로직을 분리하기 위해 사용한다.
    직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.
    MVC 패턴의 Model에서 이와 같은 일을 수행한다.

VO (Value Obejct)

  • VO는 값 오브젝트로써 값을 위해 쓰인다. Read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능) 을 가진다. DTO와 유사하지만 VO는 getter 기능만 존재한다.

출처 : https://choitaetae.tistory.com/97, https://livingcode.tistory.com/16

profile
광운대학교 정보융합학부 학생입니다.

0개의 댓글