그룹웨어 관리 시스템 메뉴얼

GnuBoard 기반 그룹웨어 관리 시스템 완전 가이드

1. 시스템 개요

주요 기능

사용자 관리

회원 추가, 수정, 삭제 및 권한 관리 기능을 제공합니다.

부서 관리

조직 구조에 맞는 부서 생성 및 계층 구조 관리가 가능합니다.

데이터 백업

전체 데이터베이스 테이블에 대한 백업 기능을 제공합니다.

보안 기능

CSRF 토큰, 권한 검증 등 강력한 보안 기능을 내장했습니다.

시스템 요구사항

구분 최소 요구사항 권장 사항
PHP 버전 PHP 7.0 이상 PHP 8.0 이상
MySQL MySQL 5.7 이상 MySQL 8.0 이상
GnuBoard GnuBoard 5.4 이상 최신 버전
웹서버 Apache 2.4 / Nginx Apache 2.4 / Nginx 최신

2. 설치 및 설정

설치 과정

  1. 파일 업로드
    그룹웨어 관리 시스템 파일들을 GnuBoard 루트 디렉토리의 /groupware/ 폴더에 업로드합니다.
  2. 권한 설정
    업로드된 파일들에 적절한 권한을 설정합니다. (일반적으로 644 또는 755)
  3. 데이터베이스 테이블 생성
    전자결재 시스템의 부서 테이블 (g5_ea_departments)이 필요한 경우 생성합니다.
  4. 접근 테스트
    http://yourdomain.com/groupware/로 접속하여 시스템이 정상 작동하는지 확인합니다.
주의사항: 그룹웨어 관리 시스템은 최고관리자 권한이 필요합니다. 설치 전 GnuBoard 관리자 계정으로 로그인해야 합니다.

부서 테이블 생성 (선택사항)

부서 관리 기능을 사용하려면 다음 SQL을 실행하여 부서 테이블을 생성하세요:

CREATE TABLE `g5_ea_departments` ( `dept_id` int(11) NOT NULL AUTO_INCREMENT, `dept_code` varchar(50) NOT NULL, `dept_name` varchar(100) NOT NULL, `parent_dept_id` int(11) DEFAULT NULL, `dept_status` enum('ACTIVE','INACTIVE') DEFAULT 'ACTIVE', `dept_order` int(11) DEFAULT 0, `created_at` datetime DEFAULT CURRENT_TIMESTAMP, `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`dept_id`), UNIQUE KEY `dept_code` (`dept_code`), KEY `parent_dept_id` (`parent_dept_id`), KEY `dept_status` (`dept_status`), KEY `dept_order` (`dept_order`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3. 사용자 관리

사용자 목록 조회

/groupware/users.php에서 전체 사용자 목록을 확인할 수 있습니다.

검색 기능

  • 아이디로 검색
  • 이름으로 검색
  • 닉네임으로 검색
  • 이메일로 검색
  • 권한레벨로 검색
  • 부서코드로 검색

정렬 기능

  • 가입일 기준 정렬
  • 아이디 기준 정렬
  • 이름 기준 정렬
  • 권한레벨 기준 정렬
  • 오름차순/내림차순 선택

새 사용자 추가

  1. 사용자 목록 페이지에서 "새 사용자 추가" 버튼 클릭
  2. 필수 정보 입력:
    • 아이디 (영문, 숫자, _ 만 사용, 최소 3자)
    • 비밀번호 (최소 4자)
    • 이름
    • 닉네임
    • 이메일
    • 권한레벨
  3. 선택 정보 입력:
    • 부서 (부서 테이블이 있는 경우)
    • 휴대폰번호
    • 전화번호
    • 서명, 자기소개 등
  4. "사용자 추가" 버튼으로 저장

사용자 정보 수정

사용자 목록에서 연필 아이콘을 클릭하여 정보를 수정할 수 있습니다.

참고: 아이디는 수정할 수 없으며, 비밀번호는 변경이 필요한 경우에만 입력하면 됩니다.

사용자 삭제 (탈퇴 처리)

사용자 목록에서 삭제 아이콘을 클릭하여 탈퇴 처리할 수 있습니다.

주의사항:
  • 자기 자신은 삭제할 수 없습니다
  • 최고관리자는 삭제할 수 없습니다
  • 삭제된 사용자는 탈퇴 처리되며 개인정보가 삭제됩니다
  • 삭제 후 복구할 수 없으니 신중하게 처리하세요

4. 부서 관리

부서 구조

부서는 계층 구조로 관리되며, 상위 부서와 하위 부서 관계를 설정할 수 있습니다.

필드 설명 필수여부
부서 코드 영문, 숫자, -, _ 만 사용 가능한 고유 코드 필수
부서명 부서의 표시 이름 필수
상위 부서 계층 구조에서의 상위 부서 선택
상태 ACTIVE (활성) / INACTIVE (비활성) 필수
정렬 순서 목록에서의 표시 순서 (숫자가 낮을수록 먼저 표시) 선택

새 부서 추가

  1. 부서 관리 페이지에서 "새 부서 추가" 버튼 클릭
  2. 부서 코드 입력 (예: IT-DEPT, SALES_TEAM)
  3. 부서명 입력
  4. 상위 부서 선택 (최상위 부서인 경우 선택하지 않음)
  5. 상태 및 정렬 순서 설정
  6. "부서 추가" 버튼으로 저장

부서 삭제

부서 삭제 시 다음 조건을 확인합니다:

삭제 제한 조건:
  • 해당 부서에 소속된 사용자가 있으면 삭제할 수 없습니다
  • 하위 부서가 있으면 삭제할 수 없습니다
  • 먼저 사용자들의 부서를 변경하고 하위 부서를 처리한 후 삭제해야 합니다

5. 데이터 백업

전체 데이터베이스 백업

시스템의 모든 테이블을 선택하여 SQL 파일로 백업할 수 있습니다.

  1. 백업 페이지 (/groupware/backup.php) 접속
  2. 백업할 테이블 선택:
    • "모두 선택/해제" 체크박스로 일괄 선택
    • 개별 테이블 선택/해제 가능
  3. 백업 옵션 설정:
    • DROP TABLE IF EXISTS 구문 포함
    • CREATE TABLE 구문 포함
  4. "백업 시작 및 다운로드" 버튼 클릭
  5. 생성된 SQL 파일 다운로드

백업 파일 정보

구분 내용
파일명 형식 groupware_backup_{DB명}_{YYYYMMDD_HHMMSS}.sql
인코딩 UTF-8
포함 내용 테이블 구조 + 데이터
복원 방법 phpMyAdmin 등 MySQL 관리 도구 사용
중요 주의사항:
  • 백업 실행 시 서버에 높은 부하가 발생할 수 있습니다
  • 테이블 수가 많거나 데이터가 대용량인 경우 실행 시간이 매우 길어질 수 있습니다
  • 중요한 데이터는 서버 관리자가 제공하는 전문 백업 솔루션을 병행 사용하세요
  • 백업 파일은 안전한 장소에 별도 보관하세요

6. 보안 기능

CSRF 토큰 보호

모든 중요한 작업에 CSRF(Cross-Site Request Forgery) 토큰을 사용하여 보안을 강화합니다.

사용자 삭제

각 페이지마다 고유한 삭제 토큰을 생성하여 무단 삭제를 방지합니다.

부서 삭제

별도의 액션 토큰으로 부서 삭제 작업을 보호합니다.

백업 실행

백업 전용 토큰으로 무단 백업 실행을 차단합니다.

데이터 수정

모든 폼 제출에 토큰 검증을 적용합니다.

권한 제어

접근 레벨 권한 제한사항
최고관리자 모든 기능 사용 가능 자기 자신 삭제 불가
일반 사용자 접근 차단 그룹웨어 관리 기능 사용 불가
비로그인 사용자 완전 차단 모든 페이지 접근 불가

입력 데이터 검증

  • SQL 인젝션 방지: 모든 데이터베이스 쿼리에 sql_real_escape_string() 적용
  • XSS 방지: 출력 데이터에 htmlspecialchars() 적용
  • 입력값 필터링: 허용되지 않은 문자 및 형식 차단
  • 파일 업로드 제한: 허용된 파일 형식만 업로드 가능
보안 모범 사례:
  • 정기적으로 관리자 비밀번호를 변경하세요
  • 서버의 PHP 및 MySQL 버전을 최신으로 유지하세요
  • 불필요한 파일이나 폴더는 서버에서 제거하세요
  • 백업 파일은 웹 접근이 불가능한 위치에 저장하세요

7. 문제 해결

일반적인 문제

"최고관리자만 접근 가능합니다" 오류

원인: 관리자 권한이 없거나 로그인이 되어있지 않음

해결방법:

  • GnuBoard 관리자 계정으로 로그인 확인
  • 관리자 레벨이 10인지 확인
  • 세션이 만료되었다면 다시 로그인

"테이블을 찾을 수 없습니다" 오류

원인: 부서 테이블(g5_ea_departments)이 생성되지 않음

해결방법:

  • 설치 섹션의 SQL을 실행하여 테이블 생성
  • 데이터베이스 연결 설정 확인
  • 테이블 권한 확인

"토큰이 올바르지 않습니다" 오류

원인: CSRF 토큰 불일치 또는 세션 만료

해결방법:

  • 페이지를 새로고침한 후 다시 시도
  • 브라우저 쿠키 설정 확인
  • 세션 저장 경로 권한 확인

백업 실행 시 오류

원인: 메모리 부족, 실행 시간 초과, 권한 문제

해결방법:

  • PHP memory_limit 값 증가
  • max_execution_time 값 증가
  • 테이블을 나누어서 백업 실행
  • 서버 관리자에게 문의

디버깅 방법

  1. 오류 로그 확인
    서버의 PHP 오류 로그를 확인하여 구체적인 오류 메시지를 파악합니다.
  2. 디버그 모드 활성화
    개발 중에는 각 파일 상단의 ini_set('display_errors', 1);로 오류를 화면에 표시할 수 있습니다.
  3. 데이터베이스 연결 확인
    GnuBoard의 데이터베이스 설정이 올바른지 확인합니다.
  4. 파일 권한 확인
    업로드된 파일들의 권한이 적절한지 확인합니다.
운영 환경에서의 주의사항: 운영 서버에서는 디버그 모드를 반드시 비활성화하고, 오류 정보가 사용자에게 노출되지 않도록 설정하세요.

8. API 참조

주요 함수

safe_output($string, $max_length)

용도: 안전한 HTML 출력을 위한 문자열 처리

매개변수:

  • $string: 처리할 문자열
  • $max_length: 최대 길이 (선택사항)
$safe_text = safe_output($user_input, 50); echo $safe_text;

get_member_level_select($name, $min, $max, $selected)

용도: 회원 레벨 선택 SELECT 태그 생성

매개변수:

  • $name: SELECT 태그의 name 속성
  • $min: 최소 레벨
  • $max: 최대 레벨
  • $selected: 선택된 값

get_department_name_by_code_gw($dept_code)

용도: 부서 코드로 부서명 조회

매개변수:

  • $dept_code: 부서 코드

반환값: 부서명 또는 기본 메시지

generate_action_token($action_name)

용도: 특정 액션용 CSRF 토큰 생성

매개변수:

  • $action_name: 액션 이름 (고유 식별자)

반환값: 생성된 토큰 문자열

check_action_token($action_name, $token)

용도: 액션 토큰 검증

매개변수:

  • $action_name: 액션 이름
  • $token: 검증할 토큰

반환값: true (성공) / false (실패)

파일 구조

/groupware/ ├── index.php # 메인 대시보드 ├── _common.php # 공통 설정 파일 ├── gw_functions.php # 공통 함수 모음 ├── users.php # 사용자 목록 ├── user_form.php # 사용자 추가/수정 폼 ├── user_form_update.php # 사용자 정보 처리 ├── user_delete_action.php # 사용자 삭제 처리 ├── departments.php # 부서 목록 ├── department_form.php # 부서 추가/수정 폼 ├── department_form_update.php # 부서 정보 처리 ├── department_delete_action.php # 부서 삭제 처리 ├── backup.php # 백업 설정 페이지 ├── backup_execute.php # 백업 실행 스크립트 └── settings.php # 시스템 설정 (미구현)

데이터베이스 스키마

부서 테이블 (g5_ea_departments)

필드명 타입 설명 제약조건
dept_id INT(11) 부서 고유 ID PRIMARY KEY, AUTO_INCREMENT
dept_code VARCHAR(50) 부서 코드 UNIQUE, NOT NULL
dept_name VARCHAR(100) 부서명 NOT NULL
parent_dept_id INT(11) 상위 부서 ID NULL 허용
dept_status ENUM 부서 상태 'ACTIVE', 'INACTIVE'
dept_order INT(11) 정렬 순서 DEFAULT 0
created_at DATETIME 생성일시 DEFAULT CURRENT_TIMESTAMP
updated_at DATETIME 수정일시 ON UPDATE CURRENT_TIMESTAMP

회원 테이블 확장 필드

필드명 용도 데이터 예시
mb_10 부서 코드 저장 IT-DEPT, SALES_TEAM
mb_level 권한 레벨 1~10 (10: 최고관리자)
mb_leave_date 탈퇴일자 YYYYMMDD 형식

버전 정보 및 라이선스

버전 정보

구분 정보
시스템명 그룹웨어 관리 시스템
버전 1.0.0
기반 시스템 GnuBoard 5.4+
개발 언어 PHP 7.0+
데이터베이스 MySQL 5.7+
최종 업데이트 2024년 12월
학습 및 개발 목적: 이 시스템은 GnuBoard 기반의 그룹웨어 관리 기능 학습 및 개발을 위한 참고 자료입니다. 실제 운영 환경에서 사용하기 전에 충분한 테스트와 보안 검토를 수행하시기 바랍니다.

지원 및 문의

시스템 사용 중 문제가 발생하거나 개선 사항이 있으시면 다음과 같은 방법으로 해결할 수 있습니다:

  • 문서 참조: 이 매뉴얼의 문제 해결 섹션을 먼저 확인하세요
  • 로그 확인: 서버 오류 로그를 통해 구체적인 문제점을 파악하세요
  • 커뮤니티 활용: GnuBoard 공식 커뮤니티에서 유사한 문제 사례를 찾아보세요
  • 전문가 상담: 복잡한 문제는 웹 개발 전문가에게 문의하세요