Back-End/Spring

[Spring] 예제1 - 테이블 설계 및 생성

09009 2023. 5. 15. 14:46

이전에 로그인 페이지와 회원가입 페이지 형태는 만들었다.

이제 회원가입 작업이 정상적으로 수행될 수 있도록 로직을 작성하여야 한다.

 

회원가입이 제대로 작동되는지 확인하기 이전에 우선 DB설계부터 수행하여야 한다.

→ 데이터베이스에 insert가 되어야 회원가입이 완료가 되는 것이기 때문에

 

ERD 생성

데이터베이스 스키마 정의

https://www.erdcloud.com

 

 

테이블 생성 Tip

테이블 생성 시 우선 primary key부터 생성한다.

insert할 때마다 시퀀스로 들어가도록 설정한다.

primary key는 항상 id로 한다.

테이블에 넣을 때 sysdate 값이 들어가는 칼럼을 추가해주는 것이 좋다.

 

테이블 생성

table "fp_member"

 

Oracle 접속

- 조건 - 

무결성 제약 조건은 일단 최대한 설정하지 않고 테이블을 생성한다.

user_id는 원래 not null이고 unique하여야 하지만 이번 예제에서는 not null 제약조건만 추가한다.  unique를 넣지는 않겠다.

 

ERD를 그릴 때 NOT NULL 제약조건을 설정하였지만

이번 예제에서 오라클에는 NOT NULL 제약조건을 설정하지 않을 것이다.

원래는 NOT NULL 제약조건을 넣어야 한다.

 

DDL  만들 때 DROP TABLE문도 작성해주는 것이 좋다.

 

테이블 생성

DDL은 생성하는 순간 COMMIT된다.

-- 최종 예제 DDL
DROP TABLE fp_member;

CREATE TABLE fp_member(
  id number PRIMARY KEY,
  user_id VARCHAR2(20),
  user_pw VARCHAR2(120),
  nickname VARCHAR2(20),
  gender VARCHAR2(1),
  email VARCHAR2(400),
  birth DATE,
  phone VARCHAR2(20),
  reg_date DATE  
);

 

시퀀스 생성

ID: 대리 키

DROP SEQUENCE fp_member_seq;
CREATE SEQUENCE fp_member_seq;

INSERT문 실행

-- 테스트 코드
-- 회원 가입 SQL 
INSERT INTO fp_member VALUES(
    fp_member_seq.nextval,
    's98979',
    '12345',
    '한조3',
    'M',
    's00@gmail.com',
    '01-01-01',
    '010-1231-2312',
    SYSDATE
);

첫번째와 마지막 칼럼을 제외하고는사용자가 입력해야하는 값이다.

SELECT * FROM fp_member;

출력 결과

 

이제 테이블 생성을 완료하였고 INSERT문까지 제대로 작동되는지 실행하였다.

테이블 생성 후 무조건 해야 하는 작업은 DTO 클래스를 생성하여야 한다.

 

 

DTO 생성

DTO: 데이터의 형태를 묶을 용도로 사용하는 것

dto는 한쪽 폴더에 몰아서 생성한다.

date는 일반적으로 java.util.Date로 불러온다.

그리고 자바 빈 표준에 맞는 Getter, Setter를 만들어주어야 한다.

 

✍ dto/MemberDto.java

package com.ja.finalproject.dto;

import java.util.Date;

public class MemberDto {
	private int id;
	private String user_id;
	private String user_pw;
	private String nickname;
	private String gender;
	private String email;
	private Date birth;
	private String phone;
	private Date reg_date;
	
	public MemberDto() {
		super();
	}
	
	public MemberDto(int id, String user_id, String user_pw, String nickname, String gender, String email, Date birth,
			String phone, Date reg_date) {
		super();
		this.id = id;
		this.user_id = user_id;
		this.user_pw = user_pw;
		this.nickname = nickname;
		this.gender = gender;
		this.email = email;
		this.birth = birth;
		this.phone = phone;
		this.reg_date = reg_date;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUser_id() {
		return user_id;
	}

	public void setUser_id(String user_id) {
		this.user_id = user_id;
	}

	public String getUser_pw() {
		return user_pw;
	}

	public void setUser_pw(String user_pw) {
		this.user_pw = user_pw;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getBirth() {
		return birth;
	}

	public void setBirth(Date birth) {
		this.birth = birth;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public Date getReg_date() {
		return reg_date;
	}

	public void setReg_date(Date reg_date) {
		this.reg_date = reg_date;
	}
	
}

DB를 정의하는 순간, DTO도 만들어주어야 한다.