반응형
Atlassian Jira + Confluence + Xray / Zephyr / Bitbucket
- 주요 기능:
- Jira → 요구사항, 이슈, 태스크, 추적, 워크플로우 관리
- Xray/Zephyr → 테스트 계획/케이스/결과 관리
- Confluence → 분석/설계 문서 협업
- Bitbucket → Git 형상관리 + CI/CD
- 특징: 애자일, 스크럼에 특화 / 마켓플레이스 확장성 뛰어남
- 도입 예: 삼성전자, 카카오, 현대차 등
CREATE DATABASE IF NOT EXISTS project_management;
USE project_management;
-- Tenants table: 테넌트(조직) 정보
CREATE TABLE tenants (
tenant_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_name VARCHAR(100) NOT NULL UNIQUE,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Users table: 사용자 정보 (테넌트와 연계)
CREATE TABLE users (
user_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
role ENUM('ADMIN', 'DEVELOPER', 'TESTER', 'MANAGER', 'SYSTEM_ADMIN') DEFAULT 'DEVELOPER',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
CONSTRAINT unique_username_per_tenant UNIQUE (tenant_id, username)
);
-- Projects table: 프로젝트 정보 (테넌트와 연계)
CREATE TABLE projects (
project_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
project_key VARCHAR(10) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
description TEXT,
project_type ENUM('SCRUM', 'KANBAN', 'WATERFALL') NOT NULL,
lead_user_id BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (lead_user_id) REFERENCES users(user_id) ON DELETE SET NULL,
CONSTRAINT unique_project_key_per_tenant UNIQUE (tenant_id, project_key)
);
-- Requirements table: 요구사항 정의 (테넌트와 연계)
CREATE TABLE requirements (
requirement_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
project_id BIGINT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
priority ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') DEFAULT 'MEDIUM',
status ENUM('DRAFT', 'APPROVED', 'REJECTED', 'IN_PROGRESS', 'DONE') DEFAULT 'DRAFT',
created_by BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Workflows table: 워크플로우 정의 (테넌트와 연계)
CREATE TABLE workflows (
workflow_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
project_id BIGINT NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
);
-- Workflow States table: 워크플로우 상태
CREATE TABLE workflow_states (
state_id BIGINT AUTO_INCREMENT PRIMARY KEY,
workflow_id BIGINT NOT NULL,
state_name VARCHAR(50) NOT NULL,
is_initial BOOLEAN DEFAULT FALSE,
is_final BOOLEAN DEFAULT FALSE,
FOREIGN KEY (workflow_id) REFERENCES workflows(workflow_id) ON DELETE CASCADE
);
-- Workflow Transitions table: 상태 전이 규칙
CREATE TABLE workflow_transitions (
transition_id BIGINT AUTO_INCREMENT PRIMARY KEY,
workflow_id BIGINT NOT NULL,
from_state_id BIGINT,
to_state_id BIGINT,
transition_name VARCHAR(50) NOT NULL,
FOREIGN KEY (workflow_id) REFERENCES workflows(workflow_id) ON DELETE CASCADE,
FOREIGN KEY (from_state_id) REFERENCES workflow_states(state_id) ON DELETE CASCADE,
FOREIGN KEY (to_state_id) REFERENCES workflow_states(state_id) ON DELETE CASCADE
);
-- Issues table: 작업 (Story, Task, Bug 등, 테넌트와 연계)
CREATE TABLE issues (
issue_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
project_id BIGINT NOT NULL,
requirement_id BIGINT,
issue_type ENUM('STORY', 'TASK', 'BUG', 'EPIC') NOT NULL,
summary VARCHAR(255) NOT NULL,
description TEXT,
priority ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') DEFAULT 'MEDIUM',
status_id BIGINT NOT NULL,
assignee_id BIGINT,
reporter_id BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
FOREIGN KEY (requirement_id) REFERENCES requirements(requirement_id) ON DELETE SET NULL,
FOREIGN KEY (status_id) REFERENCES workflow_states(state_id) ON DELETE RESTRICT,
FOREIGN KEY (assignee_id) REFERENCES users(user_id) ON DELETE SET NULL,
FOREIGN KEY (reporter_id) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Test Cases table: 테스트 케이스 관리 (테넌트와 연계)
CREATE TABLE test_cases (
test_case_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
project_id BIGINT NOT NULL,
requirement_id BIGINT,
title VARCHAR(255) NOT NULL,
description TEXT,
test_type ENUM('MANUAL', 'AUTOMATED') DEFAULT 'MANUAL',
status ENUM('DRAFT', 'ACTIVE', 'OBSOLETE') DEFAULT 'DRAFT',
created_by BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
FOREIGN KEY (requirement_id) REFERENCES requirements(requirement_id) ON DELETE SET NULL,
FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Test Results table: 테스트 실행 결과
CREATE TABLE test_results (
test_result_id BIGINT AUTO_INCREMENT PRIMARY KEY,
test_case_id BIGINT NOT NULL,
issue_id BIGINT,
result ENUM('PASS', 'FAIL', 'BLOCKED') NOT NULL,
executed_by BIGINT,
execution_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
comments TEXT,
FOREIGN KEY (test_case_id) REFERENCES test_cases(test_case_id) ON DELETE CASCADE,
FOREIGN KEY (issue_id) REFERENCES issues(issue_id) ON DELETE SET NULL,
FOREIGN KEY (executed_by) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Releases table: 배포 정보 (테넌트와 연계)
CREATE TABLE releases (
release_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
project_id BIGINT NOT NULL,
version VARCHAR(50) NOT NULL,
description TEXT,
release_date DATE,
status ENUM('PLANNING', 'RELEASED', 'ARCHIVED') DEFAULT 'PLANNING',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
);
-- Issue-Release Mapping: 작업과 배포 연결
CREATE TABLE issue_release (
issue_id BIGINT NOT NULL,
release_id BIGINT NOT NULL,
PRIMARY KEY (issue_id, release_id),
FOREIGN KEY (issue_id) REFERENCES issues(issue_id) ON DELETE CASCADE,
FOREIGN KEY (release_id) REFERENCES releases(release_id) ON DELETE CASCADE
);
-- Comments table: 작업 및 요구사항에 대한 댓글 (테넌트와 연계)
CREATE TABLE comments (
comment_id BIGINT AUTO_INCREMENT PRIMARY KEY,
tenant_id BIGINT NOT NULL,
issue_id BIGINT,
requirement_id BIGINT,
user_id BIGINT NOT NULL,
comment_text TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(tenant_id) ON DELETE CASCADE,
FOREIGN KEY (issue_id) REFERENCES issues(issue_id) ON DELETE CASCADE,
FOREIGN KEY (requirement_id) REFERENCES requirements(requirement_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
Jira와 같은 프로젝트 관리(Scrum, Kanban), 요구사항 관리, 테스트, 배포 등 SDLC(소프트웨어 개발 라이프사이클) 전 과정을 지원하는 서비스를 위한 데이터베이스 설계를 MariaDB로 구현하겠습니다. 이 데이터베이스는 프로젝트, 요구사항, 작업(이슈), 테스트 케이스, 배포, 사용자, 워크플로우 상태를 관리할 수 있도록 테이블을 구성합니다. 아래는 주요 기능과 요구사항을 반영한 MariaDB 생성문입니다.
### 설계 개요
- **주요 엔터티**:
- **Users**: 시스템 사용자(개발자, 관리자 등).
- **Projects**: 프로젝트 정보(Scrum, Kanban 등).
- **Requirements**: 요구사항 정의 및 관리.
- **Issues**: 작업(Story, Task, Bug 등) 및 워크플로우 상태.
- **TestCases**: 테스트 케이스 및 결과.
- **Releases**: 배포 정보.
- **Workflows**: 워크플로우 상태 전이.
- **관계**:
- 프로젝트는 여러 요구사항, 작업, 테스트 케이스, 배포를 가짐.
- 요구사항은 작업 및 테스트 케이스와 연결(추적성 보장).
- 작업은 워크플로우 상태를 따르며, 사용자에게 할당됨.
- **고려사항**:
- 유연한 워크플로우를 위해 상태와 전이를 별도 테이블로 관리.
- 요구사항과 테스트 케이스 간의 추적 매트릭스 지원.
- Agile(Scrum, Kanban) 보드와 배포 관리 지원.
### MariaDB 생성문
```sql
CREATE DATABASE IF NOT EXISTS project_management;
USE project_management;
-- Users table: 시스템 사용자 정보
CREATE TABLE users (
user_id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
full_name VARCHAR(100),
role ENUM('ADMIN', 'DEVELOPER', 'TESTER', 'MANAGER') DEFAULT 'DEVELOPER',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
-- Projects table: 프로젝트 정보 (Scrum, Kanban 등)
CREATE TABLE projects (
project_id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_key VARCHAR(10) NOT NULL UNIQUE,
name VARCHAR(100) NOT NULL,
description TEXT,
project_type ENUM('SCRUM', 'KANBAN', 'WATERFALL') NOT NULL,
lead_user_id BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (lead_user_id) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Requirements table: 요구사항 정의
CREATE TABLE requirements (
requirement_id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT NOT NULL,
title VARCHAR(255) NOT NULL,
description TEXT,
priority ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') DEFAULT 'MEDIUM',
status ENUM('DRAFT', 'APPROVED', 'REJECTED', 'IN_PROGRESS', 'DONE') DEFAULT 'DRAFT',
created_by BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Workflows table: 워크플로우 상태 정의
CREATE TABLE workflows (
workflow_id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT NOT NULL,
name VARCHAR(100) NOT NULL,
description TEXT,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
);
-- Workflow States table: 워크플로우 상태
CREATE TABLE workflow_states (
state_id BIGINT AUTO_INCREMENT PRIMARY KEY,
workflow_id BIGINT NOT NULL,
state_name VARCHAR(50) NOT NULL,
is_initial BOOLEAN DEFAULT FALSE,
is_final BOOLEAN DEFAULT FALSE,
FOREIGN KEY (workflow_id) REFERENCES workflows(workflow_id) ON DELETE CASCADE
);
-- Workflow Transitions table: 상태 전이 규칙
CREATE TABLE workflow_transitions (
transition_id BIGINT AUTO_INCREMENT PRIMARY KEY,
workflow_id BIGINT NOT NULL,
from_state_id BIGINT,
to_state_id BIGINT,
transition_name VARCHAR(50) NOT NULL,
FOREIGN KEY (workflow_id) REFERENCES workflows(workflow_id) ON DELETE CASCADE,
FOREIGN KEY (from_state_id) REFERENCES workflow_states(state_id) ON DELETE CASCADE,
FOREIGN KEY (to_state_id) REFERENCES workflow_states(state_id) ON DELETE CASCADE
);
-- Issues table: 작업 (Story, Task, Bug 등)
CREATE TABLE issues (
issue_id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT NOT NULL,
requirement_id BIGINT,
issue_type ENUM('STORY', 'TASK', 'BUG', 'EPIC') NOT NULL,
summary VARCHAR(255) NOT NULL,
description TEXT,
priority ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') DEFAULT 'MEDIUM',
status_id BIGINT NOT NULL,
assignee_id BIGINT,
reporter_id BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
FOREIGN KEY (requirement_id) REFERENCES requirements(requirement_id) ON DELETE SET NULL,
FOREIGN KEY (status_id) REFERENCES workflow_states(state_id) ON DELETE RESTRICT,
FOREIGN KEY (assignee_id) REFERENCES users(user_id) ON DELETE SET NULL,
FOREIGN KEY (reporter_id) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Test Cases table: 테스트 케이스 관리
CREATE TABLE test_cases (
test_case_id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT NOT NULL,
requirement_id BIGINT,
title VARCHAR(255) NOT NULL,
description TEXT,
test_type ENUM('MANUAL', 'AUTOMATED') DEFAULT 'MANUAL',
status ENUM('DRAFT', 'ACTIVE', 'OBSOLETE') DEFAULT 'DRAFT',
created_by BIGINT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE,
FOREIGN KEY (requirement_id) REFERENCES requirements(requirement_id) ON DELETE SET NULL,
FOREIGN KEY (created_by) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Test Results table: 테스트 실행 결과
CREATE TABLE test_results (
test_result_id BIGINT AUTO_INCREMENT PRIMARY KEY,
test_case_id BIGINT NOT NULL,
issue_id BIGINT,
result ENUM('PASS', 'FAIL', 'BLOCKED') NOT NULL,
executed_by BIGINT,
execution_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
comments TEXT,
FOREIGN KEY (test_case_id) REFERENCES test_cases(test_case_id) ON DELETE CASCADE,
FOREIGN KEY (issue_id) REFERENCES issues(issue_id) ON DELETE SET NULL,
FOREIGN KEY (executed_by) REFERENCES users(user_id) ON DELETE SET NULL
);
-- Releases table: 배포 정보
CREATE TABLE releases (
release_id BIGINT AUTO_INCREMENT PRIMARY KEY,
project_id BIGINT NOT NULL,
version VARCHAR(50) NOT NULL,
description TEXT,
release_date DATE,
status ENUM('PLANNING', 'RELEASED', 'ARCHIVED') DEFAULT 'PLANNING',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
);
-- Issue-Release Mapping: 작업과 배포 연결
CREATE TABLE issue_release (
issue_id BIGINT NOT NULL,
release_id BIGINT NOT NULL,
PRIMARY KEY (issue_id, release_id),
FOREIGN KEY (issue_id) REFERENCES issues(issue_id) ON DELETE CASCADE,
FOREIGN KEY (release_id) REFERENCES releases(release_id) ON DELETE CASCADE
);
-- Comments table: 작업 및 요구사항에 대한 댓글
CREATE TABLE comments (
comment_id BIGINT AUTO_INCREMENT PRIMARY KEY,
issue_id BIGINT,
requirement_id BIGINT,
user_id BIGINT NOT NULL,
comment_text TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (issue_id) REFERENCES issues(issue_id) ON DELETE CASCADE,
FOREIGN KEY (requirement_id) REFERENCES requirements(requirement_id) ON DELETE CASCADE,
FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE
);
```
---
### 설명
- **데이터베이스 구조**:
- `users`: 사용자 정보 관리(권한, 역할 포함).
- `projects`: 프로젝트 정보(Scrum, Kanban 등) 저장.
- `requirements`: 요구사항 정의 및 상태 관리.
- `workflows`, `workflow_states`, `workflow_transitions`: 유연한 워크플로우 관리.
- `issues`: 작업(Story, Task, Bug 등) 관리, 요구사항과 연결.
- `test_cases`, `test_results`: 테스트 케이스와 결과 관리, 요구사항 추적.
- `releases`, `issue_release`: 배포 정보와 작업 연결.
- `comments`: 요구사항 및 작업에 대한 협업 기록.
- **특징**:
- 요구사항과 테스트 케이스 간 추적성 보장(`requirement_id` 참조).
- 워크플로우 상태 전이를 별도 테이블로 관리하여 유연성 확보.
- 외래 키 제약으로 데이터 무결성 유지.
- Agile 보드(Scrum, Kanban)를 지원하기 위해 `issue_type`, `status_id` 사용.
- **확장성**:
- 새로운 `issue_type`이나 `status` 추가 가능.
- 플러그인처럼 동작할 추가 테이블(예: SLA, 보고서) 확장 가능.
반응형
'테스트 플렛폼' 카테고리의 다른 글
zentao pms 데이터 베이스 생성문 (1) | 2025.08.06 |
---|---|
테스트 관리 시스템 (5) | 2025.08.06 |
테스트 관련 오픈소스 & 상용 서비스 정리 (2) | 2025.08.06 |
React 17.0.2, TypeScript 4.3.5, Recharts 2.1.5 환경에서 사용할 수 있는 Recharts 라이브러리를 이용하여 구현 가능한 차트 종류를 정리 (1) | 2025.07.21 |
Java에서 현재 시간을 "YYYY-MM-DD HH24:MI:SS" 형식으로 포맷하여 문자열 변수 toTime에 넣는 방법 (1) | 2025.06.11 |