Spring & Springboot/올인원 스프링 프레임워크

전자 도서관 프로젝트 - 회원가입 구현

YJ_ma 2023. 12. 2. 16:39

회원가입 화면으로 이동

회원가입 메뉴는 nav.jsp에 코딩되어 있다.

<li><a href="<c:url value='/user/member/createAccountForm' />">회원가입</a></li>

 

회원가입 메뉴가 /user/member/createAccountForm에 링크되어 있으므로 UserMemberController 컨트롤러에 createAccountForm()을 만들고 매핑한다.

package com.office.library.user.member;

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

@Controller
@RequestMapping("/user/member")
public class UserMemberController {

	// 회원가입
	@GetMapping("/createAccountForm")
	public String createAccountForm() {
		System.out.println("[UserMemberController] createAccountForm()");

		String nextPage = "user/member/create_account_form";

		return nextPage;
	}
}

 

회원가입 처리하기

회원가입 화면은 create_account_form.jsp로 회원가입 양식과 관련된 코드는 다음과 같다.

· 사용자 정보가 전송되는 서버 주소는 /user/member/createAccountConfirm이고, 전송방식은 post이다.

<form action="<c:url value='/user/member/createAccountConfirm' />" name="create_account_form" method="post">

    <input type="text" name="u_m_id" placeholder="INPUT USER ID."> <br>
    <input type="password" name="u_m_pw" placeholder="INPUT USER PW."> <br>
    <input type="password" name="u_m_pw_again" placeholder="INPUT USER PW AGAIN."> <br>
    <input type="text" name="u_m_name" placeholder="INPUT USER NAME."> <br>
    <select name="u_m_gender">
        <option value="">SELECET USER GENDER.</option>
        <option value="M">Man</option>
        <option value="W">Woman</option>
    </select> <br>
    <input type="email" name="u_m_mail"	placeholder="INPUT USER MAIL." ><br>
    <input type="text" name="u_m_phone"	placeholder="INPUT USER PHONE."> <br>
    <input type="button" value="create account" onclick="createAccountForm();"> 
    <input type="reset" value="reset">

</form>

 

컨트롤러 기능 구현

서버에서 회원가입 요청을 처리하기 위해 UserMemberController에 createAccountConfirm()을 선언하고 클라이언트 요청(/user/member/createAccountConfirm)을 매핑한다.

@Autowired
UserMemberService userMemberService;
..생략..

// 회원가입 확인
@PostMapping("/createAccountConfirm")
public String createAccountConfirm(UserMemberVo userMemberVo) {
    System.out.println("[UserMemberController] createAccountConfirm()");

    String nextPage = "user/member/create_account_ok";

    int result = userMemberService.createAccountConfirm(userMemberVo);

    if (result <= 0)
        nextPage = "user/member/create_account_ng";

    return nextPage;
}

 

서비스 기능 구현

컨트롤러에서 지시한 업무를 처리하기 위해서 서비스(UserMemberService)를 다음과 같이 코딩한다.

package com.office.library.user.member;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserMemberService {

	final static public int USER_ACCOUNT_ALREADY_EXIST = 0;
	final static public int USER_ACCOUNT_CREATE_SUCCESS = 1;
	final static public int USER_ACCOUNT_CREATE_FAIL = -1;

	@Autowired
	UserMemberDao userMemberDao;

	public int createAccountConfirm(UserMemberVo userMemberVo) {
		System.out.println("[UserMemberService] createAccountConfirm()");

		boolean isMember = userMemberDao.isUserMember(userMemberVo.getU_m_id());

		if(!isMember) {
			int result = userMemberDao.insertUserAccount(userMemberVo);

			if (result > 0)
				return USER_ACCOUNT_CREATE_SUCCESS;
			else
				return USER_ACCOUNT_CREATE_FAIL;
		} else {
			return USER_ACCOUNT_ALREADY_EXIST;
		}
	}
}

 

DAO 기능 구현

서비스에서 지시한 업무를 처리하기 위해서 DAO(UserMemberDao)를 다음과 같이 코딩한다.

package com.office.library.user.member;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

@Component
public class UserMemberDao {

	@Autowired
	JdbcTemplate jdbcTemplate;

	@Autowired
	PasswordEncoder passwordEncoder;

	public boolean isUserMember(String u_m_id) {
		System.out.println("[UserMemberDao] isUserMember()");

		String sql = "SELECT COUNT(*) FROM tbl_user_member "
				+ "WHERE u_m_id = ?";

		int result = jdbcTemplate.queryForObject(sql, Integer.class, u_m_id);

		return result > 0 ? true : false;
	}

	public int insertUserAccount(UserMemberVo userMemberVo) {
		System.out.println("[UserMemberDao] insertUserAccount()");

		String sql = "INSERT INTO tbl_user_member(u_m_id, "
				+ "u_m_pw, " + "u_m_name, " + "u_m_gender, "
				+ "u_m_mail, " + "u_m_phone, " + "u_m_reg_date, "
				+ "u_m_mod_date) VALUES(?, ?, ?, ?, ?, ?, NOW(), NOW())";

		int result = -1;

		try {
			result = jdbcTemplate.update(sql,
					userMemberVo.getU_m_id(),
					passwordEncoder.encode(userMemberVo.getU_m_pw()),
					userMemberVo.getU_m_name(), userMemberVo.getU_m_gender(),
					userMemberVo.getU_m_mail(), userMemberVo.getU_m_phone());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}

 

이제 프로젝트를 실행하여 홈 화면에서 <회원가입>을 클릭한다. 회원가입에 필요한 회원 정보 입력 후 <create account>버튼을 클릭한다. CREATE ACCOUNT SUCCESS!! 문구가 뜬다면 정상적으로 회원가입이 된 것이다.

 

 

user1이 회원가입이 성공한 것을 확인했다. user2, user3도 신규 회원가입을 진행하고 데이터베이스에 추가되는지 확인해준다.