본문으로 건너뛰기

데이터베이스 구조

최종 업데이트: 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개) : (여러 개) 만들어진 그림/영상 기록: 하나의 그림/영상 만드는 방법은 여러 개의 그림/영상을 만드는 데 사용될 수 있습니다.