상세 테이블 명세서

user 테이블

컬럼명 데이터 타입 제약조건 기본값 설명 선정 이유
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)은 로그인 후 별도로 입력받아 개인화된 프로필 설정을 지원합니다.

또한 개인정보 처리에 대한 동의 여부를 저장하여 관련 법적 요구사항을 충족합니다.


refresh_token 테이블

컬럼명 데이터 타입 제약조건 기본값 설명 선정 이유
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면 즉시 무효 처리) 로그아웃·강제 만료 처리를 위해

인덱스: