(구버전) 스프링 게시판 만들기 #12. 회원 가입 기능 구현
'(구버전) 스프링 게시판 만들기'는 내용이 부족하다고 판단하여
스프링 게시판 만들기를 새로 작성하였습니다.
링크 및 참조용으로 현재 게시물은 남겨두겠지만,
가급적이면 새로운 스프링 게시판 만들기를 참조해주시기 바랍니다.
일반적인 회원기능은 가입, 접속, 정보 수정, 탈퇴 4가지로 되어있습니다. 이 4가지중 가입 기능을 구현하겠습니다. 회원기능이라고 했지만, 게시판의 작성, 조회, 수정, 삭제와 크게 다르지 않습니다.
먼저 프로젝트를 실행하면 가장 처음 열리는 home.jsp에 코드를 추가합니다.
<form role="form" method="post" autocomplete="off"> <p> <label for="userId">아이디</label> <input type="text" id="userId" name="userId" /> </p> <p> <label for="userPass">아이디</label> <input type="password" id="userPass" name="userPass" /> </p> <p><button type="submit">로그인</button></p> <p><a href="/member/register">회원가입</a></p> </form>
이 코드는 로그인 기능, 링크를 통해 회원가입 페이지로 이동할 수 있습니다.
이제 회원 정보를 저장할 테이블 myMember를 만듭니다.
create table myMember( userId varchar2(30) not null, userPass varchar2(100) not null, userName varchar2(30) not null, regDate date default sysdate, primary key(userId), unique(userName) ); commit;
작업했다면 잊지 말고 꼭 커밋을 해줍니다.
회원 아이디(userId)에 기본키(primary key)를 적용하여 대표값으로 설정하고, 회원 이름(userName)에는 고유속성(unique)을 적용하여 중복되지 않도록 합니다.
회원 이름은 굳이 고유속성을 적용할 필요는 없지만, 이렇게한다면 회원 이름이 같은 유저들을 구분할 수 있는 수단을 만들어주어야합니다.
예를들어 게시판에서 게시물 번호를 부여하던 시퀀스를 이용해 회원 번호를 부여하는 방법이나, 로그인 할 때 사용하는 회원 아이디를 부분적으로 보여주는 방법도 있습니다.
저는 개인적으로, 로그인할 때 사용하는 회원 아이디는 일부라도 공개되지 않아야 한다고 생각합니다. 하지만 이건 취향이나 용도, 상황에 맞게 하면 됩니다.
domain 패키지에 myMember를 기반으로한 MemberVO.java를 만듭니다.
그리고 memberMapper를 만들고 테이블에 값을 추가하는 insert 쿼리를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.kuzuro.mappers.memberMapper"> <!-- 회원 가입 --> <insert id="register"> insert into myMember(userId, userPass, userName) values(#{userId}, #{userPass}, #{userName}) </insert> </mapper>
MemberDAO와 MemberDAOImpl, MemberService와 MemberServiceImpl를 작성합니다.
아직 회원 가입을 위한 insert 작업만 있기 때문에 코드는 매우 간단합니다.
새로운 컨트롤러 MemberController.java를 만듭니다. 이 컨트롤러는 오직 회원에 관련된 기능만 다룹니다.
package com.kuzuro.controller; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import com.kuzuro.domain.MemberVO; import com.kuzuro.service.MemberService; @Controller @RequestMapping("/member/*") public class MemberController { private static final Logger logger = LoggerFactory.getLogger(MemberController.class); @Inject MemberService service; // 글 작성 get @RequestMapping(value = "/register", method = RequestMethod.GET) public void getRegister() throws Exception { logger.info("get register"); } // 글 작성 post @RequestMapping(value = "/register", method = RequestMethod.POST) public void postRegister(MemberVO vo) throws Exception { logger.info("post resister"); } }
member에 register.jsp를 생성합니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>kuzuro 게시판</title> </head> <body> <form role="form" method="post" autocomplete="off"> <p> <label for="userId">아이디</label> <input type="text" id="userId" name="userId" /> </p> <p> <label for="userPass">패스워드</label> <input type="password" id="userPass" name="userPass" /> </p> <p> <label for="userName">닉네임</label> <input type="text" id="userName" name="userName" /> </p> <p> <button type="submit" id="submit" >가입</button> </p> <p> <a href="/">처음으로</a> </p> </form> </body> </html>
프로젝트를 실행하고, 회원 가입 링크를 클릭합니다.
원하는 아이디와 패스워드, 닉네임을 입력한 후 가입 버튼을 눌러도 아무런 동작을 하지 않습니다. 아직 컨트롤러가 텅 비어있기 때문입니다.
postRegister에 내용을 추가합니다. 이미 DAO와 Service로 작성해놨기 때문에, 컨트롤러에서는 Service만 호출하면 됩니다.
다시 회원 가입 페이지에서 아이디와 패스워드, 닉네임을 입력하고 가입을 누르면 테이블에 입력한 값을 추가하고 return "redirect:/"
로 인해 처음 화면으로 돌아갑니다.
select * from myMember;
명령을 사용하여 확인하면, 입력한대로 값이 저장된것을 확인할 수 있습니다.
뷰단의 register.jsp 소스코드가 빠져 있네요 ^^;; 기존 뷰단 파일 가지고 적당히 작성해서 해결했습니다.
답글삭제얼마전, 블로그 게시물의 태그를 전체적으로 수정하다가 빠졌..는 줄 알았는데, 원래부터 빠져있더군요;
삭제죄송합니다ㅠㅠ;
에이~ 좋은 자료 올려주셨는 걸요, 저야 황송 감사지요 ^^~~ 공부 잘 하다 갑니다!!
삭제혹시 memberDAOImpl에 import에 +부분을 펼쳐 주실수 있나요?
답글삭제초보자라 그대로 코드 쳐보고 있는데 안보이니까 잘 모르겠어요 ㅠㅠ
기엽노 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
삭제안녕하세요?
답글삭제말씀하신 import 부분은, 컨트롤(Ctrl) + 쉬프트(Shift) + 알파엣 오(o) 키를 누르게되면 자동으로 등록되는 부분이라 별도로 표시하진 않았습니다. (자동으로 숨겨지는것도 있지만요)
혹시 직접 확인해보고 싶으시다면, 깃허브 링크에서 확인하시면 됩니다.
아 글쿤요 처음 알았어요
답글삭제답변 감사합니다
글 항상 잘 보고 있고, 감사합니다.
답글삭제MemberController파일 안에 getRegister()에서 ' return "register"; '가 없는데 어떻게 회원가입 페이지로 넘어가지는 건지 궁금합니다!
안녕하세요? 방문해주셔서 감사합니다.
삭제스프링에서 컨트롤러의 메서드가 get속성을 가졌을 경우, 리턴이 없어도 매핑된 뷰로 이동됩니다.
post속성의 경우, 작업을 다 끝내고 돌아갈 뷰가 없으므로, 리턴이 필요합니다.
감사합니다. 여러 게시판을 돌면서 하는데 안되서 어떻게 하지 하다가 내용은 같은데 조금 다르더군요 form이 있다던가 하튼 달라서 교차비교해가면서 해보니 됬네요. 감사합니다.
답글삭제