콘텐츠로 이동

4. 데이터베이스 설계

dcamp 웹사이트는 Drupal의 엔티티(Entity) 시스템을 기반으로 데이터를 관리합니다. 엔티티는 “데이터의 단위”를 의미하며, 각 엔티티는 여러 “번들(유형)“로 세분화됩니다.

예를 들어, “포트폴리오”라는 엔티티 안에 “스타트업”, “파트너사”, “캠퍼스”라는 번들이 있습니다.

┌─────────────────────────────────────────────────────────────────┐
│ 데이터 구조 개요 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Node │ │ Portfolio │ │ DcampEvent │ │
│ │ (콘텐츠) │ │ (포트폴리오) │ │ (이벤트) │ │
│ ├─────────────┤ ├─────────────┤ ├─────────────┤ │
│ │ - notice │ │ - startup │ │ - applicant │ │
│ │ - insight │ │ - partner │ │ - application│ │
│ │ - page │ │ - campus │ │ - apply │ │
│ └─────────────┘ └─────────────┘ │ - judge │ │
│ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ User │ │ Webform │ │
│ │ (회원) │ │ (신청서) │ │
│ ├─────────────┤ ├─────────────┤ │
│ │ - user │ │ (양식별로 │ │
│ │ (일반회원) │ │ 동적 생성) │ │
│ │ - manager │ │ │ │
│ │ (관리자) │ │ │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

일반적인 콘텐츠를 관리하는 기본 엔티티입니다.

번들용도주요 필드
notice공지사항제목, 본문, 첨부파일, 카테고리
insight인사이트 (뉴스/아티클)제목, 본문, 썸네일, 태그, 작성자
page일반 페이지제목, 본문, 이미지
page_setting페이지 설정메인/서브 페이지별 설정값

dcamp와 관련된 회사/기관 정보를 관리하는 자체 개발 엔티티입니다.

번들용도주요 필드
startup스타트업 정보회사명, 로고, 소개, 대표자, 멤버, 투자정보, 태그
partner파트너사/투자사회사명, 로고, 소개, 유형, 프로그램
campus캠퍼스 정보이름, 위치, 소개, 이미지

스타트업 데이터 구조 상세:

[스타트업 Portfolio]
├── 기본 정보
│ ├── 회사명 (title)
│ ├── 법인명 (field_inc_name)
│ ├── 로고 (field_st_logo)
│ ├── 요약 (field_st_summary)
│ └── 소개 (field_st_about)
├── 대표자 정보
│ ├── 대표자명 (field_owner_name)
│ ├── 대표자 이메일 (field_owner_email)
│ └── 대표자 생년월일 (field_owner_birth)
├── 회사 정보
│ ├── 설립일 (field_inc_date)
│ ├── 사업자등록번호 (field_inc_tax_id)
│ ├── 홈페이지 (field_st_homepage)
│ └── 산업 분야 (field_st_industry)
├── 입주 정보
│ ├── 입주위치 (field_campus) → Portfolio:campus 참조
│ ├── 입주 날짜 (field_tenant_date)
│ └── 층 정보 (field_floor)
└── 투자/재무 정보
├── 투자유치 (field_attract_investment)
├── 기업가치 (field_inc_value)
└── 매출 (field_sales)

프로그램 운영과 심사를 위한 자체 개발 엔티티입니다.

번들용도설명
applicant참가자 모집형행사 참여 신청 (ex: 세미나)
application심사형 프로그램신청 → 심사 → 선발 (ex: 데모데이)
apply신청 내역회원이 제출한 신청서 연결
judge심사 정보심사위원 배정, 점수 기록
assign_judge심사위원 배정심사위원-신청서 연결
mailhistory메일 발송 이력발송된 안내 메일 기록

심사형 프로그램 흐름:

[프로그램 등록] [신청서 접수] [심사위원 배정] [심사 진행] [결과 발표]
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
application ──────► apply ──────────► assign_judge ─────► judge ──────► 메일 발송
(프로그램) (신청내역) (심사위원 배정) (점수 입력) (mailhistory)

회원 정보를 관리하며, 일반 회원과 관리자를 완전히 분리합니다.

번들용도특징
user일반 회원dcamp.kr에서 가입, 프로그램 신청 가능
manager관리자admin.dcamp.kr 전용, 시스템 관리

회원 데이터 구조:

[일반 회원 - user.user]
├── 기본 정보
│ ├── 이메일 (mail) - 로그인 ID
│ ├── 이름 (field_name)
│ └── 소속 회사명 (field_company) - 텍스트
├── 동의 정보
│ ├── 개인정보 동의 (field_private)
│ └── 이용약관 동의 (field_terms)
└── 인증 정보
├── 소셜 로그인 타입 (field_social)
└── 소셜 ID (field_social_id)
[관리자 - user.manager]
├── 기본 정보
│ ├── 이메일 (mail)
│ ├── 이름 (field_name)
│ └── 소속 팀 (field_team)
└── 권한 정보
└── 역할 (roles) - 부서/담당별 권한

동적으로 생성되는 양식 데이터입니다. 프로그램마다 다른 양식을 만들 수 있습니다.

구성 요소설명
Webform양식 정의 (질문 항목, 순서)
WebformSubmission제출된 답변 데이터

┌──────────────────────────────────────────────────────────────────────────┐
│ 엔티티 관계도 │
└──────────────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐
│ User │ │ Portfolio │
│ (회원) │ │(스타트업 등) │
└──────┬──────┘ └──────┬──────┘
│ │
│ 신청자/심사위원 │ 입주위치, 파트너
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────────────────┐
│ DcampEvent (프로그램) │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ application │ ◄─── │ apply │ ───► │ judge │ │
│ │ (프로그램) │ │ (신청내역) │ │ (심사) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Webform │ │ User │ │ User │ │
│ │ (신청양식) │ │ (신청자) │ │ (심사위원) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────────┐
│ Portfolio 내부 관계 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ │
│ │ startup │ ───► field_campus ───► campus (입주위치) │
│ │ (스타트업) │ ───► field_partner ──► partner (파트너사) │
│ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ partner │ │ campus │ │
│ │ (파트너사) │ │ (캠퍼스) │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘

주요 참조 관계:

엔티티필드참조 대상설명
dcamp_event:applyfield_member_iduser신청자
dcamp_event:applyfield_event_iddcamp_event:application프로그램
dcamp_event:judgefield_judgeuser (role=judge)심사위원
dcamp_event:judgefield_event_iddcamp_event:application프로그램
dcamp_event:applicationfield_webformwebform신청 양식
dcamp_event:applicationfield_centerportfolio:campus센터
portfolio:startupfield_campusportfolio:campus입주위치
portfolio:startupfield_partnerportfolio:partner파트너사

시스템에는 부서/업무별로 세분화된 관리자 역할이 정의되어 있습니다.

역할 ID설명주요 권한
administrator최고 관리자모든 권한
staff일반 직원기본 콘텐츠 관리
bizops비즈옵스팀스타트업, 프로그램 관리
investment투자팀투자 관련 정보 관리
growth그로스팀프로그램 운영
membership멤버십팀회원 관리
space공간팀캠퍼스 관리
planning기획팀콘텐츠, 페이지 관리
judge심사위원심사 기능만 접근

← 이전: 3. 기술 스택 | 다음: 5. API 명세 →