[새벽세시] 회원가입 기능 구현 - 테이블 생성, VO 생성, Mapper 구현

Hoehenflug·2022년 2월 1일
1
post-thumbnail
post-custom-banner

👭 회원가입 기능을 가장 먼저 구현해본다. 회원가입 및 로그인은 spring security를 통해 구현했다. 회원가입 시에는 spring security에서 지원해주는 BCryptPasswordEncoder를 이용해 회원의 비밀번호를 암호화 할 예정이다.


🚗 user 테이블 생성

user 테이블은 총 7개의 컬럼으로 구성되어 있다.

  • 유저 고유값(id), 유저 아이디(user_id), 비밀번호(password), 유저 이름(name), 전화번호(phone_num), 주소(address), 이메일(email)
CREATE TABLE user (
	id INT UNSIGNED PRIMARY KEY UNIQUE KEY NOT NULL AUTO_INCREMENT COMMENT "유저 고유값",
	user_id VARCHAR(50) NOT NULL COMMENT "유저 아이디",
	password VARCHAR(130) NOT NULL COMMENT "비밀번호",
	username VARCHAR(50) NOT NULL COMMENT "유저 이름",
	phone_num VARCHAR(30) NOT NULL COMMENT "전화번호",
	address VARCHAR(100) NOT NULL COMMENT "주소",
	email VARCHAR(120) NOT NULL COMMENT "유저 이메일"
) COMMENT "유저 테이블";

DB 테이블 생성 시 컬럼명은 스네이크 표기법을 따른다.

🚛 프로젝트에 Spring Security 적용하기

초기 프로젝트를 세팅하며 추가되어 있을 라이브러리다. 혹시 모르니 의존성 주입이 잘 되어 있는지 다시 한 번 확인!(maven 기준)

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

🚓 model VO 생성

user 테이블에 데이터를 저장하거나 반환된 테이버틑 담을 model 객체(VO)를 생성한다.

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class User {

    private int id;

    private String userId;

    private String password;
    
    private String name;

    private String phoneNum;
    
    private String address;
    
    private String email;
}

@Data, @AllArgsConstructor, @NoArgsConstructor, @Builder 어노테이션은 lombok 라이브러리를 설치하면 사용할 수 있다. 각 어노테이션의 의미는 여기서 볼 수 있다.

🚕 Mapper 생성 및 작성

1. mapper interface 생성

mapper를 작성하기 위해 src/main/java 경로에 com.자신의 프로젝트명.mapper 패키지를 추가한 뒤 해당 패키지에 mapper로 사용할 interface를 생성해 사용한다.(❗class가 아닌 interface를 생성해야 한다!)
여기서는 UserMapper interface를 생성한다.

Mapper interface란?

  • Mapping 파일에 기재된 SQL문을 호출하기 위한 interface다.
@Mapper
public interface UserMapper {

	// 회원 가입
	int join(User user);
}

2. mapper xml 생성

src/main/resources 경로에 UserMapper.xml 파일을 생성한다.

mapper xml이란?

  • SQL Mapping XML 파일로 실행할 SQL문을 정의해놓은 파일이다.
  • mapper.xml의 namespace를 mapper interface의 이름과 맞춰주면 xml의 설정과 interface에 선언한 설정과 제약을 함께 사용할 수 있다.

아래와 같은 기본적인 코드를 작성한다. 앞서 말한대로 namespace 속성은 연동시키고자 하는 mapper interface명을 경로와 함께 명시해준다.

방법 1)

<?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.tam.threeam.mapper.UserMapper">
	<insert id="join" parameterType="com.tam.threeam.model.User" useGeneratedKeys="true" keyProperty="id">
      		INSERT INTO user(user_id, password, name, phone_num, address, email)
      		VALUES(#{userId}, #{password}, #{name}, #{phoneNum}, #{address}, #{email})
   	</insert>
</mapper>

위의 insert SQL문은 다음과 같이 사용할 수도 있다.

방법 2)

<insert id="join" parameterType="com.tam.threeam.model.User" useGeneratedKeys="true" keyProperty="id">
	INSERT INTO user SET user_id=#{userId}, password=#{password}, name=#{name}, phone_num=#{phoneNum}, address=#{address}, email=#{email}
</insert>

보통 전자의 방법으로 INSERT문을 사용하곤 한다. 하지만 한 번에 많이 INSERT를 하는 것이 아니라면 후자의 방법이 property와 column이 헷갈리지 않는 방법인 것 같아 자주 사용하고 있다!


💪🏻 기록

오늘은 회원가입 기능 구현 중 테이블 생성, VO 생성, Mapper interface 및 xml 파일 생성까지만 기록해둬야겠다. service, controller부터 spring security까지 갈 길이 멀다. 하지만 부지런히 복습하고 업로드해야겠다.

post-custom-banner

0개의 댓글