Meerkit
Meerkit
HomeDocsComponentsAPI
GitHub

Getting Started

5
IntroductionInstallationProject StructureThemingDeployment

CLI

6
CLI Overviewinit & setupstart, stop & openstatus, check, env & logsdbadd, test & update

Core Concepts

5
AuthenticationRoles & PermissionsData ModelLogin LockoutSecurity

Guides

3
Protect a pageAdd a roleCall your own API

Components

24

사용자 화면12

Login FormSignup FormEmail VerificationTerms AgreementGoogle LoginPassword ResetProfile & PasswordNicknameAuth DialogProfile ImageUser AvatarUser Menu

관리자 화면6

Member TableMember DirectoryMember AI UsageMember AI Usage HistoryRole ManagerRole Select

공통5

Address FieldFile DropzoneLoadingDateRoute Guards

AI Components

4
AI Prompt InputThinking IndicatorAPI Key InputVoice

API

6
OverviewHealthAuthUsers · 내 정보Users · 관리자LLM

Reference

2
Hooks & StateFAQ

Data Model

users, roles 테이블과 필드를 정리합니다.

가장 먼저 구현하는 테이블은 users, roles, 둘을 잇는 user_roles입니다. 한 사람이 여러 역할을 가질 수 있도록 연결 테이블로 나눴습니다. 전체 컬럼은 저장소의 docs/MeerKit_테이블명세서.xlsx를 보세요.

users

컬럼타입 예시필수설명
idBIGINT필수사용자 고유 식별자 (PK). 자동 생성
login_idVARCHAR(30)필수로그인 ID. UNIQUE. API에서는 user_id 라는 이름으로 주고받음
hashed_passwordVARCHAR(255)필수비밀번호 해시값 (argon2). 응답에 넣지 않음
emailVARCHAR(255)필수이메일. UNIQUE
nameVARCHAR(50)필수사용자 이름
is_activeBOOLEAN필수계정 활성화 여부
email_verified_atTIMESTAMPTZ선택이메일 인증 시각 (API: email_verified)
created_atTIMESTAMPTZ필수회원가입 일시
updated_atTIMESTAMPTZ필수마지막 정보 수정 일시
deactivated_atTIMESTAMPTZ선택탈퇴(관리자 삭제 포함) 시각. 값이 있으면 탈퇴한 계정
deleted_atTIMESTAMPTZ선택보관 기간이 지나 개인정보를 지운 시각

id와 user_id의 차이

  • id: 데이터베이스 내부에서 사용자를 구분하는 고유 번호입니다.
  • user_id: 사용자가 로그인할 때 입력하는 ID입니다. 중복되지 않아야 합니다.

roles

컬럼타입 예시설명
idBIGINTPK
codeVARCHAR(30)역할 이름 (MASTER 등). API에서는 name
nameVARCHAR(50)화면 표시용 설명

user_roles

컬럼타입 예시설명
user_idINTEGERusers.id (PK, FK)
role_idINTEGERroles.id (PK, FK)

Relationship

┌───────────────────┐        ┌──────────────┐        ┌──────────────┐
│       users       │ 1    N │  user_roles  │ N    1 │    roles     │
│ id (PK)           ├────────┤ user_id (FK) ├────────┤ id (PK)      │
│ login_id (UNIQUE) │        │ role_id (FK) │        │ code         │
│ hashed_password   │        └──────────────┘        │ name         │
│ email, name       │                                └──────────────┘
│ is_active         │
│ deactivated_at    │
│ deleted_at        │
└───────────────────┘

사용자와 역할은 다대다입니다. 한 사람이 VIEWER와 WRITER를 함께 가질 수 있고, VIEWER가 100명이어도 roles에는 VIEWER가 한 번만 있습니다.

Frontend type

API가 돌려주는 사용자는 역할이 배열로 펼쳐진 형태입니다. 비밀번호 해시는 포함되지 않습니다.

src/meerkit/types.ts
export interface User {
  id: number;
  user_id: string;
  email: string;
  name: string;
  email_verified: boolean;
  roles: { id: number; name: RoleName }[];  // 여러 개일 수 있음
  is_active: boolean;
  created_at: string;
  updated_at: string;
  deactivated_at: string | null;  // 탈퇴 시각
  deleted_at: string | null;      // 개인정보 파기 시각
}

Optional columns

가입 폼의 선택 항목(Signup Form 참고)을 켜면 users에 같은 컬럼이 필요합니다. 기본 스키마에는 포함되어 있지 않습니다.

컬럼타입 예시필수 여부설명
nicknameVARCHAR(30)선택닉네임 (UNIQUE 권장). 있으면 이름 대신 표시
phoneVARCHAR(20)선택전화번호
postcodeVARCHAR(10)선택우편번호 (addressType이 postcode일 때)
addressVARCHAR(255)선택주소 (검색으로 채워짐)
address_detailVARCHAR(255)선택상세 주소 (동·호수 등 직접 입력)
birth_dateDATE선택생년월일
genderVARCHAR(10)선택성별 (male, female, none)
email_verified_atTIMESTAMPTZ선택이메일 인증 완료 시각 (인증 기능 도입 시)

Terms agreements

약관 동의는 누가 어떤 약관에 언제 동의했는지 남겨야 분쟁 때 증빙할 수 있습니다. 가입 요청의 agreed_terms를 받아 서버가 별도 테이블에 저장하는 방식을 권장합니다.

컬럼타입 예시설명
user_idBIGINTusers.id 참조
term_idVARCHAR(30)약관 식별자 (terms, privacy, marketing …)
agreed_atTIMESTAMPTZ동의한 시각
versionVARCHAR(20)동의 당시 약관 버전 (약관 개정 대응)

Email verifications

이메일 인증(signup.emailVerification)을 켰다면 인증번호와 증표를 저장할 곳이 필요합니다.

컬럼타입 예시설명
emailVARCHAR(255)인증 대상 이메일
code_hashVARCHAR(255)인증번호의 해시
expires_atTIMESTAMPTZ인증번호 만료 시각 (예: 3분)
verified_token_hashVARCHAR(255)인증 성공 시 발급한 증표의 해시 (가입 때 확인)
attemptsINT확인 시도 횟수 (무차별 대입 방지)

Password reset tokens

컬럼타입 예시설명
user_idBIGINTusers.id 참조
token_hashVARCHAR(255)토큰의 해시 (원본은 저장하지 않음)
expires_atTIMESTAMPTZ만료 시각
used_atTIMESTAMPTZ사용된 시각 (단일 사용)

AI usage (planned)

멤버 AI 사용량 화면(Member AI Usage, Member AI Usage History)은 현재 프론트 UI만 작업된 상태입니다. 사용량을 기록·집계하는 테이블과 API는 추후 적용 예정입니다.

Future extensions

  • permissions, role_permissions: 세부 기능별 권한이 필요할 때 추가합니다.
  • projects: Owner가 여러 프로젝트를 소유하는 구조가 필요할 때 추가합니다.
  • refresh_tokens: 토큰 해시, 만료, 폐기 시각을 저장합니다.
Roles & PermissionsLogin Lockout
© Meerkit. All rights reserved.GitHub