4일차 목표
오늘은 어제 시간이 없어 잠깐 만들었던 회원가입과 로그인 기능을 토대로 전반적인 회원 관리 기능과 게시판을 이용할 수 있는 전체적인 틀을 잡아보고자 한다
1. 테이블 구상 및 생성
현재 우리에게 필요한 테이블은 2개의 테이블이다
유저 테이블에는 기본적으로
유저 ID, 유저 PASSWORD, 이름, 전화 번호
정도의 간략한 구성으로 구성하고자 한다
게시판 정보에는
게시판 번호, 게시판 제목, 게시판 이름, 게시판 내용, 게시판 날짜
정도의 구성으로 구성하자
테이블 간의 연결
여기서 중요한 점은 게시판은 유저 테이블의 기본키를 가져와서 사용자에게 보여줘야만한다
그렇기에 우리는 유저 테이블에 userNumber 라는 고유한 기본키를 만들어서 게시판 테이블에서 참조 할 수 있도록 구성할 것이다
테이블 셋팅
유저 테이블
create SEQUENCE userNumber;
create table test_user(
userNumber number primary key,
id varchar2(20) not null,
password varchar2(20) not null,
name varchar2(10) not null,
phone1 varchar2(3) not null,
phone2 varchar2(4) not null,
phone3 varchar2(4) not null
);
게시판 테이블
create sequence boardNumber;
create table test_board(
boardNumber number primary key,
userNumber number not null,
title varchar2(50) not null,
content varchar2(500) not null,
createDay date not null
);
2. 회원가입 기능
회원가입 폼을 먼저 보도록 하자
<form action="/user/joinMember" method="post">
<label>아이디</label><br>
<input type="text" name="id"><br>
<br>
<label>비밀번호</label><br>
<input type="text" name="password"><br>
<br>
<label>이름</label><br>
<select name="phone1">
<option value="010">010</option>
<option value="011">011</option>
<option value="016">016</option>
</select> -
<input type="text" name="phone2"> -
<input type="text" name="phone3">
<br>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
value의 값들을 DB의 이름들과 일치 시켜서 데이터를 전달 해 줄것이고
form 태그를 통해서 user/joinMember라는 url로 이동 시킨다
그리고 난 뒤 Controller를 보도록하자
@PostMapping("/joinMember")
public String PostjoinMember(UserVO vo) {
System.out.println("PostJoinMember");
service.joinMember(vo);
return "/user/login";
}
form을 통해서 저장 된 UserVO를 service 객체의 joinMember에 VO 데이터를 전달해주도록 한다
<!-- joinMember -->
<insert id="joinMember">
insert into test_user values(USERNUMBER.nextval, #{id}, #{password}, #{name},
#{phone1},#{phone2},#{phone3})
</insert>
그리고 해당 Service를 Mybatis를 통해서 DB에 적용시켜서 데이터를 DB에 저장 시켜 회원가입을 완료한다
3. 로그인 기능
로그인 폼을 확인해보자
<form action="/user/login" method="post">
<label>아이디</label><br>
<input type="text" name="id"><br>
<br>
<label>비밀번호</label><br>
<input type="text" name="password"><br>
<br>
<input type="submit" value="전송">
<input type="reset" value="초기화">
</form>
데이터를 /user/login 에 전송해주었다
Controller를 보자
@PostMapping("/login")
public String login(UserVO vo, Model model) {
int userNumber = service.login(vo);
System.out.println("GetLogin");
System.out.println(userNumber);
model.addAttribute("userNumber",userNumber);
return "/board/list";
}
컨트롤러에서 받아온 데이터를 UserVO에 저장해서 service.login에 전달해준 것을 볼 수 있고
그 데이터에서 나온 결과값을 정수형 변수에 넣어온 것을 알 수 있다
mybatis를 확인해보자
<!-- login -->
<select id="login" resultType="int">
select userNumber from test_user where id=#{id} and password=#{password}
</select>
mybatis에서 resultType을 int로 받아옴으로써 정수형으로 받아오고
조건에 맞는 userNumber를 받아오는 것을 알 수 있고
실행시키자 결과가 DB에 잘 저장되고 userNumber도 정확하게 출력해내는 것을 알 수 있다
오늘 많은 분량을 진행하지 못했다
내일은 해당 데이터의 정보를 확인 및 수정할 수 있는 페이지와 mybatis에서 쿼리가 정상적으로 실행되지 않았을 때 알림창이 뜰 수 있는 설정 및 Exception 처리에 대해서 공부해봐야할 것이다