1. 회원가입 html에서 form 태그를 사용하여 회원가입 구조를 만들어준다.

2. form 태그의 method를 post 방식으로 정의.
form 으로 작성하고 form에 작성된 내용을 post 메소드로 정의해주고 (method="post")
잠깐, post 방식이란?
<form> 태그를 사용할 때 데이터를 서버로 전송하는 방법 중 하나
데이터 보안 : POST 방식은 데이터를 HTTP 메시지의 바디 부분에 포함시켜 전송하기 때문에 URL에 정보가 노출되지 않는다. 이는 보안상의 이점을 제공하고 데이터가 주소 표시줄에 표시되지 않기 때문에 비밀번호나 개인 정보 같은 민감한 데이터를 전송할 때 유용하다.
데이터 크기 제한 없음 : POST 방식은 GET 방식과 달리 전송할 수 있는 데이터의 양에 대한 제한이 없다. 따라서 많은 양의 데이터를 전송해야 할 때 적합하다.
데이터 타입 제한 없음 : POST 방식은 텍스트 데이터뿐만 아니라, 파일과 같은 바이너리 데이터도 전송할 수 있다.
본론으로 돌아와서, 이걸 DB에 저장하기 위해 저장소 역할로 먼저 VO 또는 Bean 클래스를 정의 하고 필요한 타입과 변수명을 선언 한 뒤 Getter and Setter(Source-Generate-getter and setter) 작업을 해준다.
*Mybatis 설정은 제외하였음, 설정 및 Mapper 연동은 다음 포스팅에서 다룰 예정.
3.Controller 에서 @PostMapping으로 요청 받기.
@PostMapping("/Join_Test")
public Stirng Join_Test(){
//수행할 로직 작성
}

코드설명 :
JSP에서 회원가입 버튼을 눌렀을 때 발생하는 Join_Test 호출을 PostMapping으로 받은 다음
매서드를 실행시키게 된다. 메서드가 실행되면서 ( )안에 있는 파라미터 값들을 주입받게 되는데
UserBean 타입을 joinUserBean으로 바인딩하고 userBean이라는 이름의 모델에 추가한다.
그 후 @Valid으로 joinUserBean 객체의 검증을 수행한다.
( joinUserBean객체의 타입인 UserBean 클래스에 선언된 어노테이션을 기반으로 검사수행 )
BindingResult 타입을 result객체로 설정하고 검증 실패에 대한 결과가 이 BindingResult 객체에 저장된다. Model model에서 Model 객체를 model로 설정하고 model.addAttribute를 통해 데이터를 View로 전달하는 기능을 한다. model.addAttribute("idError", "이미 사용 중인 아이디입니다.") 를 통해 view에선 idError 이름으로 접근이 가능해진다.
요청 파라미터 바인딩 : HTTP 요청에 포함된 파라미터들을 자바 객체에 자동으로 바인딩한다. 이 때 @ModelAttribute가 붙은 파라미터는 요청 파라미터의 이름과 객체의 필드 이름이 매핑되어 자동으로 해당 필드에 값을 설정한다.
모델 데이터 추가 : 메소드가 호출될 때 @ModelAttribute 어노테이션으로 정의된 객체는 자동으로 모델에 추가된다. 이렇게 모델에 추가된 객체는 뷰에서 사용할 수 있게 되어, 폼 데이터의 입력, 검증 실패 시 재입력 등의 처리가 용이해진다.
즉, @ModelAttribute("userBean") UserBean joinUserBean에서 UserBean타입의 joinUserBean이라는 객체가 "userBean"이라는 이름으로 저장된다.

*JSP에서 modelAttribute로 접근한 모습
4. View에서 userBean이라는 파라미터명을 받아서 userBean에 저장되어있는 UserBean타입의 joinUserBean 객체를 사용한다.

view는 구현하고자하는 코드에 따라 입력 폼, UserBean에 쓰인 객체에 따라 입력이 달라지니 참고 정도로만 사용하자. 이 프로젝트에서 사용된 Bean은 간단하게 이름, 아이디, 비밀번호, 비밀번호 확인 나이이다.
@NotBlank(message = "사용자 이름은 필수 입력 값입니다.")
@Size(min = 2, max = 50, message = "사용자 이름은 2자 이상 50자 이하이어야 합니다.")
private String user_name;
//
@NotBlank(message = "사용자 ID는 필수 입력 값입니다.")
@Pattern(regexp = "^[A-Za-z0-9_]{5,20}$", message = "사용자 ID는 5-20자의 알파벳, 숫자, 밑줄(_)만 가능합니다.")
private String user_id;
//
@NotBlank(message = "비밀번호는 필수 입력 값입니다.")
@Size(min = 8, message = "비밀번호는 최소 8자 이상이어야 합니다.")
private String user_pw;
//
@NotBlank(message = "비밀번호 확인은 필수 입력 값입니다.")
private String user_pw2;
//
@Min(value = 18, message = "최소 나이는 1살입니다.")
@Max(value = 150, message = "최대 나이는 120살입니다.")
private int user_age;
// ---getter and setter---
