[ERD 설계] 회원 DB 설계

김찬미·2024년 6월 18일
0

CWM 프로젝트

목록 보기
6/8
post-thumbnail

회원(USER) 테이블이란?

저번 글에선 내가 사용한 ERD 다이어그램 툴인 ERDCloudERD에 대해 간단하게 설명해보았다. 그러나 정작 지금 진행하고 있는 프로젝트의 ERD에 대해선 설명이 부족했던 것 같아 이번 글에선 내 ERD에 대해 자세히 말해보려고 한다.

첫 번째로 소개할 내용은 USER 테이블이다. 이 테이블은 이름을 보면 알 수 있듯 회원가입, 로그인 등 웹 사이트에서 필수적인 회원 기능을 담당하는 테이블이다. 웹 개발자에게 있어서 빼놓을 수 없는 기능이고, 어떠한 프로젝트이든 무조건적으로 들어가야 하는 필수 테이블이라고 할 수 있겠다. 중요도가 높은 테이블인 만큼 최대한 자세히 기능을 포함시켜 만들어보았다.


요구사항 분석

유저 페이지

  • 회원가입
  • 소셜 로그인
  • 자체 로그인
  • 로그아웃
  • 잠금
  • 이메일 인증
  • 관리자(ADMIN)

마이 페이지

  • 회원 정보 수정
  • 회원 탈퇴

회원 테이블과 관련된 기능을 간단하게 표현하면 이렇다. 예전 프로젝트에서는 기본적인 회원가입, 로그인 정도만 만들었지만 이번엔 실제 서비스와 유사하게 잠금, 인증 등의 기능을 추가하였다. 또한 ADMINUSER의 역할을 나눠 관리할 예정이다.


ERD 다이어그램

회원(USER) 테이블을 ERD로 표현하면 이렇다. 조금 복잡해 보이긴 하지만 큰 틀로 나눠보자.

USER 테이블 구조

  • 아이디(PK), 이메일, 이름, 비밀번호, 리프레시 토큰 -> 회원가입, 로그인 기능에 사용
  • 잠금 여부, 잠금 횟수, 잠금 최종 시점 -> 잠금 기능
  • 소셜 타입, 소셜 아이디 -> 소셜 로그인 시 사용
  • 역할, 삭제 여부 -> ADMIN 관련 기능
  • 가입 날짜, 마지막 로그인 날짜 -> 회원 정보 수정에 사용

여기서 아이디는 네이버 등 포털 사이트에서 사용하는 아이디가 아닌 PK라는 것을 명심하자. 자체 로그인은 이메일, 비밀번호 두 개로 이루어진다.

역할(ROLE)의 경우, ADMINUSER로 나누어 관리할 생각이다. ADMIN 테이블을 따로 만들면 보안 및 관리 측면에서 유리하다는 장점이 있지만 일단 소규모 프로젝트이기도 하고, 실제로 사이트를 운영할 것은 아니기 때문에 이번엔 간단하게 유저 안에 user_type 컬럼에 ADMIN을 넣어 관리하기로 했다.

또한 삭제 여부라는 컬럼을 새롭게 추가한 이유는 실제 회사에선 회원 탈퇴를 했을 때에 바로 DB에서 해당 회원을 삭제시키지 않고 컬럼의 값을 Y/N로 나눠 관리한다고 들었기 때문이다. 실제로 대형 사이트에서는 회원 탈퇴를 해도 특정 기간 안에 복구하는 기능이 존재한다.

SQL문

CREATE TABLE user (
user_id INT NOT NULL AUTO_INCREMENT,
user_email VARCHAR(100) NOT NULL,
user_name VARCHAR(100) NOT NULL,
password VARCHAR(255) NOT NULL,
user_type VARCHAR(10) NULL,
del_yn CHAR(1) DEFAULT 'N',
lock_yn CHAR(1) DEFAULT 'N',
lock_cnt INT NULL DEFAULT 0,
lock_last_date DATETIME NULL,
social_type VARCHAR(100) NULL,
social_id VARCHAR(200) NULL,
refresh_token VARCHAR(1000) NULL,
join_date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
last_login_date DATETIME NULL,
PRIMARY KEY (user_id),
UNIQUE (user_email)
);

SQL문으로 해당 테이블을 표현하면 다음과 같다. 실제로는 JPA를 사용할 것이기에 직접 SQL문을 만들어 DB에 넣을 일은 없겠지만, 테이블의 구조를 보여주기 위해 작성해보았다. 여기서 보면 알 수 있듯 user_idPK, user_emailUNIQUE 속성을 부여해 중복을 방지할 생각이다. (이것도 실제로는 JPA에서 설정한다.)

마치며

이상으로 프로젝트의 가장 중요한 기둥 중 하나인 USER 테이블 구조를 살펴보았다. 다음 게시물에서는 위시 리스트(좋아요) 기능을 소개해 보도록 하겠다.

profile
백엔드 개발자

0개의 댓글

관련 채용 정보