| 컬럼명 | 데이터 타입 | 제약조건 | 기본값 | 설명 | 선정 이유 |
|---|---|---|---|---|---|
| id | BIGSERIAL | PRIMARY KEY | – | 내부 고유 식별자 | 자동증가 PK로 간편하고 안전하게 관리 |
| provider_id | BIGINT | NOT NULL, UNIQUE | – | 소셜 로그인 제공자가 준 유저 ID | 중복 방지 및 빠른 사용자 조회 |
| provider | VARCHAR(10) | NOT NULL | - | OAuth 2.0 제공자 | kakao, google 등 String으로 제공받음 |
| image_url | VARCHAR(255) | NULL | NULL | 프로필 이미지 URL (S3) | URL 길이 예측 가능, VARCHAR로 인덱싱 효율 개선 |
| introduction | VARCHAR(70) | NULL | – | 사용자 소개 글 | 70자 내외로 간단히 작성 |
| username | VARCHAR(10) | NOT NULL, UNIQUE | – | 표시용 닉네임 | 중복 방지 + 조회 최적화 |
| is_location_agreed | BOOLEAN | NOT NULL | FALSE | 위치 정보 수집 동의 여부 | 단순 참/거짓 처리에 최적화 |
| is_privacy_agreed | BOOLEAN | NOT NULL | FALSE | 개인정보 동의 여부 | 단순 참/거짓 처리에 최적화 |
| privacy_agreed_at | TIMESTAMPTZ | NULL | – | 개인정보 동의 시각 | 법적 증빙용 |
| created_at | TIMESTAMPTZ | NOT NULL | NOW() | 계정 생성 시각 | 타임존 포함 정확한 기록 |
| updated_at | TIMESTAMPTZ | NOT NULL | NOW() | 정보 수정 시각 | 자동 갱신(트리거 또는 애플리케이션 레벨) |
인덱스:
설명: 소셜 로그인을 기반으로 사용자 계정을 관리하는 테이블입니다.
내부 식별자(id)는 다른 테이블에서 참조되며, provider_id는 인증용 외부 식별자로 활용됩니다.
사용자 프로필(username, image)은 로그인 후 별도로 입력받아 개인화된 프로필 설정을 지원합니다.
또한 개인정보 처리에 대한 동의 여부를 저장하여 관련 법적 요구사항을 충족합니다.
| 컬럼명 | 데이터 타입 | 제약조건 | 기본값 | 설명 | 선정 이유 |
|---|---|---|---|---|---|
| id | BIGSERIAL | PK, NOT NULL | – | Refresh Token 고유 식별자 | 자동 증가되는 PK로 각 토큰을 구분하기 위함 |
| user_id | BIGINT | NOT NULL, FK → user(id) ON DELETE CASCADE | – | 토큰 소유자 (User 테이블 참조) | 유저 탈퇴 시 관련 토큰 자동 삭제 및 무결성 보장 |
| token | TEXT | NOT NULL, UNIQUE | – | 암호화된 Refresh Token 문자열 | 길이 제한 없이 토큰 저장, 중복 발급 방지를 위해 유니크 제약 |
| is_revoked | BOOLEAN | NOT NULL | FALSE | 강제 무효화 여부 (true면 즉시 무효 처리) |
로그아웃·강제 만료 처리를 위해 |
인덱스:
id)token)user_id)