데이터베이스 구조
최종 업데이트: 2025년 6월 29일
이 문서는 SurfAI 프로젝트에서 사용하는 데이터 저장소(PostgreSQL
)가 어떻게 구성되어 있는지, 어떤 중요한 정보들이 저장되는지, 그리고 정보들끼리 어떻게 연결되어 있는지 쉽게 설명해 드립니다. 모든 정보는 프로그램에서 사용하는 양식(TypeORM
엔티티)을 기준으로 설명됩니다.
1. 간단한 설명
- 데이터 저장소 종류:
PostgreSQL
- 데이터 관리 도구:
TypeORM
- 주요 정보 종류:
사용자 정보
,그림/영상 만드는 방법
,만들어진 그림/영상 기록
2. 각 정보 종류별 자세한 내용
가. 사용자 정보
(users
테이블)
사용자들의 계정 정보를 저장하는 가장 중요한 부분입니다. Google
로그인과 일반 이메일/비밀번호 로그인을 모두 지원합니다.
항목 | 종류 | 규칙 | 설명 |
---|---|---|---|
id | 숫자 | 고유 번호, 자동 증가 | 사용자를 구분하는 고유한 번호 |
email | 글자 | 중복 불가 | 사용자의 이메일 주소. 로그인할 때 사용됩니다. |
displayName | 글자 | 꼭 있어야 함 | 사용자에게 보여질 이름 (별명). |
password | 글자 | 비어있을 수 있음, 숨김 | 일반 회원가입 시 사용된 비밀번호의 암호화된 값. |
googleId | 글자 | 중복 불가, 비어있을 수 있음 | Google 로그인 시 사용자의 고유 Google ID . |
imageUrl | 긴 글자 | 비어있을 수 있음 | 사용자의 프로필 사진 주소 (Google 또는 기본 이미지) |
role | 선택 | 꼭 있어야 함, 기본값='user' | 사용자의 역할. (admin 또는 user ) |
currentHashedRefreshToken | 글자 | 비어있을 수 있음, 숨김 | JWT Refresh Token 의 암호화된 값. 로그아웃 시 지워집니다. |
createdAt | 날짜/시간 | 꼭 있어야 함 | 정보가 처음 만들어진 시간 (자동으로 기록됨) |
updatedAt | 날짜/시간 | 꼭 있어야 함 | 정보가 마지막으로 수정된 시간 (자동으로 업데이트됨) |
나. 그림/영상 만드는 방법
(workflows
테이블)
그림/영상을 만드는 방법(템플릿)과, 사용자가 자신만의 설정으로 저장한 방법들을 모두 관리합니다.
항목 | 종류 | 규칙 | 설명 |
---|---|---|---|
id | 숫자 | 고유 번호, 자동 증가 | 그림/영상 만드는 방법의 고유한 번호 |
name | 글자 | 꼭 있어야 함 | 그림/영상 만드는 방법의 이름. |
description | 긴 글자 | 비어있을 수 있음 | 그림/영상 만드는 방법에 대한 자세한 설명. |
definition | 복잡한 정보 | 비어있을 수 있음 | AI 그림/영상 도구(ComfyUI )의 원래 설정 파일. (주로 '템플릿'일 때 사용) |
parameter_map | 복잡한 정보 | 비어있을 수 있음 | 사용자가 바꿀 수 있는 설정 값들과 실제 프로그램의 연결 정보. |
previewImageUrl | 긴 글자 | 비어있을 수 있음 | 목록에서 보여줄 템플릿의 미리보기 그림 주소. |
tags | 글자 목록 | 비어있을 수 있음 | 템플릿을 분류하기 위한 단어들. |
isTemplate | 예/아니오 | 꼭 있어야 함, 기본값=예 | 예 이면 관리자가 만든 템플릿, 아니오 이면 사용자가 저장한 방법. |
isPublicTemplate | 예/아니오 | 꼭 있어야 함, 기본값=아니오 | 예 이면 모든 사용자에게 공개되는 템플릿. |
ownerUserId | 숫자 | 비어있을 수 있음, 연결 (users.id ) | 이 그림/영상 만드는 방법의 주인이 되는 사용자 번호. |
sourceTemplateId | 숫자 | 비어있을 수 있음, 연결 (workflows.id ) | 이 방법이 어떤 원래 템플릿에서 만들어졌는지의 번호. ('사용자가 저장한 방법'일 때 사용) |
createdAt | 날짜/시간 | 꼭 있어야 함 | 정보가 처음 만들어진 시간 |
updatedAt | 날짜/시간 | 꼭 있어야 함 | 정보가 마지막으로 수정된 시간 |
다. 만들어진 그림/영상 기록
(generated_outputs
테이블)
사용자가 만든 모든 그림/영상에 대한 정보들을 저장하는 곳입니다.
항목 | 종류 | 규칙 | 설명 |
---|---|---|---|
id | 숫자 | 고유 번호, 자동 증가 | 만들어진 그림/영상의 고유한 번호 |
ownerUserId | 숫자 | 꼭 있어야 함, 연결 (users.id ) | 이 그림/영상을 만든 사용자의 번호. |
sourceWorkflowId | 숫자 | 꼭 있어야 함, 연결 (workflows.id ) | 그림/영상을 만들 때 사용된 방법의 번호. |
r2Url | 긴 글자 | 꼭 있어야 함 | 그림/영상 파일이 저장된 곳의 주소. |
originalFilename | 글자 | 꼭 있어야 함 | ComfyUI 가 만든 원래 파일 이름. |
mimeType | 글자 | 꼭 있어야 함 | 파일의 종류. (예: image/png , video/mp4 ) |
promptId | 글자 | 꼭 있어야 함, 찾기 쉽게 | 그림/영상 만드는 작업을 구분하는 AI 의 고유 번호. |
usedParameters | 복잡한 정보 | 비어있을 수 있음 | 그림/영상을 만들 때 사용자가 입력한 설정 값들의 기록. |
duration | 소수점 숫자 | 비어있을 수 있음 | 만들어진 것이 영상일 경우, 영상의 길이(초 단위). |
createdAt | 날짜/시간 | 꼭 있어야 함 | 정보가 처음 만들어진 시간 |
3. 정보들 간의 연결 (간단한 그림)
- 사용자 (1명) : (여러 개) 그림/영상 만드는 방법: 한 명의 사용자는 여러 개의 자신만의 그림/영상 만드는 방법을 가질 수 있습니다.
- 사용자 (1명) : (여러 개) 만들어진 그림/영상 기록: 한 명의 사용자는 여러 개의 그림/영상을 만들 수 있습니다.
- 그림/영상 만드는 방법 (1개) : (여러 개) 그림/영상 만드는 방법: 하나의 원래 템플릿은 여러 사용자가 자신만의 방법으로 저장하여 사용할 수 있습니다. (자기 자신을 참조하는 연결)
- 그림/영상 만드는 방법 (1개) : (여러 개) 만들어진 그림/영상 기록: 하나의 그림/영상 만드는 방법은 여러 개의 그림/영상을 만드는 데 사용될 수 있습니다.