👭 회원가입 기능을 가장 먼저 구현해본다. 회원가입 및 로그인은 spring security를 통해 구현했다. 회원가입 시에는 spring security에서 지원해주는 BCryptPasswordEncoder를 이용해 회원의 비밀번호를 암호화 할 예정이다.
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 테이블 생성 시 컬럼명은
스네이크 표기법
을 따른다.
초기 프로젝트를 세팅하며 추가되어 있을 라이브러리다. 혹시 모르니 의존성 주입이 잘 되어 있는지 다시 한 번 확인!(maven
기준)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
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를 작성하기 위해 src/main/java 경로에 com.자신의 프로젝트명.mapper
패키지를 추가한 뒤 해당 패키지에 mapper로 사용할 interface
를 생성해 사용한다.(❗class가 아닌 interface를 생성해야 한다!)
여기서는 UserMapper interface를 생성한다.
Mapper interface
란?
- Mapping 파일에 기재된 SQL문을 호출하기 위한 interface다.
@Mapper
public interface UserMapper {
// 회원 가입
int join(User user);
}
src/main/resources 경로에 UserMapper.xml 파일을 생성한다.
mapper xml
이란?
- SQL Mapping XML 파일로 실행할 SQL문을 정의해놓은 파일이다.
- mapper.xml의
namespace
를 mapper interface의 이름과 맞춰주면 xml의 설정과 interface에 선언한 설정과 제약을 함께 사용할 수 있다.
아래와 같은 기본적인 코드를 작성한다. 앞서 말한대로 namespace
속성은 연동시키고자 하는 mapper interface명을 경로와 함께 명시해준다.
<?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문은 다음과 같이 사용할 수도 있다.
<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까지 갈 길이 멀다. 하지만 부지런히 복습하고 업로드해야겠다.