JPA Sequence = auto_increment

왜 auto_increment인가?

  1. 알아보기가 쉽고 JPA 사용에 편리함.
  2. 주요 서비스에 관해서는 인증과 인가 security로 처리하고, 겹칠 일이 없어 무분별한 API의 요청 방어에 UUID의 장점이 없음.

공통 ENTITY

  1. created_at (NOT NULL)
    1. 생명 주기 관리

선택 ENTITY

  1. updated_at(선택)
    1. 수정 될 일이 없는 테이블은 updated_at을 두지 않음.
  2. deleted_at(선택)
    1. like 테이블이나 image 테이블은 하드삭제, 그 외에는 soft delete 하기 위함.

Users

  1. user_id(pk) (NOT NULL)
  2. profile_image_url (NULL)
    1. 왜 만들었나
      1. 카카오 로그인 api에서 사용자의 id만 알면 프로필 사진은 가져올 수 있음. (동의 한다는 가정하에)
      2. 그치만 따로 profile_image_url을 만들어 놓으면 DB에서 가져와서 바로바로 이미지 출력이 가능함.
  3. nickname (NOT NULL)
    1. 왜 만들었냐
      1. 서비스 이용에 있어서 기본이 되는 사용자 이름.
      2. 사용자 프로필 처럼 굳이 api 호출해서 가져오는 것보다 db에 별도로 저장해서 필요할 때마다 쓰기 위함.
  4. user_role (VARCHAR + CHECK) ('USER', 'ADMIN') (NOT NULL)
    1. 사용자의 역할을 나누기 위함, 일단은 admin과 user 두개로 관리할 예정.
  5. user_status (VARCHAR + CHECK) ('ACTIVE', 'SUSPENDED', 'WITHDRAWN') (NOT NULL)
    1. 사용자의 상태를 나타내기 위함

social_accounts

UNIQUE (provider_user_id, provider)

동일 계정이 여러 사용자에게 연결되는 것을 막기 위함.

  1. social _account_id (pk) (NOT NULL)
  2. user_id (FK) (NOT NULL)
    1. 서비스 내 사용자 id와 매칭 시키기 위해서 USER 테이블에서 참조하는 외래키.