컬럼명 | 데이터 타입 | 제약조건 | 기본값 | 설명 | 데이터 타입 선정 이유 |
---|---|---|---|---|---|
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자 | |||||
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. 사람 기준의 "일시" 데이터 |
INDEX
email
)
컬럼명 | 데이터 타입 | 제약조건 | 기본값 | 설명 | 데이터 타입 선정 이유 |
---|---|---|---|---|---|
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
refresh_token
)
expired_at
)
고려 사항