테이블 명세서 (Nemo 서비스)

추후 MSA 설계를 위해 Domain별로 분리해보았습니다.

공통 고려사항

1️⃣ User Domain

users 테이블

컬럼명 데이터 타입 제약조건 기본값 설명 데이터 타입 선정 이유
id INT PK,
NOT NULL,
UNSIGNED - 회원 고유 ID
자동증가 PK 사용 회원이 84억 이상이 되기 어렵다고 생각하여 INT로 설정
provider VARCHAR(20) NOT NULL - OAuth 제공자 20자가 넘지 않을 것이라고 생각했기 때문
ex - kakao, apple, google 등
provider_id VARCHAR(50) NOT NULL - OAuth ID id가 긴 경우도 존재하므로 50자면 충분할 것으로 예상
ex - apple의 경우 36자
email VARCHAR(255) NOT NULL - 이메일
nickname VARCHAR(20) NOT NULL - 서비스 내 활동명 카카오 닉네임은 최대 20자까지 가능합니다.
profile_image_url VARCHAR(512) NOT NULL - 프로필 이미지 URL
status ENUM ACTIVE: 활성화
WITHDRAWN: 탈퇴 두 개의 고정된 상태값이므로 DB에서 ENUM으로 관리
created_at TIMESTAMP NOT NULL CURRENT_TIMESTAMP 계정 생성일
updated_at TIMESTAMP NOT NULL CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 계정 수정일
deleted_at DATETIME NULL 회원 탈퇴일 1. 사람 기준의 "일시" 데이터
  1. 2038년 제한 X |

INDEX


user_tokens 테이블

컬럼명 데이터 타입 제약조건 기본값 설명 데이터 타입 선정 이유
id BIGINT PK,
NOT NULL,
UNSIGNED - 토큰 ID
자동증가 PK 사용 token은 한 사람당 여러 개 생성될 수 있음
user_id BIGINT FK - 회원 ID
refresh_token VARCHAR(255) NOT NULL -
device_info VARCHAR(255) NOT NULL - 브라우저, OS 정보
is_revoked BOOLEAN NOT NULL FALSE 토큰 무효화 여부
로그아웃 시 TRUE
expired_at DATETIME NOT NULL - Refresh Token 만료 기간 특정 시점을 저장해야하기 때문에
created_at TIMESTAMP NOT NULL CURRENT_TIMESTAMP 생성일
updated_at TIMESTAMP NOT NULL CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 수정일

INDEX

고려 사항