Kim VamPa

[Spring][쇼핑몰 프로젝트][2.1] 회원가입 기능 구현(테이블 생성, vo 생성, Mapper 생성 및 테스트) 본문

스프링 프레임워크/쇼핑몰 프로젝트

[Spring][쇼핑몰 프로젝트][2.1] 회원가입 기능 구현(테이블 생성, vo 생성, Mapper 생성 및 테스트)

Kim VamPa 2020. 8. 13. 12:36
728x90
반응형
프로젝트 Github : https://github.com/sjinjin7/Blog_Project
프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188

목표

 이번 포스팅에선 회원가입 기능을 구현해보겠습니다. 해당 기능이 구현되는 상황은 다음과 같습니다.

 

     1. 회원가입페이지(join.jsp)에서 필요 정보를 입력합니다.

     2.입력 후 '가입하기' 버튼을 클릭합니다.

     3.입력한 회원정보가 데이터베이스에 저장되고 화면은 메인 페이지로 이동합니다.

 

 회원가입 기능 구현은 두포스팅에 걸쳐서 진행하겠습니다. 

순서

1. 데이터베이스 테이블 생성 및 VO 생성

   1) Oracle

   2) MySQL

   3) VO생성

2. MemberMapper.xml 추가

   1) insert 쿼리문 테스트 및 관리자 아이디 만들기

   2) mapper.xml 작성

3. MemberMapper.java 인터페이스 추가

----------------------↓다음 포스팅--------------------------------

4. Mapper에 추가한 쿼리문 테스트(MemberMapperTests.java)

5. MemberService.java 추가

6. MemberController.java 회원가입 메서드 추가

7. join.jsp

8. 테스트

9. 정리

 

1. 데이터베이스 테이블 생성 및 VO 생성

 - 회원가입 기능 구현을 위해서 기본적으로 필요로 회원 테이블(book_member)과 회원 테이블의 VO(Value Object)를 생성하겠습니다. Oracle과 MySQL 각각 모두 사용해서 진행하겠습니다. 순서는 Oracle 테이블 생성, MySQL 테이블 생성, VO생성 순으로 진행하겠습니다.

  회원테이블의 이름은 'book_member'이고, VO의 이름은 'MemberVO'로 하였습니다..

 

1) Oracle 테이블 생성

 - 아이디(memberId), 비밀번호(memberPw), 회원 이름(memberName), 회원 메일(memberMail), 우편번호(memberAddr1), 사는 지역(memberAddr2), 상세주소(memberAddr3), 관리자 여부(adminCk), 등록 날짜(regDate), 회원 돈(money), 회원 포인트(point)로 구성하였습니다.

 

 - 관리자 여부는 int형으로 하였으며 0은 일반사용자, 1은 관리자로 하여서 로그인한 회원이 일반 회원인지 관리자인지 구분하기 위하여 삽입하였습니다.

 

 - 몇몇 데이터 정보는 필수 입력이 아니라고 생각하지만 편의를 위해서 모든 정보가 NULL이 불가능하도록 하였습니다.

 

CREATE TABLE BOOK_MEMBER(
  memberId VARCHAR2(50),
  memberPw VARCHAR2(100) NOT NULL,
  memberName VARCHAR2(30) NOT NULL,
  memberMail VARCHAR2(100) NOT NULL,
  memberAddr1 VARCHAR2(100) NOT NULL,
  memberAddr2 VARCHAR2(100) NOT NULL,
  memberAddr3 VARCHAR2(100) NOT NULL,
  adminCk NUMBER NOT NULL,
  regDate DATE NOT NULL,
  money number NOT NULL,
  point number NOT NULL,
  PRIMARY KEY(memberId)
);
commit;

그림 1-1
그림 1-2

 

2) MySQL 테이블 생성

 - 구성은 Oracle에서 생성한 테이블과 동일합니다. 

 

 - 차이점은 Oracle에서는 데이터형이 varchar2에서 MySQL은 varchar이라는 점과 Oracle과 다르게 따로 commit; 명령이 필요가 없다는 점입니다.

 

CREATE TABLE BOOK_MEMBER(
  memberId VARCHAR(50),
  memberPw VARCHAR(100) NOT NULL,
  memberName VARCHAR(30) NOT NULL,
  memberMail VARCHAR(100) NOT NULL,
  memberAddr1 VARCHAR(100) NOT NULL,
  memberAddr2 VARCHAR(100) NOT NULL,
  memberAddr3 VARCHAR(100) NOT NULL,
  adminCk int NOT NULL,
  regDate DATE NOT NULL,
  money int NOT NULL,
  point int NOT NULL,
  PRIMARY KEY(memberId)
);

그림 1-3

 

3) VO 생성

 - book_member 테이블에 데이터를 저장하거나, 반환된 데이터를 담을 객체(VO)를 만들겠습니다. com.vam.model에 "MemberVO.java"클래스를 생성합니다.

 

그림 1-4

 

- book_member테이블을 기초하여 MemberVO는 다음과 같이 작성합니다. getter/setter/toString메서드는 이클립스에서 제공하는 기능을 통해 작성하였습니다. 

 

MemberVO.java

더보기
package com.vam.model;

public class MemberVO {

	//회원 id
	private String memberId;
	
	//회원 비밀번호
	private String memberPw;
	
	//회원 이름
	private String memberName;
	
	//회원 이메일
	private String memberMail;
	
	//회원 우편번호
	private String memberAddr1;
	
	//회원 주소
	private String memberAddr2;
	
	//회원 상세주소
	private String memberAddr3;
	
	// 관리자 구분(0:일반사용자, 1:관리자)
	private int adminCk;
	
	//등록일자
	private int regDate;
	
	//회원 돈
	private int money;
	
	//회원 포인트
	private int point;

	public String getMemberId() {
		return memberId;
	}

	public void setMemberId(String memberId) {
		this.memberId = memberId;
	}

	public String getMemberPw() {
		return memberPw;
	}

	public void setMemberPw(String memberPw) {
		this.memberPw = memberPw;
	}

	public String getMemberName() {
		return memberName;
	}

	public void setMemberName(String memberName) {
		this.memberName = memberName;
	}

	public String getMemberMail() {
		return memberMail;
	}

	public void setMemberMail(String memberMail) {
		this.memberMail = memberMail;
	}

	public String getMemberAddr1() {
		return memberAddr1;
	}

	public void setMemberAddr1(String memberAddr1) {
		this.memberAddr1 = memberAddr1;
	}

	public String getMemberAddr2() {
		return memberAddr2;
	}

	public void setMemberAddr2(String memberAddr2) {
		this.memberAddr2 = memberAddr2;
	}

	public String getMemberAddr3() {
		return memberAddr3;
	}

	public void setMemberAddr3(String memberAddr3) {
		this.memberAddr3 = memberAddr3;
	}

	public int getAdminCk() {
		return adminCk;
	}

	public void setAdminCk(int adminCk) {
		this.adminCk = adminCk;
	}

	public int getRegDate() {
		return regDate;
	}

	public void setRegDate(int regDate) {
		this.regDate = regDate;
	}

	public int getMoney() {
		return money;
	}

	public void setMoney(int money) {
		this.money = money;
	}

	public int getPoint() {
		return point;
	}

	public void setPoint(int point) {
		this.point = point;
	}

	@Override
	public String toString() {
		return "MemberVO [memberId=" + memberId + ", memberPw=" + memberPw + ", memberName=" + memberName
				+ ", memberMail=" + memberMail + ", memberAddr1=" + memberAddr1 + ", memberAddr2=" + memberAddr2
				+ ", memberAddr3=" + memberAddr3 + ", adminCk=" + adminCk + ", regDate=" + regDate + ", money=" + money
				+ ", point=" + point + "]";
	}

	
	
}

 

그림 1-5

 

2. MemberMapper.xml 추가

1) insert 쿼리문 테스트 및 관리자 아이디 만들기

 

 - MemberMapper.xml에 회원가입 쿼리문 작성을 하기 앞서 먼저 회원가입에 사용할 쿼리를 테스트해보겠습니다. 테스트를 통해 등록할 회원정보는 추후에 관리자 아이디로 사용할 수 있도록 만들겠습니다. insert 쿼리문은 아래와 같습니다. 모든 정보를 admin으로 하였고 'adminCk'를 1로 설정하였습니다. 

 

-- 회원가입 쿼리(Oracle)
insert into book_member values('admin23', 'admin', 'admin', 'admin', 'admin', 'admin', 'admin', 1, sysdate, 1000000, 1000000);

 

-- 회원가입 쿼리(MySQL)
insert into book_member values('admin', 'admin', 'admin', 'admin', 'admin', 'admin', 'admin', 1, sysdate(), 1000000, 1000000);

 

* 위 두 쿼리의 차이점은 sysdate입니다. 해당 메서드를 실행하기 위해 Oracle은 'sysdate' MySQL은 'sysdate()'를 사용하고 있습니다.

 

- 명령문을 실행하였다면 SELECT * FROM book_member; 을 통해 정보가 정확히 등록되었는지 확인해봅니다.

 

그림 2-1

 

그림 2-2

 

그림 2-3

 

그림 2-4

 

2) mapper.xml 작성

- src/main/resources 에 있는 mapper 폴더에 MemberMapper.xml 파일을 만듭니다.

 

그림 2-5

 

 

- 아래와 같이 기본적인 코드를 작성합니다.

- mapper 태그에 namespace 속성은 연동시키고자 하는 Mapper 인터페이스명을 경로와 함께 명시해줍니다. 저는 com.vam.mapper.MemberMapper로 작성하였습니다. MemberMapper는 다음 순서에서 만듭니다.

 

<?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.vam.mapper.MemberMapper">

  </mapper>

 

- mapper태그 내에 insert 태그를 새로 추가해줍니다. insert 태그의 id속성은 'memberJoin'으로 합니다. memberJoin은 다음 순서에 만들 MemberMapper.java에서 회원가입 쿼리문을 호출하는 메서드 이름입니다.

 

- insert 태그 내에 앞서 테스트하였던 insert 쿼리 명령문을 붙여 넣기 한 후 삽입될 데이터를 '#[VO에 저장된 데이터 이름}"으로 교체해줍니다.

 

- adminCk는 회원가입 시 기본적으로 일반회원으로 등록하기 위해 0을 삽입되도록 하였습니다.

 

- money, point의 경우 추후에 회원이 물품을 구매하는 기능을 구현하기 위해 회원에게 10만 원과 5천 포인트를 기본으로 가질 수 있도록 하였습니다. 

 

<?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.vam.mapper.MemberMapper">
  	<insert id="memberJoin">
  		insert into book_member values(#{memberId}, #{memberPw}, #{memberName}, #{memberMail}, #{memberAddr1}, #{memberAddr2}, #{memberAddr3}, 0, sysdate, 100000, 5000 )

  	</insert>
  </mapper>

 

그림 2-6

 

3. MemberMapper.java 인터페이스 추가

 

 - com.vam.mapper 경로에 MemberMapper.java 인터페이스를 추가해줍니다. 

 

그림 3-1

 

- 회원등록 insert쿼리를 실행시켜 줄 메서드를 작성합니다.

 

	//회원가입
	public void memberJoin(MemberVO member);

 

그림 3-2

 

 

 

DATE

  • 2020.08.13 작성

 

 

 

 

 

728x90
반응형
Comments