- 데이터베이스 스키마 및 변경 로그 문서화 - 신규 페이지 개발 가이드 작성 - 모듈 아키텍처 설계 문서 추가 - 성능 최적화 전략 문서화 - 리팩토링 계획 및 진행 상황 정리 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 테스트 페이지
16 KiB
16 KiB
데이터베이스 변경 로그
이 문서는 M-Project 데이터베이스의 모든 변경사항을 추적하고 기록합니다.
변경 로그 템플릿
새로운 변경사항이 있을 때마다 아래 템플릿을 사용하여 기록해주세요.
## [변경 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: 개별 페이지 권한에 따라 접근
- 권한 미설정 시: 기본값 적용
관리자 인터페이스 개선
새로운 기능:
-
페이지 권한 관리 섹션 (
admin.html)- 사용자별 페이지 접근 권한 설정
- 체크박스 방식의 직관적 인터페이스
- 실시간 권한 저장 기능
-
단순화된 권한 JavaScript (
permissions.js)PagePermissionManager클래스canAccessPage()함수- 페이지별 UI 제어 기능
테스트 체크리스트
- 로컬 환경에서 테스트 완료
- 데이터베이스 마이그레이션 성공
- 기존 admin 사용자 권한 유지
- 새로운 권한 관리 UI 구현
- 페이지별 접근 제어 테스트
- API 엔드포인트 구현
영향도 분석
애플리케이션 영향:
- 백엔드 API: 페이지 권한 API 엔드포인트 추가 필요
- 프론트엔드: 권한 체크 로직 단순화
- 기존 데이터: admin 사용자는 모든 권한 유지
호환성:
- 이전 버전과의 호환성: 부분적 유지
- 필요한 코드 변경사항: 권한 체크 함수 변경
사용 방법
-
관리자 권한 설정
http://localhost:16080/admin.html → 페이지 접근 권한 관리 섹션 → 사용자 선택 → 페이지별 체크박스 설정 -
권한 체크 (JavaScript)
// 기존 if (hasPermission('issues.edit')) { ... } // 신규 if (canAccessPage('issues_manage')) { ... }
담당자
- 개발자: AI Assistant
- 검토자: -
- 승인자: -
- 적용일: 2025-10-25
[011] - 권한 시스템 개선 및 애플리케이션 리팩토링 (2025-10-25)
변경 유형
- 새 테이블 추가
- ENUM 타입 수정
- 제약조건 추가/삭제
- 기타: 대규모 리팩토링
변경 내용
요약: 세분화된 권한 시스템 도입 및 통합 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 스크립트
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;
-- ... 기타 함수들
새로운 기능
-
세분화된 권한 시스템
- 4단계 사용자 역할 (super_admin, admin, manager, user)
- 개별 권한 부여/취소 기능
- 권한 기반 UI 동적 제어
-
통합 SPA 애플리케이션
- 단일 페이지 애플리케이션 (app.html)
- 모듈 기반 아키텍처
- 동적 라우팅 시스템
-
모듈화된 코드 구조
- 핵심 시스템 모듈 (core/)
- 기능별 모듈 분리 (modules/)
- 재사용 가능한 컴포넌트
테스트 체크리스트
- 로컬 환경에서 테스트 완료
- 기존 데이터 호환성 확인
- 데이터베이스 마이그레이션 성공
- 새 권한 시스템 테스트
- 통합 앱 기능 테스트
영향도 분석
애플리케이션 영향:
- 백엔드 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)
변경 유형
- 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 스크립트
ALTER TYPE issuecategory ADD VALUE 'etc';
테스트 체크리스트
- 로컬 환경에서 테스트 완료
- 기존 데이터 호환성 확인
- 애플리케이션 코드 업데이트 완료 (이미 존재함)
- API 테스트 완료
- 성능 영향 확인
영향도 분석
애플리케이션 영향:
- 백엔드 API: 영향 없음 (이미 코드에 존재)
- 프론트엔드: 영향 없음 (이미 UI에 존재)
- 기존 데이터: 영향 없음
호환성:
- 이전 버전과의 호환성: 유지
- 필요한 코드 변경사항: 없음
담당자
- 개발자: AI Assistant
- 검토자: -
- 승인자: -
- 적용일: 2025-10-25
[009] - 프로젝트별 일일공수 테이블 추가 (2025-10-25)
변경 유형
- 새 테이블 추가
- 데이터 마이그레이션
변경 내용
요약: 프로젝트별로 일일 공수를 관리하기 위한 project_daily_works 테이블 추가
상세 설명:
- 변경 이유: 기존 daily_works는 전체 공수만 관리하여 프로젝트별 공수 추적 불가
- 영향받는 테이블: 없음 (신규 테이블)
- 새로 추가된 테이블: project_daily_works
- 삭제된 컬럼/테이블: 없음
마이그레이션 정보
- 파일명:
009_add_project_daily_works_table.sql - 실행 순서: 008 이후
- 롤백 가능 여부: Yes
- 데이터 손실 위험: None
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);
테스트 체크리스트
- 로컬 환경에서 테스트 완료
- 기존 데이터 호환성 확인
- 애플리케이션 코드 업데이트 완료
- API 테스트 완료
- 성능 영향 확인
영향도 분석
애플리케이션 영향:
- 백엔드 API: 영향 있음 (새 API 엔드포인트 필요)
- 프론트엔드: 영향 있음 (프로젝트별 공수 입력 UI 필요)
- 기존 데이터: 영향 없음
호환성:
- 이전 버전과의 호환성: 유지
- 필요한 코드 변경사항: 있음
담당자
- 개발자: AI Assistant
- 검토자: -
- 승인자: -
- 적용일: 2025-10-25
[008] - 프로젝트 ID를 BIGINT로 변경 (2025-10-25)
변경 유형
- 기존 테이블 수정
- 컬럼 추가/삭제/수정
변경 내용
요약: 데이터 타입 일관성을 위해 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)
변경 유형
- 기존 테이블 수정
- 컬럼 추가/삭제/수정
- 제약조건 추가/삭제
변경 내용
요약: 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)
변경 유형
- 새 테이블 추가
- 인덱스 추가/삭제
변경 내용
요약: 프로젝트 관리를 위한 projects 테이블 추가
상세 설명:
- 변경 이유: 여러 프로젝트를 관리하고 부적합 사항을 프로젝트별로 분류 필요
- 영향받는 테이블: 없음 (신규 테이블)
- 새로 추가된 테이블: projects
- 삭제된 컬럼/테이블: 없음
마이그레이션 정보
- 파일명:
006_add_projects_table.sql - 실행 순서: 005 이후
- 롤백 가능 여부: Yes
- 데이터 손실 위험: None
담당자
- 개발자: AI Assistant
- 검토자: -
- 승인자: -
- 적용일: 2025-10-25
다음 변경 예정 사항
우선순위 높음
- 부적합 사항 우선순위 필드 추가
- 프로젝트 상태 관리 (진행중, 완료, 보류)
- 알림 시스템 테이블 설계
우선순위 중간
- 파일 첨부 기능 확장
- 감사 로그 테이블 추가
- 사용자 권한 세분화
우선순위 낮음
- 데이터 아카이빙 전략
- 성능 최적화를 위한 파티셔닝
- 전문 검색 기능
변경 승인 프로세스
-
계획 단계
- 요구사항 분석
- 영향도 평가
- 마이그레이션 스크립트 작성
-
검토 단계
- 코드 리뷰
- 테스트 계획 수립
- 롤백 계획 수립
-
테스트 단계
- 로컬 환경 테스트
- 스테이징 환경 테스트
- 성능 테스트
-
배포 단계
- 백업 수행
- 마이그레이션 실행
- 검증 테스트
- 모니터링
문서 관리자: 개발팀
최종 업데이트: 2025-10-25
모든 데이터베이스 변경사항은 이 문서에 기록되어야 하며, 변경 전 반드시 검토 과정을 거쳐야 합니다.