Files
M-Project/DB_CHANGE_LOG.md
Hyungi Ahn d3333c4dc2 docs: 프로젝트 문서화 및 개발 가이드 추가
- 데이터베이스 스키마 및 변경 로그 문서화
- 신규 페이지 개발 가이드 작성
- 모듈 아키텍처 설계 문서 추가
- 성능 최적화 전략 문서화
- 리팩토링 계획 및 진행 상황 정리

Documentation:
- DATABASE_SCHEMA.md: 전체 DB 스키마 구조
- DB_CHANGE_LOG.md: 마이그레이션 변경 이력
- DEVELOPMENT_GUIDE.md: 신규 기능 개발 표준
- MODULE_ARCHITECTURE.md: 프론트엔드 모듈 구조
- PERFORMANCE_OPTIMIZATION.md: 성능 최적화 가이드
- REFACTORING_PLAN.md: 리팩토링 진행 상황

Test Files:
- app.html, app.js: SPA 테스트 파일
- test_api.html: API 테스트 페이지
2025-10-25 09:01:54 +09:00

550 lines
16 KiB
Markdown

# 데이터베이스 변경 로그
이 문서는 M-Project 데이터베이스의 모든 변경사항을 추적하고 기록합니다.
---
## 변경 로그 템플릿
새로운 변경사항이 있을 때마다 아래 템플릿을 사용하여 기록해주세요.
```markdown
## [변경 ID] - [변경 제목] (YYYY-MM-DD)
### 변경 유형
- [ ] 새 테이블 추가
- [ ] 기존 테이블 수정
- [ ] 컬럼 추가/삭제/수정
- [ ] 인덱스 추가/삭제
- [ ] 제약조건 추가/삭제
- [ ] ENUM 타입 수정
- [ ] 데이터 마이그레이션
- [ ] 성능 최적화
- [ ] 기타: ___________
### 변경 내용
**요약:** [변경사항을 한 줄로 요약]
**상세 설명:**
- 변경 이유:
- 영향받는 테이블:
- 새로 추가된 컬럼/테이블:
- 삭제된 컬럼/테이블:
### 마이그레이션 정보
- **파일명:** `XXX_description.sql`
- **실행 순서:** [이전 마이그레이션 이후 순서]
- **롤백 가능 여부:** [Yes/No]
- **데이터 손실 위험:** [High/Medium/Low/None]
### SQL 스크립트
```sql
-- 마이그레이션 SQL 코드
```
### 테스트 체크리스트
- [ ] 로컬 환경에서 테스트 완료
- [ ] 기존 데이터 호환성 확인
- [ ] 애플리케이션 코드 업데이트 완료
- [ ] API 테스트 완료
- [ ] 성능 영향 확인
### 영향도 분석
**애플리케이션 영향:**
- 백엔드 API: [영향 있음/없음]
- 프론트엔드: [영향 있음/없음]
- 기존 데이터: [영향 있음/없음]
**호환성:**
- 이전 버전과의 호환성: [유지/중단]
- 필요한 코드 변경사항: [있음/없음]
### 담당자
- **개발자:** [이름]
- **검토자:** [이름]
- **승인자:** [이름]
- **적용일:** YYYY-MM-DD
---
```
---
## 변경 히스토리
### [012] - 권한 시스템 단순화 및 페이지별 접근 권한 구현 (2025-10-25)
#### 변경 유형
- [x] 테이블 구조 변경
- [x] ENUM 타입 수정
- [x] 기존 테이블 삭제
- [x] 새 테이블 추가
#### 변경 내용
**요약:** 복잡한 4단계 권한을 admin/user 구조로 단순화하고 페이지별 접근 권한 시스템 도입
**상세 설명:**
- 변경 이유: 사용자 요청에 따른 권한 시스템 단순화
- 삭제된 테이블: user_permissions (복잡한 권한 테이블)
- 새로 추가된 테이블: user_page_permissions (페이지별 권한)
- 역할 단순화: super_admin, manager → admin으로 통합
- 새로운 권한 방식: 페이지별 접근 허용/차단
#### 마이그레이션 정보
- **파일명:** `012_simplify_permissions.sql`
- **실행 순서:** 011 이후
- **롤백 가능 여부:** Partial (기존 복잡한 권한 데이터 손실)
- **데이터 손실 위험:** Medium (기존 권한 설정 초기화)
#### SQL 스크립트
```sql
-- 기존 복잡한 권한 테이블 삭제
DROP TABLE IF EXISTS user_permissions CASCADE;
-- 페이지별 접근 권한 테이블 생성
CREATE TABLE user_page_permissions (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
page_name VARCHAR(50) NOT NULL,
can_access BOOLEAN DEFAULT FALSE,
granted_by_id INTEGER REFERENCES users(id),
granted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
notes TEXT,
UNIQUE(user_id, page_name)
);
-- 페이지 접근 권한 체크 함수
CREATE OR REPLACE FUNCTION check_page_access(p_user_id INTEGER, p_page_name VARCHAR) RETURNS BOOLEAN;
-- 기존 복잡한 역할을 admin으로 통합
UPDATE users SET role = 'admin' WHERE role IN ('super_admin', 'manager');
```
#### 새로운 페이지 권한 시스템
**기본 페이지 목록:**
- `issues_create`: 부적합 등록 (기본: 허용)
- `issues_view`: 부적합 조회 (기본: 허용)
- `issues_manage`: 부적합 관리 (기본: 차단)
- `projects_manage`: 프로젝트 관리 (기본: 차단)
- `daily_work`: 일일 공수 (기본: 차단)
- `reports`: 보고서 (기본: 차단)
**권한 규칙:**
- **admin**: 모든 페이지 접근 가능
- **user**: 개별 페이지 권한에 따라 접근
- 권한 미설정 시: 기본값 적용
#### 관리자 인터페이스 개선
**새로운 기능:**
1. **페이지 권한 관리 섹션** (`admin.html`)
- 사용자별 페이지 접근 권한 설정
- 체크박스 방식의 직관적 인터페이스
- 실시간 권한 저장 기능
2. **단순화된 권한 JavaScript** (`permissions.js`)
- `PagePermissionManager` 클래스
- `canAccessPage()` 함수
- 페이지별 UI 제어 기능
#### 테스트 체크리스트
- [x] 로컬 환경에서 테스트 완료
- [x] 데이터베이스 마이그레이션 성공
- [x] 기존 admin 사용자 권한 유지
- [x] 새로운 권한 관리 UI 구현
- [ ] 페이지별 접근 제어 테스트
- [ ] API 엔드포인트 구현
#### 영향도 분석
**애플리케이션 영향:**
- 백엔드 API: 페이지 권한 API 엔드포인트 추가 필요
- 프론트엔드: 권한 체크 로직 단순화
- 기존 데이터: admin 사용자는 모든 권한 유지
**호환성:**
- 이전 버전과의 호환성: 부분적 유지
- 필요한 코드 변경사항: 권한 체크 함수 변경
#### 사용 방법
1. **관리자 권한 설정**
```
http://localhost:16080/admin.html
→ 페이지 접근 권한 관리 섹션
→ 사용자 선택 → 페이지별 체크박스 설정
```
2. **권한 체크 (JavaScript)**
```javascript
// 기존
if (hasPermission('issues.edit')) { ... }
// 신규
if (canAccessPage('issues_manage')) { ... }
```
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
### [011] - 권한 시스템 개선 및 애플리케이션 리팩토링 (2025-10-25)
#### 변경 유형
- [x] 새 테이블 추가
- [x] ENUM 타입 수정
- [x] 제약조건 추가/삭제
- [x] 기타: 대규모 리팩토링
#### 변경 내용
**요약:** 세분화된 권한 시스템 도입 및 통합 SPA 애플리케이션으로 리팩토링
**상세 설명:**
- 변경 이유: 단순한 admin/user 구조의 한계, 코드 중복 및 유지보수성 문제 해결
- 영향받는 테이블: users (role 확장), user_permissions (신규)
- 새로 추가된 테이블: user_permissions
- 새로 추가된 역할: super_admin, manager
- 새로 추가된 파일: app.html, permissions.js, app.js
#### 마이그레이션 정보
- **파일명:** `011_add_permission_system.sql`
- **실행 순서:** 010 이후
- **롤백 가능 여부:** Partial (새 역할은 롤백 불가)
- **데이터 손실 위험:** Low
#### SQL 스크립트
```sql
ALTER TYPE userrole ADD VALUE 'super_admin';
ALTER TYPE userrole ADD VALUE 'manager';
CREATE TABLE user_permissions (
id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
permission VARCHAR(50) NOT NULL,
granted BOOLEAN DEFAULT TRUE,
granted_by_id INTEGER REFERENCES users(id),
granted_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
revoked_at TIMESTAMP WITH TIME ZONE,
notes TEXT,
UNIQUE(user_id, permission)
);
-- 권한 체크 함수들 생성
CREATE OR REPLACE FUNCTION check_user_permission(p_user_id INTEGER, p_permission VARCHAR) RETURNS BOOLEAN;
-- ... 기타 함수들
```
#### 새로운 기능
1. **세분화된 권한 시스템**
- 4단계 사용자 역할 (super_admin, admin, manager, user)
- 개별 권한 부여/취소 기능
- 권한 기반 UI 동적 제어
2. **통합 SPA 애플리케이션**
- 단일 페이지 애플리케이션 (app.html)
- 모듈 기반 아키텍처
- 동적 라우팅 시스템
3. **모듈화된 코드 구조**
- 핵심 시스템 모듈 (core/)
- 기능별 모듈 분리 (modules/)
- 재사용 가능한 컴포넌트
#### 테스트 체크리스트
- [x] 로컬 환경에서 테스트 완료
- [x] 기존 데이터 호환성 확인
- [x] 데이터베이스 마이그레이션 성공
- [ ] 새 권한 시스템 테스트
- [ ] 통합 앱 기능 테스트
#### 영향도 분석
**애플리케이션 영향:**
- 백엔드 API: 권한 체크 로직 업데이트 필요
- 프론트엔드: 완전히 새로운 구조로 변경
- 기존 데이터: 호환성 유지 (기존 admin → super_admin 자동 변경)
**호환성:**
- 이전 버전과의 호환성: 부분적 유지 (API 호환)
- 필요한 코드 변경사항: 대규모 변경
#### 새로운 파일 목록
**프론트엔드:**
- `app.html` - 통합 메인 애플리케이션
- `static/js/core/permissions.js` - 권한 관리 시스템
- `static/js/app.js` - 메인 애플리케이션 로직
**문서:**
- `REFACTORING_PLAN.md` - 리팩토링 계획서
- `MODULE_ARCHITECTURE.md` - 모듈 아키텍처 문서
#### 권한 매트릭스
| 기능 | super_admin | admin | manager | user |
|------|-------------|--------|---------|------|
| 부적합 등록 | ✅ | ✅ | ✅ | ✅ |
| 부적합 조회 | ✅ | ✅ | ✅ | ✅ |
| 부적합 수정 | ✅ | ✅ | ✅ | ❌ |
| 부적합 삭제 | ✅ | ✅ | ❌ | ❌ |
| 프로젝트 생성 | ✅ | ✅ | ❌ | ❌ |
| 프로젝트 수정 | ✅ | ✅ | ❌ | ❌ |
| 프로젝트 삭제 | ✅ | ❌ | ❌ | ❌ |
| 사용자 관리 | ✅ | ❌ | ❌ | ❌ |
| 권한 관리 | ✅ | ❌ | ❌ | ❌ |
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
### [010] - 부적합 카테고리에 'etc' 값 추가 (2025-10-25)
#### 변경 유형
- [x] ENUM 타입 수정
#### 변경 내용
**요약:** issuecategory ENUM 타입에 'etc' (기타) 값 추가하여 백엔드 코드와 DB 불일치 해결
**상세 설명:**
- 변경 이유: 백엔드 models.py에는 'etc' 값이 있지만 DB enum에는 없어서 INSERT 시 에러 발생
- 영향받는 테이블: issues (category 컬럼)
- 새로 추가된 값: issuecategory.etc
- 삭제된 컬럼/테이블: 없음
#### 마이그레이션 정보
- **파일명:** `010_add_etc_category.sql`
- **실행 순서:** 009 이후
- **롤백 가능 여부:** No (PostgreSQL enum 값 삭제 불가)
- **데이터 손실 위험:** None
#### SQL 스크립트
```sql
ALTER TYPE issuecategory ADD VALUE 'etc';
```
#### 테스트 체크리스트
- [x] 로컬 환경에서 테스트 완료
- [x] 기존 데이터 호환성 확인
- [x] 애플리케이션 코드 업데이트 완료 (이미 존재함)
- [x] API 테스트 완료
- [x] 성능 영향 확인
#### 영향도 분석
**애플리케이션 영향:**
- 백엔드 API: 영향 없음 (이미 코드에 존재)
- 프론트엔드: 영향 없음 (이미 UI에 존재)
- 기존 데이터: 영향 없음
**호환성:**
- 이전 버전과의 호환성: 유지
- 필요한 코드 변경사항: 없음
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
### [009] - 프로젝트별 일일공수 테이블 추가 (2025-10-25)
#### 변경 유형
- [x] 새 테이블 추가
- [x] 데이터 마이그레이션
#### 변경 내용
**요약:** 프로젝트별로 일일 공수를 관리하기 위한 project_daily_works 테이블 추가
**상세 설명:**
- 변경 이유: 기존 daily_works는 전체 공수만 관리하여 프로젝트별 공수 추적 불가
- 영향받는 테이블: 없음 (신규 테이블)
- 새로 추가된 테이블: project_daily_works
- 삭제된 컬럼/테이블: 없음
#### 마이그레이션 정보
- **파일명:** `009_add_project_daily_works_table.sql`
- **실행 순서:** 008 이후
- **롤백 가능 여부:** Yes
- **데이터 손실 위험:** None
#### SQL 스크립트
```sql
CREATE TABLE project_daily_works (
id SERIAL PRIMARY KEY,
date DATE NOT NULL,
project_id BIGINT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
hours FLOAT NOT NULL,
created_by_id INTEGER NOT NULL REFERENCES users(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_project_daily_works_date ON project_daily_works(date);
CREATE INDEX idx_project_daily_works_project_id ON project_daily_works(project_id);
CREATE INDEX idx_project_daily_works_date_project ON project_daily_works(date, project_id);
```
#### 테스트 체크리스트
- [x] 로컬 환경에서 테스트 완료
- [x] 기존 데이터 호환성 확인
- [ ] 애플리케이션 코드 업데이트 완료
- [ ] API 테스트 완료
- [x] 성능 영향 확인
#### 영향도 분석
**애플리케이션 영향:**
- 백엔드 API: 영향 있음 (새 API 엔드포인트 필요)
- 프론트엔드: 영향 있음 (프로젝트별 공수 입력 UI 필요)
- 기존 데이터: 영향 없음
**호환성:**
- 이전 버전과의 호환성: 유지
- 필요한 코드 변경사항: 있음
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
### [008] - 프로젝트 ID를 BIGINT로 변경 (2025-10-25)
#### 변경 유형
- [x] 기존 테이블 수정
- [x] 컬럼 추가/삭제/수정
#### 변경 내용
**요약:** 데이터 타입 일관성을 위해 project_id를 BIGINT로 변경
**상세 설명:**
- 변경 이유: 향후 대용량 데이터 처리 및 타입 일관성 확보
- 영향받는 테이블: projects, issues
- 수정된 컬럼: projects.id, issues.project_id
- 삭제된 컬럼/테이블: 없음
#### 마이그레이션 정보
- **파일명:** `008_fix_project_id_bigint.sql`
- **실행 순서:** 007 이후
- **롤백 가능 여부:** Yes (데이터 범위 내에서)
- **데이터 손실 위험:** None
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
### [007] - 부적합 사항에 프로젝트 ID 추가 (2025-10-25)
#### 변경 유형
- [x] 기존 테이블 수정
- [x] 컬럼 추가/삭제/수정
- [x] 제약조건 추가/삭제
#### 변경 내용
**요약:** issues 테이블에 project_id 컬럼 추가하여 프로젝트별 부적합 사항 관리
**상세 설명:**
- 변경 이유: 부적합 사항을 프로젝트별로 분류하여 관리 필요
- 영향받는 테이블: issues
- 새로 추가된 컬럼: issues.project_id
- 삭제된 컬럼/테이블: 없음
#### 마이그레이션 정보
- **파일명:** `007_add_project_id_to_issues.sql`
- **실행 순서:** 006 이후
- **롤백 가능 여부:** Yes
- **데이터 손실 위험:** None
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
### [006] - 프로젝트 테이블 추가 (2025-10-25)
#### 변경 유형
- [x] 새 테이블 추가
- [x] 인덱스 추가/삭제
#### 변경 내용
**요약:** 프로젝트 관리를 위한 projects 테이블 추가
**상세 설명:**
- 변경 이유: 여러 프로젝트를 관리하고 부적합 사항을 프로젝트별로 분류 필요
- 영향받는 테이블: 없음 (신규 테이블)
- 새로 추가된 테이블: projects
- 삭제된 컬럼/테이블: 없음
#### 마이그레이션 정보
- **파일명:** `006_add_projects_table.sql`
- **실행 순서:** 005 이후
- **롤백 가능 여부:** Yes
- **데이터 손실 위험:** None
#### 담당자
- **개발자:** AI Assistant
- **검토자:** -
- **승인자:** -
- **적용일:** 2025-10-25
---
## 다음 변경 예정 사항
### 우선순위 높음
- [ ] 부적합 사항 우선순위 필드 추가
- [ ] 프로젝트 상태 관리 (진행중, 완료, 보류)
- [ ] 알림 시스템 테이블 설계
### 우선순위 중간
- [ ] 파일 첨부 기능 확장
- [ ] 감사 로그 테이블 추가
- [ ] 사용자 권한 세분화
### 우선순위 낮음
- [ ] 데이터 아카이빙 전략
- [ ] 성능 최적화를 위한 파티셔닝
- [ ] 전문 검색 기능
---
## 변경 승인 프로세스
1. **계획 단계**
- 요구사항 분석
- 영향도 평가
- 마이그레이션 스크립트 작성
2. **검토 단계**
- 코드 리뷰
- 테스트 계획 수립
- 롤백 계획 수립
3. **테스트 단계**
- 로컬 환경 테스트
- 스테이징 환경 테스트
- 성능 테스트
4. **배포 단계**
- 백업 수행
- 마이그레이션 실행
- 검증 테스트
- 모니터링
---
**문서 관리자:** 개발팀
**최종 업데이트:** 2025-10-25
> 모든 데이터베이스 변경사항은 이 문서에 기록되어야 하며, 변경 전 반드시 검토 과정을 거쳐야 합니다.