필자 : 김태용 (sysop@debianusers.org) |
들어가며.. 현재 기업 및 단체에서는 업무의 효율성을 증대하기 위해 그룹웨어를 도입하고 있다. 그룹웨어를 사용함으로서 생기는 업무의 효율성을 지면을 통해 말하지 않아도 많은 분들이 알고 있을 것이다. 그룹웨어들의 종류는 수십 가지에 이루며 대부분 상용이고 자신(회사)의 업무에 적용하기 위해서는 많은 시간과 돈을 투자해야 한다. 하지만 지금 소개하려고 하는 그룹웨어는 뛰어난 기능과 확장성 그리고 보안성을 가지고 있으면서 GPL LICENSE를 가지고 있는 그룹웨어들 중 한 가지이다. 1. PHPGroupWare 에 대해서 PHPGroupWare는 최상의 인트라넷/그룹웨어 툴 그리고 어플리케이션 프레임워크이다. 이 프로그램은 PHP 언어로 작성되어 있으며, 개발자 애드온 어플리케이션을 작성할 수 있도록 만들어졌다. PHP는 간단하고 크로스 풀랫폼을 지원하며 서버 쪽에서 실행되는 스크립트이다. PHPGroupWare 의 개발 목적은 회사나 학교, 개인에게 자신들의 어플리케이션을 작성 및 완벽한 보안 적용을 할 수 있도록 하는 웹 기반 그룹웨어 어플리케이션을 만드는데 있다. 이 프로그램의 개발 주안점은 로터스 노츠의 강력한 프로그램적 능력을 가진 오픈 소스 그룹웨어 어플리케이션을 작성하는데 있다. 2. PHPGroupWare 의 특징 PHPGroupWare는 새로운 기능과 어플리케이션을 아주 간단하게 작성할 수 있도록 만들어져 있다. 이 프로그램은 PHPGroupWare Core 와 PHPGroupWare Apps 두 부분으로 나누어져 있고, API는 아주 모듈화되어 있기 때문에 객체 지향적 디자인을 가지고 있으며 개발자로 하여금 자신들이 필요로 하는 정보와 함수에 접근할 수 있도록 한다. 우선 core와 apps 그리고 API의 특징을 살펴보겠다. - core의 특징 Web Mail (IMAP & POP3 지원 / 특별히 정형화된 이메일을 특별히 관리하기 위한 X-phpGW-Type 지원) / 통합된 유즈넷 뉴스그룹 (이메일에 통합) / 다중 파일 첨부 / 주소록 후크 (vcard 형식으로 작성된 파일 추가 가능) / 문제 발생할 경우 해결할 수 있는 이벤트 지원 / 스케줄러 (개인 / 그룹 지원) / TODO (개인 / 그룹 지원) / 파일 관리자 (비공개 / 그룹 디렉토리 지원) / 서버에서 파일을 업로드, 생성, 수정 지원 / 직접 전자우편 첨부를 저장 / 그룹웨어 인터페이스 번역 관리자 (간단한 인터페이스로 다국어로 인터페이스를 변환 업그레이드 지원 (한국어 포함 12개 국어 지원)) - apps의 특징 문제 생성 시스템 / 채팅 / 포럼 / 헤드라인 뉴스 / FTP 클라이언트 / Napster 클라이언트 / 리소스 부팅 시스템 (미팅룸 및 프로젝트를 위한) / 인적 자원 프로그램 / 발명 프로그램 / 팩스 통합 시스템 등이 있으며 계속 개발되고 있다. - API의 특징 완전한 객체지향 구조 / 섹션 관리 / 현재 Mysql과 PostgreSQL을 지원하는 데이터베이스 추상화 / 프록시 서버와 연결을 관리하는 네트워크 클래스 / SQL, LDAP, PAM, SMB 기반 인증을 지원하는 인증 추상화 / 고도로 세련된 번역 지원 / 사용자 파일을 저장하고 사용하는 어플리케이션을 지원하는 파일 관리자 / 템플릿 시스템 / 사용자와 그룹 조합에 기반한 어풀리케이션 권한 (퍼미션) / 개발자가 간단한 함수를 사용하여 스케줄러에 아이템을 추가하도록 하는 등 모든 핵심 어풀리케이션에 간단한 인터페이스 / 브라우저 디텍션과 XML 파서 등과 같은 다양한 유틸리티 등이 있다. 3. 설치 현재 APM(Apache + PHP + MySQL)이 작동하고 있다면 설치 및 설정하는 것은 간단하다. 몇 가지의 설정을 빼고는 웹으로 설치하고 설정할 수 있다. (1) 시작하기 전에. PHP가 설치되어 있는지 확인을 하려면 웹 서버 루트 디렉토리에 test.php 파일을 하나 만들고 아래와 같은 내용을 작성한다. <? phpinfo(); ?> 그리고 웹브라우저에서 http://서버주소/test.php 라고 입력하면 PHP 옵션이 자세하게 나온다. 기본적으로 APM만을 요구하지만 더 많은 기능을 원한다면 추가적으로 NNTP 서버와 LDAP 서버를 설정해 주어야 한다. APM 및 NNTP, LDAP 설정에 대해서는 특별히 다루지 않을 것이며 아래 사이트를 참고 하길 바란다. (2) 테스트 한 시스템 RedHat Linux 6.1, Debian GNU/Linux 4. PHPGroupWare 설치하기 (1) TarBall 설치하기 tarball 에서 설치하는 방법은 가장 쉽다. (2) CVS에서 설치하기 CVS에서 설치하는 것도 쉽다. 파일이 웹서버 디렉토리에 있는지 확인하고 다음처럼 한다. xxx:/var/www# cd /var/www 만약 CVSROOT를 사용하려면: xxx:/var/www# export CVSROOT=‘:pserver:anonymous@cvs.phpgroupware.sourceforge.net:/cvsroot/phpgroupware’ 이 방법 또한 웹디렉토리에 퍼미션이 있어야 한다. 없다면 관리자에게 문의하기 바란다. 최근 phpGroupWare 개발자들이 릴리즈된 버전들에 대해 패치를 지원하고 있다. 이것은 다음 공식 릴리즈를 기다릴 필요 없이 현재 버전에 잘못된 것들을 수정하는 정도라고 할 수 있다. 패치와 픽스를 적용하고 관리하기 위한 개발자가 따로 있다. 예를 들어 0.9.9를 사용하는 코드의 이 버전을 검사해 보려면 다음과 같이 하면 된다.: login to cvs anonymously as described above (3) 파일 퍼미션 설정 phpGroupWare가 정상적으로 작동하게 하려면 몇 가지 파일 퍼미션을 설정해줘야 하는 디렉토리가 있다. 임시 디렉토리(반드시 필요하다) - 이건 암시적으로 /tmp 디렉토리인데 몇 가지 어풀리케이션이 정상적으로 작동하려면 반드시 필요하다. 간단하게 웹서버가 거기에 파일을 추가/삭제할 수 있는지 확인해 봐야 한다. 파일 디렉토리(꼭 필요함) - 이건 phpGroupWare 밑에 있는 디렉토리들인데 이 디렉토리의 웹 서버 계정 소유권을 줄 수 있다. chown nobody:nobody 루트 디렉토리(추천 안 함) - 웹 서버 계정으로 phpgroupware 디렉토리에 쓰기 권한을 주면 설치 프로그램이 자동적으로 header.inc.php 파일을 만들어줘야 한다. 아니면 그것을 만들기 위해서 설치 프로그램을 사용해야 하고 그것을 파일에 저장하려면 수동으로 해주어야 한다. 그렇게 하려면: 이렇게 하려면 퍼미션이 필요하다. 웹 서버 디렉토리에 쓰기 권한이 없으면 시스템 관리자에게 연락한다. (4) DB 만들기 어플리케이션을 설치하기 위해서 테이블을 만들려면 빈 데이터베이스가 필요하다. (4)-1. Mysql (Mysql이 설치되어서 잘 동작한다고 가정하고) Mandrake 또는 RedHat: /etc/rc.d/init.d/mysqld start (4)-2. Postgresql (역시 설치되었고 잘 동작한다고 가정하고) Postgresql에서 요구되는 디비를 생성하기 위해서는 postgresql이 시작되었는지 확인해야 한다. (5) phpGroupWare 설치/설정 웹 브라자에서 http://서버루트/phpgroupware/setup/ 이라고 입력한다. 여기에 header.inc.php 과 데이터베이스 테이블이 만들어지거나 업그레이드 된다. 설치는 phpGroupWare 데이터베이스 버전과 설치된 header.inc.php 파일을 알아내려고 할 것이다. 그리고 최근 버전으로 업그레이드 한다. xxx:/var/www/phpgroupware# cp header.inc.php.template header.inc.php 예) http://webserver/phpgroupware/setup/ 위와 같은 결과가 나오면 일단 출발이 순조로운 편이다. header admin login에 접속한다. Login을 하고나면 위와 같이 header 세팅을 하게 된다. 세팅을 하고 나서 Continue를 눌러 세팅값을 저장한다. 기본 세팅을 저장했다면 Setup/Config Admin Login에 접속한다. header.inc.php 을 정확히 설정했다면 위와 같은 화면을 볼 것이다. 위와 같은 화면이 나오면 테이블 생성이 성공적으로 이루어졌다. 데이터베이스 테이블 생성이 완료되면 Step 2. Configure New 을 누른다. 이곳에서 PHPGruopWare 의 인증 및 각종 서버에 대한 설정을 마치고 Step 3. Manage Languages 를 눌려 사용언어를 선택한다. 이곳에서 결정되는 언어는 나중에 사용자가 각자 자신의 사용언어를 선택할 때 사용된다. 지금 까지 PHPGroupWare 의 환경을 설정하였다. (5) 설치 테스트 대략적인 설정이 끝나고 http://webserver/phpgroupware/ 로(설치된 디렉토리) 이동을 한 다음 드디어 로그인을 한다. 설정이 정상적으로 되었으면 로그인할 수 있다. 여기서 관리자 권한을 가진 새로운 사용자를 만들고 예전 것은 지워버리는 것이 아마 좋을 것이다. 로그인을 하면 브라우저 윗 부분에 아이콘들이 나오는데 preferences아이콘을 선택해서 환경을 설정해주면 된다. (위 화면은 로그인하고 나서 Administration의 화면이다.) 설치된 위치를 웹 브라우저에서 지정한다. 로그인해 본다. 여기서 관리자 권한을 가진 새로운 사용자를 만들고 예전 것은 지워버리는 게 좋다. (6) 추가 어플리케이션 설치 phpGroupWare 을 설치하고 실행해 봤다면 아마 추가적인 어플리케이션을 받아서 설치하고 싶을 것이다. 새 어플리케이션을 받으면 README나 INSTALL을 꼭 보도록 한다. 그리고 DB에 새로운 테이블을 생성하고 lang 테이블(일반적으로 lang.sql 이라는 파일)에 추가적인 번역 데이터들이 있을 것이다. 예를 들면 헤드라인 어플리케이션 을 설치한다면 export CVSROOT=‘:pserver:anonymous@cvs.phpgroupware.sourceforge.net:/cvsroot/phpgwapps’ phpGroupWare 가 설치된 디렉토리로 headlines 디렉토리를 옮고 관리자로 phpGroupWare에 들어가서 관리자 페이지로 간다. 첫번째 섹션에서 어플리케이션 링크를 선택하고 추가하려면 클릭하고 양식을 다 채우면 된다. 어플리케이션 이름은 옮긴 디렉토리 이름으로 하면 되고 이 경우에는 headlines 라고 하면 된다. 어플리케이션 제목은 네비게이션 바에 보여지는 것이고 다른 곳에 새 어플리케이션을 언급하기 위한 것인데 여기서는 Headlines 라고 쓰면 된다. Enabled 는 임시적으로 모든 사용자들이 어플리케이션을 사용 못하도록 하는 것인데 이제 이 어플리케이션을 사용할 수 있도록 박스에 체크하면 된다. 관리자 페이지로 돌아가서 특정 사용자나 사용자 그룹에 대한 어플리케이션을 가능하도록 해야 한다. 그리고 계정 수정 페이지의 중간에 보이는 Headlines 박스를 체크해주면 된다. 계정에 Headlines 어플리케이션에 추가되었으면 관리자와 환경설정 페이지에서 Headlines 라는걸 볼 수 있을 것이다. 그리고 네비게이션 바를 보면 Headlines 어플리케이션에 대한 아이콘도 있다. 관리자 영역 링크를 통해 Headlines 사이트를 활성화했다면 네비게이션 바에서 Headlines 아이콘을 클릭해서 선택한 사이트로부터 헤드라인을 받아올 수 있다. 5. phpGroupWare 어플리케이션 개발 이번 장은 어플리케이션들을 통합하는데 필요한 phpGroupWare의 하부구조와 API를 설명하는 것이다. (1) 어플리케이션 작성의 개요 우리는 별다른 어려움 없이 phpGroupWare를 위한 어플리케이션을 만들 수 있도록 시도했다. 우리는 어플리케이션 작업을 쉽게 할 수 있기를 바라며 phpGroupWare 자체는 다루지 않겠다. (2) phpGroupWare API가 제공하는 것은? phpGroupWare API는 세션 관리, 사용자/그룹 관리를 관리하고 PHPLIB 데이터베이스 추상 메소드를 사용한 다중 데이터베이스를 지원한다. 그리고 PHPLIB 템플릿 클래스를 사용한 템플릿과 파일 시스템 인터페이스, 네트워크 입출력 인터페이스까지 지원한다. 이런 기본적인 함수들의 제일 위에는, 필요로 하는 사용자 환경에 대한 정보와 phpGroupWare에 제대로 적용될 수 있도록 하는 몇 가지 함수들을 phpGroupWare에서 제공한다. 6. 지침 (1) 요구 이 지침는 phpGroupWare 딜럭스에 포함되도록 고려된 어떤 어플리케이션을 반드시 따르도록 되어야 한다. 반드시 PHP3와 PHP4에서 실행되어야 한다. 이 요구에 맞지 않는 어플리케이션에 대해서는 phpGroupWare 어플리케이션 프로젝트를 통하여 사용자들이 활용할 수 있고 개발자가 결정한다는 것을 뜻한다. 만약 템플릿과 언어 지원으로 어플리케이션을 변환하는데 도움이 필요하다면 도움을 주도록 하겠다. (2) 어플리케이션 작성/포팅 인클루드 파일 <?php 물론 어플리케이션 이름은 맞도록 고치면 된다. phpgwAPI - phpGroupWare API가 로드될 것이다. ]7. 어플리케이션 설치 (1) 개요 phpGroupWare에서 어플리케이션을 추가하고 삭제하는 것은 아주 쉽다. (2) 자동 기능 우리는 개발자들이 쉽게 만들 수 있도록 하려고 다음과 같은 파일을 로드한다. (3) 파일, 디렉토리, 아이콘 추가 코드에 다음 디렉토리를 생성할 필요가 있다 `--appname (4) 어플리케이션을 phpGroupWare에 인식시키기 어플리케이션을 인식하는 어플리케이션을 만들기 위해서는 어플리케이션 테이블에 어플리케이션 설명을 추가하라. 이것은 GUI 관리자 화면을 통하여 이루어진다. 또는 SQL 스크립트로도 할 수 있다. insert into applications (app_name, app_title, app_enabled) values (‘appname’, ‘The App name’, 1); (5) 관리자 페이지에 후킹 사용자가 관리자 페이지로 가면 각 어플리케이션이 활성화되어 있는지 어플리케이션 제목이 알파벳 순서에 따르는지 확인하여 appname/inc/hook_admin.inc.php 가 시작된다. 이 파일이 존재하면 이것은 nclude() 이면 그 어플리케이션을 설정하기 위한 링크의 선택을 표시할 것이다. 간단한 예제: <?php 더 자세한 예제는 headlines/inc/hook_admin.inc.php 와 admin/inc/hook_admin.inc.php 를 보라 링크는 admin/index.php 파일에 상대적이지만 어플리케이션의 기본 디렉토리는 아니다. (그러므로 link() 를 호출하는 곳에 $appname 을 사용하라) 파일은 include() 에서 불리워지며 이름에 공백이 들어가지 않도록 조심하라. 기본 $phpgw 와 $phpgw_info 변수는 영역 안에 있으며 패스에서 어플리케이션 이름과 관련된 $appname 이다. 각 어플리케이션의 링크를 표시하는 것은 section_start()와 sectio_end()의 두 가지 함수가 있다. section_start section_end (6) 환경 페이지로 후킹하기 환경 페이지로 후킹하는 메커니즘은 관리자 페이지에 후크하기 위해 사용된 것과 동일하지만 appname/inc/hook_admin.php 대신 appname/inc/hook_preferences.inc.php 를 찾는다. 동일한 함수와 변수가 정의되어 있다. 8. 하부구조 (1) 개요 pgpGroupWare는 개발자에게 작동할 sound 디렉토리 구조를 제공하도록 할 것이다. (2) 디렉토리 트리 .--appname |--phpgw.inc.php (3) 번역 번역은 데이터베이스를 통해 이루어지며 다른 메커니즘을 사용하도록 설정할 수 있다. 9. API (1) 소개 phpGroupWare는 개발자들에게 일반 태스크를 관리하는 유용한 API를 제공한다. 예: $phpgw->send->msg() 는 inc/phpgwapi/phpgw_send.inc.php 파일에 있다. (2) 기본 함수 $phpgw->link 세션 관리에 대한 지원을 추가한다. 모든 링크는 반드시 이것을 사용하며 href의 폼 액션과 헤더 로케이션을 포함한다. 만약 같은 페이지로 돌아가는 폼 액션을 해야 한다면 어떤 파라미터도 없이 사용할 수 있다. 이 함수는 매우 자주 사용되기 때문에 클래스의 핵심 부분에 있으며 개발자들이 키만 몇 번 두드리면 되기를 바란다. 예: <form name=copy method=post action=“<?php echo $phpgw->link();?>”> /* 만약 세션 관리가 url 파라미터를 전달하여 이루어진다면 */ (3) 어플리케이션 함수 $phpgw->common->phpgw_header $phpgw->common->phpgw_footer $phpgw->common->appsession 어플리케이션이 필요로 하는 중요한 정보 세션 정보들을 저장한다. 예: (4) 파일 함수 $phpgw->vfs->read_file 예: $phpgw->vfs->write_file 예: $phpgw->vfs->read_userfile 예: $phpgw->vfs->write_userfile 예: $phpgw->vfs->list_userfiles 예: (5) 이메일/NNTP 함수 $phpgw->send->msg 예: 10. 설정 변수 (1) 소개 phpGroupWare는 개발자들에게 가능한 사용자, 그룹, 서버, 어플리케이션 환경에 대한 정보를 제공한다. 몇 가지 예를 보자: <?php (2) 사용자 정보 $phpgw_info[“user”][“userid”] = 사용자 아이디 $phpgw_info[“user”][“session_ip”] = 현재 아이피 주소 (3) 그룹 정보 $phpgw_info[``group''][``group_names''] = 그룹 목록 (4) 서버 정보 $phpgw_info[“server”][“server_root”] = 메인 설치 디렉토리 (5) 데이터베이스 정보 사용할 데이터베이스들이 $phpgw_info_db에 의해 이미 로드되어 있기 때문에 필요하지는 않을 것이다. $phpgw_info[“server”][“db_host”] = 데이터베이스의 주소. localhost로 설정된다. (6) 메일 함수 이것은 phpGroupWare 함수를 통해 제공되기 때문에 필요가 없을 것이다. $phpgw_info[“server”][“mail_server”] = IMAP 서버의 주소. 보통 localhost (7) NNTP 정보 $phpgw_info[“server”][“nntp_server”] = NNTP 서버 주소 (8) 어플리케이션 정보 각 어플리케이션은 가능한 다음 정보를 가지고 있다. $phpgw_info[“apps”][“appname”][“title”] = 어플리케이션의 제목 11. 언어 지원 사용하기 (1) 개요 phpGroupWare는 다중 언어 지원 스키마를 내장하고 있다. 이것은 페이지가 아주 쉽게 다른 언어로 변경될 수 있다는 뜻이다. 텍스트 문자열의 번역은 phpGroupWare 데이터베이스에 저장되어 있고 phpGroupWare 관리자가 변경할 수 있다. (2) 언어 지원 사용하는 방법 lang() 함수는 phpGroupWare의 국제화 지원에 맞는 어플리케이션의 인터페이스이다. $x = 42; 이것은 “The counter is %1'”을 번역할 것이며 사용 중인 현재 어플리케이션과 언어를 기반으로 한 번역된 버전이 리턴될 것이다. $x 가 끝나는 위치가 코드 상에서 문자열로 처리하는 것이 아니라 문자열 형식으로 제어가 되어 있다는 것을 주의하라. 이것은 어플리케이션이 실제 숫자가 문자열의 끝에 있지 않다는 것으로 번역하는 것을 허용한다. 번역이 없으면 원래 문장은 문자열 다음에 * 를 포함하여 리턴된다. 이것은 어플리케이션을 쉽게 개발하도록 하며 다시 돌아가 나중에 (*에 의해 표시된) 번역물이 빠졌다는 것을 추가한다. lang 테이블에서 특정 번역이 없으면 다음과 같이 출력된다: The counter is 42*<br> 만약 현재 사용자가 이탈리아어를 사용한다면 문장은 다음과 같이 리턴될 것이다: il contatore e 42<br> lang 함수 lang($key, $m1=“”, $m2=“”, $m3=“”, $m4=“”, $m5=“”, [$key ] [$m1 ] [$m2 - $m10 ] 번역 데이터 추가 lang 테이블 [$message_id ] [app_name ] [lang ] [content ] lang,sql REPLACE INTO lang (message_id, app_name, lang, content) lang 언어에 message_id 문자열을 반영하는 내용을 번역한다. 만약 문자열이 어플리케이션에 표시되면 app_name에 어플리케이션을 넣거나 일반적인 이름을 사용하라. message_id는 소문자이어야 한다. (3) 일반적인 리턴 코드 phpGroupWare 소스를 보면 고수준 함수들에서 사용된 리턴 코드들에 대한 패턴을 알 수 있을 것이다. 사용된 코드는 doc/developers/CODES 파일에 부분적으로 문서화되어 있다. 예를 들면 echo check_code(13); 이라고 호출하면 다음과 같이 출력할 것이다. Your message has been sent 현재 언어로 번역된다. 12. 템플릿 사용하기 (1) 개요 phpGroupWare는 템플릿에 기반한 구조를 사용한다. 이것은 페이지를 출력하고 tpl 파일을 저장하고 다른 언어로 변환할 수 있다는 것이며 완전히 다른 것으로 보여지게 할 수도 있다는 뜻이다. (2) 템플릿 사용하기 템플릿을 사용하는 몇 가지 명령: 템플릿 클래스는 PHPLIBs 문서를 읽어보라. |
운영체제/리눅스