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

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: 개별 페이지 권한에 따라 접근
  • 권한 미설정 시: 기본값 적용

관리자 인터페이스 개선

새로운 기능:

  1. 페이지 권한 관리 섹션 (admin.html)

    • 사용자별 페이지 접근 권한 설정
    • 체크박스 방식의 직관적 인터페이스
    • 실시간 권한 저장 기능
  2. 단순화된 권한 JavaScript (permissions.js)

    • PagePermissionManager 클래스
    • canAccessPage() 함수
    • 페이지별 UI 제어 기능

테스트 체크리스트

  • 로컬 환경에서 테스트 완료
  • 데이터베이스 마이그레이션 성공
  • 기존 admin 사용자 권한 유지
  • 새로운 권한 관리 UI 구현
  • 페이지별 접근 제어 테스트
  • API 엔드포인트 구현

영향도 분석

애플리케이션 영향:

  • 백엔드 API: 페이지 권한 API 엔드포인트 추가 필요
  • 프론트엔드: 권한 체크 로직 단순화
  • 기존 데이터: admin 사용자는 모든 권한 유지

호환성:

  • 이전 버전과의 호환성: 부분적 유지
  • 필요한 코드 변경사항: 권한 체크 함수 변경

사용 방법

  1. 관리자 권한 설정

    http://localhost:16080/admin.html
    → 페이지 접근 권한 관리 섹션
    → 사용자 선택 → 페이지별 체크박스 설정
    
  2. 권한 체크 (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;
-- ... 기타 함수들

새로운 기능

  1. 세분화된 권한 시스템

    • 4단계 사용자 역할 (super_admin, admin, manager, user)
    • 개별 권한 부여/취소 기능
    • 권한 기반 UI 동적 제어
  2. 통합 SPA 애플리케이션

    • 단일 페이지 애플리케이션 (app.html)
    • 모듈 기반 아키텍처
    • 동적 라우팅 시스템
  3. 모듈화된 코드 구조

    • 핵심 시스템 모듈 (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

다음 변경 예정 사항

우선순위 높음

  • 부적합 사항 우선순위 필드 추가
  • 프로젝트 상태 관리 (진행중, 완료, 보류)
  • 알림 시스템 테이블 설계

우선순위 중간

  • 파일 첨부 기능 확장
  • 감사 로그 테이블 추가
  • 사용자 권한 세분화

우선순위 낮음

  • 데이터 아카이빙 전략
  • 성능 최적화를 위한 파티셔닝
  • 전문 검색 기능

변경 승인 프로세스

  1. 계획 단계

    • 요구사항 분석
    • 영향도 평가
    • 마이그레이션 스크립트 작성
  2. 검토 단계

    • 코드 리뷰
    • 테스트 계획 수립
    • 롤백 계획 수립
  3. 테스트 단계

    • 로컬 환경 테스트
    • 스테이징 환경 테스트
    • 성능 테스트
  4. 배포 단계

    • 백업 수행
    • 마이그레이션 실행
    • 검증 테스트
    • 모니터링

문서 관리자: 개발팀
최종 업데이트: 2025-10-25

모든 데이터베이스 변경사항은 이 문서에 기록되어야 하며, 변경 전 반드시 검토 과정을 거쳐야 합니다.