정리노트/팀프로젝트

[스프링] 회원가입 구현

망고고래 2024. 2. 14. 17:59

1. Member 도메인 작성

package com.springmvc.domain;

public class Member {
	private String mem_id;
	private String mem_pw;
	private String mem_name;
	private String mem_nickname;
	private String mem_phone;
	private String mem_email;
	private String mem_addr;
	private String mem_addr2;
    
    //getter/setter 생략
    
	public String toString() {
		return "Member [mem_id=" + mem_id + "mem_pw=" + mem_pw + "mem_nickname=" + mem_nickname +  "mem_phone=" + mem_phone + "mem_email=" + mem_email + "mem_addr=" + mem_addr + "mem_addr2" + mem_addr2 + "]";
	}
	
	
	public Member() {}
}

 

 

 

2. 폼 뷰 페이지 제작

<form:form> 태그 사용, modelAttribute는 'new_member'로 컨트롤러와 통일시킴

<form:form modelAttribute="new_member" class="form-horizontal">
                        <h2 class="form-title mb-4">회원가입</h2>
                        <div class="form-group row">
                            <label for="" class="col-sm-3 control-label">*아이디</label>
                            <div class="col-sm-3">
                                <form:input class="input" required="required" path="mem_id" maxlength="15" placeholder="최대 15글자"/>
                            </div> 
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">*비밀번호</label>
                            <div class="col-sm-3">
                                <form:password class="input" required="required" path="mem_pw" maxlength="15" placeholder="최대 15글자"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">*이름</label>
                            <div class="col-sm-3">
                                <form:input class="input" required="required" path="mem_name" maxlength="17"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">닉네임</label>
                            <div class="col-sm-3">
                                <form:input class="input" path="mem_nickname" minlength="2" maxlength="10" placeholder="2~10글자"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">전화번호</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="11" path="mem_phone" placeholder="'-' 없이 숫자만 입력해주세요"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">이메일</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="40" path="mem_email"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr" required="required"/>
                            </div>
                        </div>
                        <div class="form-group row">
                            <label for="" class="col-sm-3">상세주소</label>
                            <div class="col-sm-3">
                                <form:input class="input" maxlength="60" path="mem_addr2" required="required"/>
                            </div>
                        </div>
                        <div class="form-group row mt-4">
                            <div class="col-sm-offset-2 col-sm-10">
                                <input type="submit" value="확인" class="offset-md-8 submit-green">
                            </div>
                        </div>
                    </form:form>

 

 

3. Controller에 메서드 작성, 매핑

@Controller
@RequestMapping("/member")
public class MemberController {
	
	@Autowired
	private MemberService memberService;
	
    @GetMapping("/add")
	public String add_member_form(@ModelAttribute("new_member")Member member) {
		System.out.println("add_member_form() 도착");
		return "/member/add_member";
	}
	
	@PostMapping("/add")
	public String submit_add_member(@ModelAttribute("new_member")Member member, BindingResult result, HttpServletRequest request) {
		
		if(result.hasErrors()) {
			return "/member/add_member";
		}else {
			System.out.println("MemberService 호출");
			memberService.add_new_member(member);
		}
		//home으로 복귀
		System.out.println("home 복귀");
		return "redirect:/home";
	}
    
}

 

 

 

4. service와 repository에 메서드 작성

@Service
public class MemberServiceImpl implements MemberService{
	@Autowired
	private MemberRepository memberRepository;

	@Override
	public void add_new_member(Member member) {
		System.out.println("MemberService 도착");
		memberRepository.add_new_member(member);
	}
}
@Repository
public class MemberRepositoryImpl implements MemberRepository{

	private JdbcTemplate template;
	
	@Autowired
	public void setJdbctemplate(DataSource dataSource) {
		this.template = new JdbcTemplate(dataSource);
	}
	
	@Override
	public void add_new_member(Member m) {
		System.out.println("MemberRepository 도착");
		String SQL = "INSERT INTO user_mem VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
		template.update(SQL, m.getMem_id(), m.getMem_pw(), m.getMem_name(), m.getMem_nickname(), m.getMem_phone(), m.getMem_email(), m.getMem_addr(), m.getMem_addr2());
	}
}

 

 

5. 데이터베이스에 테이블 작성

create table user_mem(
	mem_id varchar(15) not null,
    mem_pw varchar(15) not null,
    mem_name varchar(17) not null,
    mem_nickname varchar(10),
    mem_phone varchar(11),
    mem_email varchar(40),
    mem_addr varchar(60) not null,
    mem_addr2 varchar(60) not null
)DEFAULT CHARSET=utf8;

 

 

 

폼에 정보를 입력한 후 제출하고 sql 프로그램에서 테이블을 조회해서 확인한다.