JPA Sequence = auto_increment
왜 auto_increment인가?
- 알아보기가 쉽고 JPA 사용에 편리함.
- 주요 서비스에 관해서는 인증과 인가 security로 처리하고, 겹칠 일이 없어 무분별한 API의 요청 방어에 UUID의 장점이 없음.
공통 ENTITY
- created_at (NOT NULL)
- 생명 주기 관리
선택 ENTITY
- updated_at(선택)
- 수정 될 일이 없는 테이블은 updated_at을 두지 않음.
- deleted_at(선택)
- like 테이블이나 image 테이블은 하드삭제, 그 외에는 soft delete 하기 위함.
Users
- user_id(pk) (NOT NULL)
- profile_image_url (NULL)
- 왜 만들었나
- 카카오 로그인 api에서 사용자의 id만 알면 프로필 사진은 가져올 수 있음. (동의 한다는 가정하에)
- 그치만 따로 profile_image_url을 만들어 놓으면 DB에서 가져와서 바로바로 이미지 출력이 가능함.
- nickname (NOT NULL)
- 왜 만들었냐
- 서비스 이용에 있어서 기본이 되는 사용자 이름.
- 사용자 프로필 처럼 굳이 api 호출해서 가져오는 것보다 db에 별도로 저장해서 필요할 때마다 쓰기 위함.
- user_role (VARCHAR + CHECK) ('USER', 'ADMIN') (NOT NULL)
- 사용자의 역할을 나누기 위함, 일단은 admin과 user 두개로 관리할 예정.
- user_status (VARCHAR + CHECK) ('ACTIVE', 'SUSPENDED', 'WITHDRAWN') (NOT NULL)
- 사용자의 상태를 나타내기 위함
social_accounts
UNIQUE (provider_user_id, provider)
동일 계정이 여러 사용자에게 연결되는 것을 막기 위함.
- social _account_id (pk) (NOT NULL)
- user_id (FK) (NOT NULL)
- 서비스 내 사용자 id와 매칭 시키기 위해서 USER 테이블에서 참조하는 외래키.