| 컬럼명 | 데이터 타입 | 제약조건 | 기본값 | 설명 | 데이터 타입 선정 이유 |
|---|---|---|---|---|---|
| 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)
고려 사항