roamdrive_beta2.exe
아시는분들은 아시겠지만 10M 이상의 자료를 업로드하실일이 있으신분들은 쓰셔도 괜찮을듯싶네요~ 지메일드라이브랑은 전혀상관이없는 별게의 프로그램입니다~ roamdrive 라고합니다..아직 베타버전이구요 원리는 10M 이상의파일은 스스로 분할을해서 업로드를 시키고 다운받으면 다시합쳐서 다운해주는 프로그램이라고하네요~ 제가 사용해본결과 한글이 지원이안돼서 파일을 알아보기가 좀힘듭니다~ 그리고 업로드해놓고 G메일로 들어가봐도 좀 알아보기힘들고요 급하게 큰용량 업로드하실일 있으시면 추천합니다, 그리고 roamdrive 로 올린파일 외에 지드라이브나 기타 메일보내기형식으로 올려놓은 파일은 보여주질않습니다, 자세한 사항은 직접써보시면 아실거구요,,, 주의하실사항 주의. 1. 만약 .NET framework 1.1이 설치가 안되어 있으면 제대로 설치가 안되니 유틸을 설치하기전에 설치해야 합니다. 2. 만약 gmail의 언어가 한국어로 되어 있다면 업로드가 제대로 이루어 지지 않습니다. 언어를 영문으로 바꾸어 주셔야 합니다. 3. 압축파일이 아닌경우에도 오류가 발생할수 있습니다. 확장자를 변경하거나 압축파일로 만드셔야 합니다. 참고 만약 roamdrive를 설치할 수 없을 경우 분할된 파일을 다운로드 받아야 할때 도스 명령으로 분할 파일을 합칠수 있습니다. copy /b test_2-611.rar+test_2-612.rar test_2.61.rar 설치및 사용방법 다운받는 roamdrive_beta2.exe를 두번 클릭해서 설치한다 설치된 RoamDrive를 실행한다. 좌측 패널에서 Email Account를 클릭한다. E-mail Address에 Gmail의 전자우편 주소를, Password에 Gmail의 암호를 입력한다. 좌측 패널에서 Load/Refresh Files 아이콘을 클릭한다. Windows 탐색기로 업로드하려는 파일을 RoamDirve의 Your Files에 끌어 놓는다
by Anna 안나 2008. 10. 26. 19:55
Name : 제로보드
Language : PHP
설치형 게시판 중 가장 유명함. 다양한 스킨과 정보로 많은 사람들이 애용하는 중.
현재 배포중인 버전은 ZeroBoard4, ZeroBoardXE가 있습니다.
URL : http://www.zeroboard.com/



Name : 그누보드
Language : PHP
제로보드와 유사하면서도 기능면에 있어서는 제로보드보다 한단계 위라 할 수 있습니다.
하지만 커뮤니티쪽은 폐쇄적이라는게 좀 그렇죠.
URL : http://sir.co.kr/



Name : 테크노트
Language : PHP
제가 생각하기로 설치형 게시판 중 가장 뛰어난 프로그램이며 확장성은 대한민국에서 최고.
다만 초보자가 사용하기에는 너무 복잡하다는 단점이 있습니다.
URL : http://www.technote.co.kr



Name : GR보드
Language : PHP
신생(?)보드인데, 웹표준 등 개발자의 인식이 뛰어납니다.
현재 제작자가 군복무 중이며, 개발이 조금 더딘 점이 있습니다. 현재로서는 덩치가 가볍습니다.
URL : http://sirini.net



Name : 유니콘 보드
Language : JSP
URL : http://www.jakartaproject.com/



Name : IsBoard
Language : ASP
URL : http://www.isboard.net/



Name : 세팔보드
Language : CGI
예전에는 이용자가 정말 많았는데, 지금은 PHP에 뒤져서 사용자가 많이 줄었습니다.
현재 PHP 버전을 개발중이신 것으로 아는데, 정확한 일정은 알 수가 없네요.
URL : http://www.spcgi.com

http://jungkooki.byus.net/2113
by Anna 안나 2008. 10. 25. 11:18
1. 제로보드 (www.nzeo.com)  PHP+MySQL, 저작권 외부 표기 있음  설치형 게시판의 대표격이라 할 수 있을 만큼 두터운 사용자 층을 보유하고 있습니다. 제로보드 4.1 버전이 가장 많이 사용되고 있으며, 사용자가 많은 만큼 다양한 게시판 스킨과 플러그인이 있습니다. PHP와 MySQL이 지원되는 서버에서 사용이 가능하며, 외부에 저작권 표기를 해야 합니다.
2. 그누보드 (www.sir.co.kr)  PHP+MySQL(CUBRID), GPL 라이센스  제로보드와 함께 PHP 설치형 게시판의 양대산맥으로 꼽힙니다. 전문적인 지식을 가지고 있는 사용자가 많고, 제로보드에 비해 적긴 하지만 다양한 스킨이 공유되고 있습니다. MySQL 버전과 CUBRID 버전으로 나뉘어 배포되고 있으며, GPL 라이센스를 따르므로 저작권 표기가 자유롭습니다.
3. 알지보드 (www.rgboard.com)  PHP+MySQL, GPL 라이센스  앞서 언급한 두 게시판보다 유명하지는 않지만, 그래도 많은 사용자를 보유하고 있습니다. 카운터 등의 자체 내장된 애드온이 있어서 편리한 것이 특징입니다.
4. 미니보드 (www.mini-i.com)  PHP+MySQL, 저작권 외부 표기 자유 (소스내 표기 의무)  세련된 기본스킨과, 자체 내장되어 있는 아바타 애드온이 큰 장점으로 꼽힙니다. tinyMCE 웹에디터를 기본으로 탑재하고 있으며, 그 외 계층형 코멘트 지원과 AJAX 쪽지 시스템, 게시판 설정이 상당히 세분화 되어 있다는 것이 특징입니다.
5. 디자인보드 (www.designboard.net)  PHP+MySQL, 비영리 사용자에 한해 저작권 외부 표기 자유 (소스내 표기 의무)  타 게시판에서 주로 사용하는 GET 방식이 아닌 POST 방식을 택하여 좀 더 보안을 강화하였고, 음악플레이어인 디플레이어를 제공하여 앨범으로 사용하실 수 있습니다.
6. 정보드 (www.jungboard.com)  PHP+MySQL, 'GPL 라이센스
 빌더 개념이 적용된 게시판으로, 다양한 추가 기능이 있습니다. 최근 정식버전이 출시되어 관심을 받고 있는 게시판입니다.
7. 케이보드 (www.kport.co.kr)  PHP+MySQL, 저작권 외부 표기 자유 (소스내 표기 의무)  2004년 10월에 배포가 시작이 된 게시판으로, 가볍게 사용하실 수 있습니다. 심플한 관리자모드, 다양한 용도로 확장하기가 용이하다는 장점을 가지고 있습니다.
http://lch2090.tistory.com/5
by Anna 안나 2008. 10. 25. 11:16
※ 제가 사용하는 방법은 기본적으로 SMTP서버 가 지원되는 메일 계정과 PHP Gmail Drive를 사용할 시에는 CURL Extension이 설치된 호스팅 계정이 있어야 됩니다. 저 같은 경우 메일은 네이버에서 포인트를 모아 으뜸사용자가 되서 사용가능하고, PGD는 247ihost.com이라는 해외 무료 호스팅을 받고 있습니다. CURL Extension이 설치된 무료 호스팅은 해외에 상당수 있기 때문에 쉽게 찾으실 수 있으리라 생각됩니다.

기존에 Gmail을 웹하드 즉, 파일 저장 공간으로 사용하신 분들은 아마 대부분 Gmail Drive Extension 이나 Gspace, RoamDrive 등을 이용하셨을 겁니다. 하지만 이런 툴은 업로드 속도가 느리고, 장시간 트래픽 유발시 24시간 동안 계정이 정지당할 수 있다는 문제점이 있습니다.

그래서 이곳저곳 검색엔진을 뒤져 봤는데, 조금은 다른 방법을 알게 됐습니다. Gmail에 저장하고자 하는 파일을 자동 분할해서 SMTP를 통해 전송하고, Gmail로 받은 분할 파일을 자동으로 검색, 합치는 것입니다. 각각의 파일을 웹링크로 만들어서 Flashget 등의 다운로드 프로그램으로 받은 후에 합칠 수도 있구요. 자세한 내용은 글을 읽어보시면 이해가 좀 더 빠르지 않을까 싶습니다. 글이 좀 길어질 것 같아 3 부분으로 나누었습니다. *^^*

앞서 말한 방법을 실행에 옮기기 위해서는 Backup To Email(바로 다운로드), Peer2Mail(바로 다운로드) 이라는 프로그램과 이전에도 포스팅 한 적 있는 PHP Gmail Drive 스크립트가 필요합니다.

우선 Backup To Email(이하 'B2E')에 대해 소개하도록 하겠습니다. B2E는 Java로 짜여진 프로그램으로 설치를 하시면 아래와 같이 파일의 확장 메뉴에서 'Backup To Email' 이라는 메뉴가 생깁니다.


Gmail에 저장하고자 하는 파일을 선택한 후에 'Backup To Email'을 클릭합니다. 이 때, 자체적으로 파일을 분할 압축한 후에 전송하기 때문에 Gmail 최대용량 한도 내에서는 파일의 용량은 상관없습니다. 클릭하면 아래와 같은 화면이 나타납니다. Email Address 에는 파일을 저장할 Gmail 주소를 입력해줍니다.


입력한 후 Save를 클릭하면 아래와 같은 화면이 나타납니다.


이제 SMTP 서버를 설정해 줘야 합니다. Configuration -> Accounts를 클릭합니다. 이 설정 창에서 Email Address는 메일을 보낸 사람의 주소를 입력하시고, Outgoing Server에는 자신이 사용하는 이메일의 SMTP 서버 주소를 입력합니다. 저 같은 경우는 네이버 으뜸 사용자여서 네이버 SMTP 주소를 입력했습니다. 그리고 자신이 사용하는 메일환경에 따라 Requires Authentication (사용자 인증)을 체크한 후에 아이디와 패스워드를 차례대로 입력합니다. 마지막으로 Max attachment에 분할될 파일 하나당 용량을 설정합니다. 국내 이메일 서비스의 파일 첨부 용량을 고려했을 때 10000000 bytes (약 10MB)가 적당합니다. 테라메일 같은 경우 20MB도 가능하지만 TLS 방식을 사용해서 B2E에서는 설정이 불가능하더군요. 이 점은 상당히 아쉽기도 합니다. 물론, 조금 있다 설명할 Peer2Mail에서는 MAPI를 이용해서 가능할 것도 같습니다. Gmail은 첨부파일이 20MB까지 지원이 되는데 정작 그에 걸맞는 SMTP 서버를 국내에선 찾기가 힘드니까 말이죠. 개인이 서버를 돌리지 않는 한 말입니다.


이 제 모든 설정이 끝났습니다. Gmail에 저장하고자 하는 파일을 선택하고 업로드를 해봅니다. 앞서 설정했듯이 10MB 이상이 되는 파일은 아래와 같이 자동으로 파일명 뒤에 숫자를 붙여서 분할한 후에 전송합니다. 전송이 완료되고 나면 자동으로 삭제가 되구요. 분할 속도는 하드에 특별히 이상이 없는 한 꽤나 빠른편입니다. (^^;)


분할을 마치고 나면 아래와 같이 업로드가 이루어집니다. 네이버 SMTP의 경우 초당 1MB~2MB 정도는 나와주는 것 같더군요. 더욱이 분할 파일이 많아 순차적으로 많은 메일을 전송함에도 스팸으로 인식하지 않고 몇 백개씩 잘 보내줍니다. 심지어 여러개 파일을 동시전송도 가능합니다. 단, 이 경우에는 리소스를 많이 차지해서 자칫 컴퓨터가 뻗을 수도 있으니 1~2개 큰 파일을 전송할 때 사용하는 편이 좋을 것 같습니다.


※ B2E는 확장자가 exe인 파일은 자동으로 exe.mp3로 변경하여 업로드 합니다. 이유는 Gmail 측에서 exe 확장자 파일은 보안상 문제로 거부하고 있기 때문입니다.

이렇게 분할된 파일은 Peer2Mail과도 호환 이 되어서 Gmail 계정을 자동검색 후 다운로드와 동시에 합칠 수 있고, PGD를 통해 하이퍼 링크를 생성한 하고 다운로드 후 Total Commander나 WinRAR 등으로 직접 합칠 수도 있습니다. 또, B2E 메뉴에 있는 Merge Split Files를 통해서 합칠 수도 있습니다. 파일을 나누는 방식이 매우 단순하기 때문에 다른 프로그램과도 별 문제없이 호환이 됩니다. (^^!)


다음에 소개할 프로그램을 Peer2Mail(이하 'P2M')입니다. 이 프로그램은 그래도 Download.com에도 올라와 있더군요. P2M은 Gmail 뿐만 아니라 Walla, Yahoo에서도 사용이 가능합니다. 프로그램을 실행하면 아래와 같은 화면이 나타납니다.


우선 파일을 전송하기 위해서 설정을 해줘야 합니다. P2M에는 파일 전송 방법이 3가지가 있습니다. SMTP 서버를 이용하는 방법, 아웃룩(아웃룩 익스프레스 X) MAPI를 이용하는 방법, Direct Send라 하여 서버의 MX 레코드를 이용하는 방법입니다. SMTP 서버의 경우 B2M을 설정했던 것처럼 SMTP 서버정보와 계정 정보를 입력하고 Test Server...를 클릭해서 테스트를 한번 해주시고 OK 하시면 됩니다.


정확한 서버 주소와 아이디, 패스워드를 입력하시면 Success 표시가 뜨게 됩니다.


그 외에 방법에 대해서는 테스트를 하지 못했습니다. MAPI를 이용할 경우 아웃룩에 기본값으로 설정된 SMTP 서버를 통해서 파일을 전송할 수 있습니다. 전 PC에 아웃룩이 설치가 되어있질 않아서 테스를 못해봤습니다만, 이 경우 테라메일을 이용하면 20MB까지 첨부파일 전송이 가능할 것 같습니다.


설정이 끝나면 메인 창에서 Split/Send File 탭을 클릭하고 툴바에 있는 아이콘을 클릭하여 Plain Transfer를 선택합니다.

그럼 아래와 같은 창이 뜨게 됩니다. P2M은 B2M과 다르게 여러개의 파일을 대기열 목록에 두었다가 순차적으로 전송합니다. 즉, 여러개의 파일 선택이 가능합니다. 단, 최대 파일 용량 제한을 프로그램 자체적으로 10MB로 해놨기 때문에 10MB가 넘는 리스트에 있어도 전송이 되질 않습니다. 그래서 미리 파일을 분할한 후에 목록에 추가해서 전송을 해야 합니다. 이런 면에서 10MB가 넘는 큰 파일은 B2M으로 전송하는 것이 훨씬 편리합니다. 반면에 P2M은 10MB 이하의 사진이나 MP3 파일 등을 전송하는 데 편리합니다.


전송하고자 하는 파일을 여러개 선택합니다.


여러개의 파일이 선택되었습니다.


전송하고자 하는 파일을 선택하고 나면 아래와 같이 대기열 목록이 생깁니다.


이 상태에서 툴바에 있는 Send the segments...를 클릭하면 파일을 순차적으로 전송합니다.

P2M 역시 B2M 처럼 파일을 분할하고 합치는 데 있어서 도구를 제공하고 있습니다.


B2M 보다 조금 나은 기능이 있다면 분할하고 합치는 데 있어서 암호 설정이 가능하다는 겁니다.


자! 그럼 지금부터는 P2M으로 파일을 다운로드 받아보겠습니다. 앞서 언급했습니다만, P2M을 이용하면 분할된 파일을 자동으로 검색할 수 있고 다운로드가 완료되면 파일을 자동으로 합쳐줍니다. Browse 탭을 클릭한 후 Gmail 계정에 로그인 합니다.


로그인 하면 B2M이나 P2M 혹은 직접 다른 프로그램으로 분할해서 전송한 파일들이 보이실 겁니다.


툴바에 있는 Auto Download Segments...를 클릭합니다.


클릭을 하고 나면 Segment Manager가 뜨면서 현재 로그인 되어 있는 Gmail 계정 내에 있는 첨부 파일들의 리스트를 모조리 불러들입니다. 그런데, 이게 속도가 좀 많이 느립니다. 인내심이 많이 요구될 거라 생각됩니다. 더욱이 분할 파일이 많으면 많을수록 말이죠. 포럼에도 보면 이 문제에 대해서 개선을 요청하고 있는데, 다음 버전에 반영이 될지는 미지수입니다.


일부 파일을 다운로드 해보니 250~300KB/s 정도의 속도가 나오는군요. 그럭저럭 쓸만합니다. (^^;) 여담이지만 야후의 경우 메일이 무제한 용량인데, 첨부파일 다운로드 속도가 1MB/s도 넘었던 기억이 납니다. 다시금 테스트 해보고 싶은 의욕이 생기네요. 다만, 야후 메일은 메일이 잘 안간다는 게 문제이긴 합니다. (ㅡ.ㅡ^)


2. Peer2Mail 소개 및 사용법 닫기
이렇게 두 프로그램에 대해서 알아봤습니다. 저 같은 경우엔 CD 이미지 같은 파일을 B2M으로 전송한 후에 필요시에 P2M으로 다운로드 받고 있습니다. 마땅히 영구(?) 보관이 가능한 백업 장소를 찾지 못했기 때문에 Gmail을 택한건지도 모르겠군요.

지금까지는 B2M과 P2M의 소개와 사용법에 대해 말씀드렸는데요. 이번엔 B2M과 P2M 또는 웹메일, 메일 클라이언트로 전송한 첨부파일을 하이퍼링크 즉, URL을 통해서 바로 다운로드 받는 방법을 살펴보도록 하겠습니다. 이미 이에 대해서는 PHP Gmail Drive를 이용한 Gmail 첨부파일 웹 링크로 공유하기라는 글에서 설명을 하였습니다만 좀 더 보충을 하도록 하겠습니다. 고로 이전 글을 필히 읽어주시기 바랍니다.

3. PHP Gmail Drive로 하이퍼링크 만들기 닫기 아래 그림을 보시면 아시겠지만 이전 글에서 GSpace로 업로드 한 파일보다 B2M으로 업로드 한 파일의 디스플레이가 훨씬 나았습니다. 파일명이 일단 깨지지 않구요. 확인해보니 정상적인 메일의 첨부파일은 저렇게 나타나더군요. 물론, 한글 파일명의 경우에는 깨집니다. ('ㅇ')

테스트 : Gmail 계정에서 받는 P2MSetup.exe.mp3 (다른이름으로 저장)
이전 글에서 말씀 드렸듯이 여기서 직접 다운로드가 가능한데요. 링크에다 대고 다른 이름으로 대상 저장을 하셔도 되고 Flashget과 같은 다운로드 매니저로 받으셔도 됩니다. 그럼 여기서 생각해볼 수 있는 것이 파일 링크만 URL 목록으로 쭈~욱 만들 수 있다면 본인 뿐만이 아니라 다른 사람들 역시 편하게 파일을 다운로드 할 수 있다는 것입니다. 특히 Flashget의 경우에는 '드롭존' 기능이 있어서 URL을 그냥 드래그만 해도 다운로드가 가능하죠.


그런데 문제는 PGD가 첨부파일이 수십개 이상으로 넘어가면 계정 내에 있는 파일 전부를 리스트로 출력해주지 못한다는 겁니다. 안 그래도 느린데 말이죠. (ㅡ_ㅡ+)

하지만, 이는 리스트가 출력이 다 되지 않았다 뿐이지 계정에는 로그인이 되어있는 상태기 때문에 다른 파일 역시 다운로드 할 수 있습니다. 이럴 경우 주소 형식에 맞게 URL 생성해 주면 됩니다.

기본적으로 PGD가 생성하는 링크는
http://minilogue.247ihost.com/pgd/dl.php?a=0.1&m=11498978729f67cc&f=P2MSetup.exe.mp3&n=0

그러니까 http://yourdomain.com(도메인)/pgd(PGD가 설치된 폴더)/dl.php?a=0.1&m=th값&f=파일명&n=계정순서 로 이루어져 있습니다.

여기서 a=0.1이라는 값과 m=11498978729f67cc이라는 th값은 Gmail에 로그인해서 파일 첨부 정보를 보시면 나옵니다. 다운로드 링크의 속성을 봅니다.


아래와 같이 주소에 th값과 attid값이 있습니다.


그리고 n=0 이라고 하는 계정순서 값은 pgd 폴더 안에 있는 config.php에서 가져옵니다.

$gmail_user[0] = "google0@gmail.com(자신의 Gmail 주소)";
$gmail_password[0] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[1] = "google1@gmail.com(자신의 Gmail 주소)";
$gmail_password[1] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[2] = "google2@gmail.com(자신의 Gmail 주소)";
$gmail_password[2] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
즉, 위와 같이 계정을 설정했을 때, 자신이 링크하고자 하는 파일이 google0@gmail.com에 있다면 [값]을 n=값으로 해주는 것입니다. 여기서는 [0]이니 n=0이겠군요. 말 그대로 계정 순서 번호를 써준다고 생각하시면 됩니다.

자! 이제 다 끝났습니다. 첨부파일 하나하나의 th값을 확인해 야 된다는 게 좀 귀찮을 수도 있습니다만, 충분히 활용가능한 방법입니다. (^^!) Firefox에서 그리스몽키 같은 걸로 첨부파일만 따로 볼 수도 있을 것 같은데 아직 못 찾아봤습니다. Webma와 Maxthon에서 첨부파일 주소 추출을 시도해봤지만 한꺼번에는 안되더군요.

제 개인적으로는 빨리 Gmail이 무제한 용량이 되든지 아니면 GDrive와 같은 서비스가 나왔으면 좋겠네요. 하지만 얼마전에 보니 구글에서 구글내 서비스에 사용되는 HDD 용량을 팔고 있더군요. (>.<)/ 역시 무제한은 힘든건가 봅니다.
3. PHP Gmail Drive로 하이퍼링크 만들기 닫기
# 주의사항

1. Gmail 계정이 2.8GB가 되지만 실제로 파일을 올려보면 아시겠지만, HDD에서 사용하는 용량과는 차이가 있습니다. 그래서 2GB가 넘는 파일을 보낼 경우 계정 용량이 꽉 차서 메일이 돌아오는 경우도 있습니다. 고로 파일의 최대용량은 2GB 정도가 적당할 듯 싶습니다. DVD 이미지와 같은 큰 이미지들은 2GB로 잘라서 업로드 하시면 됩니다.

2. PGD에 너무 많은 계정을 설정할 경우 오류가 나서 페이지가 뜨지 않을 수도 있습니다. 더욱이 계정 내에 첨부파일이 꽉 차있는 경우는 더할 나위 없구요. 그렇기 때문에 계정은 2~3개 정도로 설정하시는 편이 좋습니다. 물론, 페이지가 뜨지 않는다 해도 URL로 바로 다운로드는 가능합니다. (^^!)

backup_to_email.exe P2MSetup.exe


http://futures.tistory.com/247
by Anna 안나 2008. 10. 25. 11:16
Use Google Storage Space as Google Drive Here I have some great little utilities (3 softwares and 2 web scripts) that you can try to use your Gmail account space as your external hard drive. You will be able to download (or should I say copy) attachments from your Gmail account to your computer just as you would do from a drive on your computer. You can also use this space to upload content direct from your computer and save it online in your Gmail account. 1. GMail Drive GMail Drive is third party addon for Windows that lets you use your Gmail account space as an extra drive on your computer. It allows a user to access a virtual drive stored in a Gmail e-mail account by causing the contents of the Gmail account to appear as a new network share on the user’s workstation. In order to use this add-on, the user needs a Gmail e-mail account. The add-on enables the user to use the standard Windows desktop file copy and paste commands to transfer files to and from the Gmail account as if it was a drive on the user’s computer. Download GMail Drive
사 용소감 : 1. Gspace보다 다소 느리고 시스템 stuck현상 발생, 2. 결정적으로 폴더를 생성할 수 없음(폴더 만들수 있는데 오른쪽 창에서 마우스 오클릭하여 "New"를 클릭하면 가능 3. GmailDrive나 Gspce 모두 Gmail 인박스에 수신 파일형태로 나타남 4. PHP Gmail Driver와 호환

2. GSpace (가장 추천하고 싶은 것)
GSpace is a firefox extension that turns your 3GB of your Gmail account into free <input name="IL_MARKER" type="hidden">online storage. With Gspace you can manage unlimited Gmail accounts to store all type of files within its simple, user friendly interface. You can also listen your favourite stored music directly from your Gspace, view your collections of pictures and manage your Gdrive files as well. Download GSpace
사용소감 : 1. 폴더 생성가능 2. 속도가 1번 보다 빠름 3. Firfox에서 돌기 때문에 보안성이 더 좋을 것으로 사료
3. GmailFS GmailFS or Gmail File System is a virtual file system developed by Richard Jones which allows users to mount and use their Gmail email account’s storage as a local disk drive. GmailFS is written for Linux, but Windows and Mac OS X ports do exist. Using GmailFS will provide the user with roughly three gigabytes of <input name="IL_MARKER" type="hidden">online storage. The speed of this filesystem is limited by the speed of the user’s Internet connection, and the upload/download speed of the Gmail server. Files can be any size, and are stored as (segmented) attachments. Download GmailFS
* 이것은 리눅스용(윈도용이 아님)이라서 실행 불가
4. G-Share G-Share is a PHP script that allows you to share your gmail attachments in a webpage, it is a download center with files stored in your Gmail account. You need a MySQL database to store data such as download counters, visitors, etc Download G-Share
테스트 안해봤음

5. PHP Gmail Drive PhpGmailDrive, also known as PGD, is an open source software program written in PHP to share Gmail file attachments on the web. PGD is based on GmailFS, a Gmail attachment file system that uses email subjects for organization. Download PGD
이것 역시 노 테스트
by Anna 안나 2008. 10. 25. 11:15
아마도 Gmail을 웹하드 용도로 그러니까 Gmail Drive나 GSpace, GmailFS와 같은 툴을 이용해 사용해보신 분들은 한번쯤 올려놓은 파일을 링크를 통해서 다른 사람과 공유할 수는 없을까 하는 생각을 해보셨을 겁니다. 그래서 지금부터 앞서 제목에서 언급한 PHP Gmail Drive(이하 PGD)를 이용한 첨부파일을 공유하는 방법을 알려드리고자 합니다. (^^;)

우선 PHP Gmail Drive를 이용하기 위해서는 첫번째, PHP 4.0 이상이 설치되어 있고 더불어 CURL Extension이 깔려있는 호스팅 계정이 있어야 합니다. 제가 사용하는 호스팅 계정의 경우에는 설치되어 있더군요. (^^!) 잘 모르시는 분들은 아래 PGD 설치파일을 다운로드하신 후에 계정에 올려놓고 pgd 폴더 안에 있는 diagnose.php 파일을 실행해 보시면 됩니다. PGD가 사용가능한 경우 6가지 항목에 passed가 뜨고 사용불가능한 경우에는 오류가 나게 됩니다.

두번째, Gmail 계정이 있어야 하고 위에 언급한 Gmail Drive나 GSpace, GmailFS 이 3가지 프로그램 중에 하나를 사용할 줄 알아야 합니다. 3가지 프로그램은 사용하시는 분이 상당히 많은 것으로 알고 있으니 간단히 검색만 하셔도 충분히 사용하실 수 있으리라 생각됩니다. 저의 경우에는 GSpace를 사용하고 있습니다.

그럼 PHP Gmail Drive를 먼저 설치해 보겠습니다.

1. PHP Gmail Drive 소스를 다운로드 합니다.

pgd-0.3.4.zip2. 압축을 푼 후 pgd 폴더를 통째로 계정에 업로드 한 후에 폴더 안에 있는 diagnose.php 파일을 실행시켜 봅니다. 사용이 불가능한 경우에는 호스팅 업체에 CURL extension 사용과 관련하여 문의를 하면 조치가 가능할 겁니다. (^^;)

사용불가시


Warning: dl(): Unable to load dynamic library './php_curl.dll' - ./php_curl.dll: cannot open shared object file: No such file or directory in /home/hosting_users/minilogue/www/pgd/diagnose.php on line 71

Warning: dl(): Unable to load dynamic library './curl.so' - ./curl.so: cannot open shared object file: No such file or directory in /home/hosting_users/minilogue/www/pgd/diagnose.php on line 71
Test 1 (curl extension): failed. It seems that you do not have CURL installed. You may read this for more infos on CURL in PHP.
사용가능시


Test 1 (curl extension): passed. Test 2 (curl http): passed. Test 3 (SSL via curl): passed. Test 4 (cookie set): cookie sent. Note: you have to tell your browser to accept this cookie in order to continue the test. Press here to continue.

Test 5 (cookie get): passed. Test 6 (PHP session extension): passed. If you have all 6 tests passed. You should have no problem installing and using gmail-lite and libgmailer.


3. pgd 폴더 안에 있는 config.php 파일을 자신의 Gmail 계정에 맞게 수정한 후 업로드 합니다.

단일 계정일 경우
$gmail_user[0] = "google@gmail.com(자신의 Gmail 주소)";
$gmail_password[0] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password

복수 계정일 경우

$gmail_user[0] = "google0@gmail.com(자신의 Gmail 주소)";
$gmail_password[0] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[1] = "google1@gmail.com(자신의 Gmail 주소)";
$gmail_password[1] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password
$gmail_user[2] = "google2@gmail.com(자신의 Gmail 주소)";
$gmail_password[2] = "pgdyo(자신의 Gmail 암호)"; //Use your Own password

$maxAccounts = 3; //Number of accounts to be used
//To add an account, copy & paste
//$gmail_user[x] = "@gmail.com";
//$gmail_password[x] = ""; //Use your Own password
//replace them with the correct values and x is the number for the account..
//the number should be incrementing..0..1..2 etc. and should start with 0..

# $maxAccount 를 설정하신 후에 갯수에 맞춰서 계정을 입력하시면 됩니다. 복수 계정으로 PGD를 사용하는 경우 각 계정에 있는 파일들이 계정 구분없이 한꺼번에 나타납니다.

4. Gmail Drive, GmailFS, GSpace 등을 이용해 계정이 파일을 업로드 합니다. 공식적으로 PGD 홈페이지에서 밝히고 있는 것은 Gmail Drive와 GmailFS 입니다만, GSpace로 업로드한 파일도 잘 보이네요. (^^;)

5. 이제 다 끝났습니다. http://자신의 계정/pgd/index.php 를 불러오면 됩니다. 파일 다운로드시에는 '다른 이름으로 저장'을 하도록 합니다.


제가 설치한 PGD의 모습니다. GSpace로 업로드 하다보니 글자 일분이 잘려보이기도 합니다만 전혀 문제없습니다. (^ㅇ^;) 구경해보기

위 그림에서 gs1, gs2로 분할된 파일을 20MB가 넘기 때문에 자동을 분할 된 것이고 GSpace의 Preferences 항목에서 Join이 가능합니다.


현재 다운로드 속도를 테스트해보니 500~600kb/s 정도가 나오네요.

# PGD 사용시 유의사항

1. Gmail을 파일 서버로 사용하는 것은 약관에 위배되기 때문에 과도한 트래픽이 발생할 경우 계정이 24시간 동안 정지당할 수 있습니다. (저도 GSpace 사용하다 600MB 정도 사진을 업로드 했다가 하루 정지당한 적이 있습니다) 또, 사용에 따른 불이익은 본인에게 있습니다. (>.<)/

2. config.php 파일에 Gmail 계정 정보를 저장하기 때문에 보안상 위험할 수 있습니다. PGD 사용시에는 추가 이메일 계정을 만들어서 사용하시는 걸 추천합니다.

3. Gmail 서비스가 업데이트 되면 PGD 사용이 불가능해질 수 있습니다. PGD 홈페이지에서는 libgmailer.php 를 업데이트 하면 왠만큼 해결이 가능하다고는 합니다만, 제 경험상 몇 개월동안 사용이 불가능했던 적도 있었습니다. 즉, 지속적으로 사용이 가능할지는 미지수입니다. (ㅡ.ㅡ^)
by Anna 안나 2008. 10. 25. 11:15
http://philmasterplus.blogspot.com/2007/05/gmail-drive-shell-extension-1011.html
by Anna 안나 2008. 10. 25. 01:16
일단 http://isnoop.net/gmail/ 싸이트에 접속한 후
초기 화면에서 Anti-bot Key 란에 화면에 보이는 숫자를 입력한 후
자신이 사용하는(초대권을 받을 메일)메일 주소를 입력합니다.

잠시후 자신의 메일을 확인하여 위의 사이트에서 Gmail 관련 영문 메일 한통오게 되는데
내용중에 두개의 링크중, 위의 링크를 클릭하게 되면
Gmail 등록을 위한 새창이 뜨게 됩니다.

여기서 본인이름과 새로만들 GMail ID(6자리이상)입력한 후
아래 체크버턴을 눌러 사용하는 유저가있는지 체크하여 확정한 후
밑으로 패스워드와 패스워드 분실시를 대비한 질문과 답등
간단한 입력절차를 마치고 나면 완료가 됩니다.


GMail은 pop3/smtp을 지원하며 설치된
Outlook Express에 등록시키기 위해서 아래의 과정을 진행합니다.

아웃룩을 실행한 뒤
[도구] -> 계정 -> 우측위 추가 버턴 -> 메일을 클릭합니다.

표시이름: 본인이름
전자메일주소: GMail ID@gmail.com

받는메일서버유형: POP3
받는메일(POP3,IMAP 또는 HTTP) 서버(I): pop.gmail.com
보내는메일(SMTP) 서버(O): smtp.gmail.com

인터넷 메일 로그온
계정이름: GMail ID (GMail 아이디 입력하세요)
암호: GMail Password (GMail 비밀번호 입력하세요)
보안 암호인증(SPA))을 사용하여 로그온에는 체크하지 마세요

다음 버턴 -> 마침

인터넷 계정창의 메일탭 클릭 -> 방금만든 GMail ID@gmail.com에 마우슨 왼쪽버턴 1번 클릭한 후
우측에 속성클릭 -> 속성창의 서버탭 클릭 ->
맨아래 "인증 필요"에 체크한 후 -> 고급탭 클릭합니다

위에서 3번째에 있는 "보안 연결(SSL)필요"에 체크합니다.
위에서 5번째에 있는 "보안 연결(SSL)필요"에 체크합니다.
다시 위에서 2번째에 "보내는 메일(SMTP)" 옆에 있는 숫자 25을 465로 수정합니다.

맨 아래에 "배달" 밑의 "서버에 편지 복사본 저장"에 체크합니다(선택사양).


위의과정을 마친후

http://gmail.com 에 로그인한 후 초기 화면에서
우측 상단에 있는 "Settings"을 클릭합니다.

4번째 탭에 있는 "Forwarding and POP"을 클릭한 후
중간쯤에 있는 "Enable POP for all mail"에 체크하고
아래에 있는 "Save Changes"을 클릭합니다.

이로써 모든 설정은 완료되었으므로 실제로 모든 설정이 제대로 이루어 졌는지
테스트 해보시면 됩니다.



다음은 1G 나 되는 적지않은 메일 용량을 "웹하드"로 사용하기위한 설정입니다.


http://www.viksoe.dk/code/gmail.htm 에 접속한 후 맨아래에 있는
"GMail Drive v1.0.5 - download site #1" 혹은 그 아래를 클릭하여
다운로드 합니다.


다운받은 gmailfs_105.zip 파일을 압축해제, Setup.exe을 실행하여 설치하면
"내 컴퓨터"에서 지금껏 없던
"GMail Drive"라는 드라이브를 볼수 있습니다.

해당 드라이버에 마우스 오른쪽 버튼을 누르면 언제든지 로그인, 아웃을 할수 있으며
파일 전송은 끌어놓기등 일반적인 탐색기에서의 작업처럼 전송하심됩니다.

전송 파일 사이즈는 최대 10MB 로
전송후 언제 어디서든 Gmail 로 접속하여 업로드된 파일을 사용할 수 있습니다.
by Anna 안나 2008. 10. 25. 01:16
G-Mail은 구글에서 서비스 하는 메일로 국내엔 다음, 네이버, 야후 메일을 사용하시는 분이 많아 한국 사람들 중 대부분은 잘 모르고 계실 것입니다. 단순히 읽기, 쓰기용도라면 굳이 G-Mail을 사용하실 필요는 없겠지요. G-Mail은 2008년 6월 21일 확인 결과 저장 용량이 6848MB. 즉, 6.68GB까지 공간 사용이 가능합니다. 물론, 메일 용도로만 쓰면 너무 과한 용량이 아닐 수 없지요. (1GB만 되더라도, 보통 메일로 몇천, 몇만통은 가능하니까 말입니다.) 하지만 이 공간을 메일 용도가 아닌 HDD용도로. 즉 웹 하드로 사용할 수 있다면 거의 7GB에 육박하는 웹 하드공간을 보유할 수 있습니다. 부담이 전혀 되지 않는 개인 무료 웹 하드가 생긴다는 말입니다. 그럼 쓸데 없이 많은 용량을 HDD로 사용하여 봅시다. 첫번째로 www.google.co.kr로 가셔서, G-Mail회원으로 등록 합니다. 예전에 비해 가입 절차는 상당히 간단해 졌으니 부담 없이 가입 하시리라 생각 합니다. 두번째로 http://www.viksoe.dk/code/gmail.htm 에서 Gmail Drive라는 프로그램을 다운 받습니다. 무료로 다운로드 가능하니 조금만 찾아보시면 받으실 수 있을겁니다. 압축을 해제한 후 인스톨을 하면 모든 준비는 완료입니다. (참고로 인스톨 시 경로 지정이 되지 않습니다. 기본으로 C드라이브에 설치 됩니다.) 세번째로 '내 컴퓨터'에 들어가시면 아래에 드라이브 형식으로 GMail Drive라는 디스크가 생겼습니다. 더블클릭 하시면, 아이디&패스워드 입력창이 뜨며 G-Mail아이디&패스워드를 입력하여 주시면 접속하실 수 있습니다. 네번째로 폴더처럼 파일을 드라이브에 드래그&드롭 하시면 자동으로 구글 웹 공간으로 전송 됩니다. 다만 용량이 상당히 큰 파일들은 업로드에 제한이 있습니다. (분할 압축해 주세요.) 이상으로 설치&사용법은 종료입니다. 구글의 G-Mail은 초기 2GB정도의 공간을 제공했습니다만, 갈수록 용량이 늘어가더군요. 이 방식으로 유용히 웹 하드로 사용해 주셨으면 합니다.
by Anna 안나 2008. 10. 25. 01:15
체크박스와 라디오버튼을 이미지로 바꾸는 것입니다.

샘플 보기

설치
- MyUI.js를 다운로드 받습니다. (다운로드)
- MyUI.zip을 다운로드 받습니다. 이미지 파일입니다. (다운로드)
- 업로드 한 후 HTML 페이지에 아래의 코드를 맨 위에 추가합니다. <script type="text/javascript" src="MyUI.js"></script>
사용법
용도에 따라 아래의 스크립트를 페이지 하단에 추가합니다.

1. 특정한 체크박스만 이미지로 바꾸고 싶으시면new MyCheckBox(document.forms['폼이름'].elements['체크박스이름']);
2. 특정 폼의 모든 체크박스를 이미지로 바꾸고 싶으시면new MyCheckBoxes(document.forms['폼이름']);
3. 특정한 라디오버튼만 이미지로 바꾸고 싶으시면new MyRadioButton(document.forms['폼이름'].elements['체크박스이름']);
4. 특정 폼의 모든 라디오버튼을 이미지로 바꾸고 싶으시면new MyRadioButtons(document.forms['폼이름']);

이미지 바꾸기
자신이 만든 이미지로 바꾸시려면 MyUI.js 소스안에 있는 resources와 styles 부분을 수정하시면 됩니다. 한번 보시면 바로 이해하실 수 있을 겁니다. http://blog.miniwini.com/archives/2006/06/@12-32-11.php
by Anna 안나 2008. 10. 17. 23:34
Fun with forms ? customized input elements By Søren Madsen

Ever wanted to match the look of your HTML forms with the rest of your website? This article demonstrates how to apply customized backgrounds to HTML forms, while preserving stucturally clean markup and accesibility.
A few considerations before we begin Before you throw yourself at this, there are some important considerations you have be aware of. Usability Users trust their credit card and personal information with forms on the internet, and that trust is sacred. So changing the appearance of well-known and recognizable browser elements like the basic input elements, may therefore not always be advisable. If you know your audience well enough, and you're confident that changing the appearance of form elements won't confuse or distract said audience from ie. an online purchase, please read on. Differences in user agents The techniques we're about to demonstrate are not generic. Form elements are "replaced elements", which means they come directly from the heart of your OS, and not the browser itself. The CSS specifications do therefore not require that form elements should be able to receive styling.
Most popular browsers have however provided us with options to do so, but not all of them. In fact, the following won't work at all in browsers like Safari , since eg. Safaris form elements are tied closely to the Mac OS presentation system, and therefore doesn't allow styling form elements much more than basic height and width. (Update: The following technique does indeed work in the new Safari 1.2 - Argh, I received contradictory reports! No, it doesn't)
So what are we left with? Well ? from what yours truly has been able to test, the following works in IE5+, partially in Opera, and gecko-based browsers (Netscape, Mozilla/Firebirdfox). Logical restrictions With this technique, we basically hide the given form element, and replace it with graphic backgrounds. Since that doesn't really make sense with all form elements like select, file fields, radio buttons and check boxes due to their behaviour and functions, I've restricted the scope of this article to work with input fields, text areas and submit buttons, and if you're fine with that ? by all means, read on. Some form basics ? the <fieldset> and <legend> elements The fieldset element functions as a structural container for different sections within a form element. An example would be an order form, which is divided in several structural sections, such as personal information, credit card information and shipping information ? but all part of the same form element. To provide meaningful structure between these sections, you would use the fieldset element. The legend element provides a feature to give each of these fieldset groupings a caption/title. Here's what it might look like: <form method="post" action="handle.ext">
<fieldset>
<legend>Personal information</legend>
input fields here ...
</fieldset>
<fieldset>
<legend>Credit card information</legend>
input fields here ...
</fieldset>
<fieldset>
<legend>Shipping information</legend>
input fields here ...
</fieldset>
<fieldset>
submit/reset buttons here ...
</fieldset>
</form> Note that the legend element is optional. ? the <label> element Some form elements have an implicit labelling feature, like the value attribute of submit buttons ? but most do not. The label element attaches descriptive information to form elements like input fields, radiobuttons, textareas etc. The label element also provides interactivity by focusing/selecting the form element it describes, when it is clicked on with the mouse.
One or more label elements can be attached to a given form element with the labels for attribute. <label for="tf1">Name: </label><br />
<input type="text" id="tf1" value="" /><br />
<label for="tf2">Email: </label><br />
<input type="text" id="tf2" value="" />

Choose <label for="rb1">Yes</label>
or <label for="rb2">No</label>:<br />
<input id="rb1" name="nlrb" type="radio" value="yes" />
<label for="rb1"> Yes</label><br />
<input id="rb2" name="nlrb" type="radio" value="no" />
<label for="rb2">No</label> The HTML above produces the following result: Name:

Email:

Choose Yes or No:
Yes
No Notice that, by clicking the assigned labels, the appropriate form element is focused/selected - try it out! The labels can be placed anywhere - try choosing Yes or No right here. Styling the contact form For this article, let's do something fairly simple and often needed, the contact form. <form action="default.asp" method="post">
<fieldset>
<legend>Contact form </legend>
<label for="name">Name:</label><br />
<input type="text" id="name" name="name" />
<br />
<label for="email">Email:</label><br />
<input type="text" id="email" name="email" /><br/>
<label for="website">Website:</label><br />
<input type="text" id="website" name="website" value="http://" />
<br />
<label for="comment">Comment:</label><br />
<textarea cols="30" rows="15" name="comment" id="comment">
</textarea>
<br /><label for="submit">&nbsp;</label><br />
<input id="submit" name="submit" type="submit" value="submit" />
</fieldset>
</form> ? See step I ? primary markup First step - positioning the elements Guess what? We received an email from our graphic designer again. He attached an illustration and wrote:
“We have a client whose wife told him that everything we'd done with his new website was just dandy; except for that contact form. She hated that. So the client asked whether it would be possible to do something about those standard boring form elements? I told him I'd look into it ... sigh. You told me you like challenges, so what do you say? Can you make the contact form look something like the illustration I attached?” “Sure! I'll get back to you” I replied, while biting my lips. Our basic form in step 1 works well, and makes sense in all its non-styled glory. The labels are followed by a <br />, so everything's lined up nicely - line by line. But in the illustration we were sent, the labels are positioned to the left of the assigned input field; almost like a column. We'll solve that by assigning the <br />'s we do not want to affect our layout a class <br class="nobr" /> ? and that class simply specifies display:none;.
To give our labels the column behaviour, we give them a shared width, float them to the left, and right align them. Here is what we have so far; general design parameters and a primary layout for the form: body {
font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:60%;
margin:50px;
color:#666; }
.fieldset {
width:300px; }
.fieldset .label {
text-align:right;
width:70px;
float:left;
padding:0.2em;
margin:0;
margin-top:0.3em; }
.fieldset .nobr {
display:none; }
.fieldset .textfield {
margin:3px;
height:20px;
width:200px; }
.fieldset .textarea {
margin:3px;
height:165px;
width:200px; } We've obviously also assigned class names to the elements we want to target with CSS. Don't trust us; See for yourself: ? See step II ? Basic layout and structure Next step ? "hiding" the respective form elements So far so good. What we want to do now, is hide the input and textarea elements. Well; not excactly hide, but for this exercise, we don't want to keep anything other than their functionality (areas to fill in text) ? and then we'll decide what their graphical manifestation will be, by the use of background images. In this case; easier done than said, but this is also where our crossbrowser compliancy stops. We've been able to confirm that the following trick works in IE5+, Opera(?) and Gecko based browsers(?), but not in eg. the popular Safari browser for Mac, sorry.
The trick is really simple actually. It turns out that it takes nothing more than a border:solid 0 #fff; applied to the input elements, will hide their manifestation - but not their functionality. The color you specify for the border could be a flaming pink for what it matters, but it doesn't really matter - it won't display. See the following ? the fields are there, you just can't see them: ? See step III ? Input fields are "hidden", except for their functionality Third step ? placing background images in the input elements Placing background images in the input fields, works just like it normally does, with one small exception we'll get back to. The CSS for our .texfield class looks like this for instance: .fieldset .textfield {
margin:3px;
height:20px;
width:200px;
border:solid 0 #fff;
background: transparent
url("graphics/textfield_bg.gif") no-repeat; } See what it looks like: ? See step IV ? input elements with backgrounds replaced with images Looks nice, eh? We obviously have to add some padding to our input and textarea elements, and we'll get back to that ? but right now that's not our biggest concern. Fourth step ? dealing with a few browser differences If you're viewing this article in IE5+ on Windows, you'll notice that the background images in step 4 start scrolling once the input fields are filled up with text. In other browsers the background images stay in place. We don't want that to happen, so we asked ourselves: “What happens if we add fixed to the background rule?” Well ? it did the job solving our problem in IE5+, but caused even bigger problems in other browsers like Mozilla Firefox, because the background images becomes absolutely fixed. So what we'll do, is mix the two solution we now know works in different browsers: .fieldset .textfield {
margin:3px;
height:20px;
width:200px;
border:solid 0 #fff;
background: transparent
url("graphics/textfield_bg.gif") no-repeat fixed; }
fieldset>input.textfield {
background: transparent
url("graphics/textfield_bg.gif") no-repeat; } IE5+ doesn't get the fieldset>input.textfield selector, but other browsers do, so within that selector we'll hide rules from IE5+. And that was pretty much it! The final layout is available below. Adding padding to our input elements, triggered the usual box model problems, so the Tantek box model hack is used to feed appropiate width values to different browsers - but besides that, the remaining new rules are general styling parameters like font-size and color, and some excessive styling of the legend element, that you may disregard. View the source for details on the finished layout: ? See step V ? The final result Final thoughts We sincerely hope this article inspired you / gave you ideas on how to customize the layout and appearance of your online forms. We' do however stress the points raised in the beginning of this article - the considerations about usability and browser differences. Input elements are very hard to style, because todays browsers handles these elements very differently, but if the scope of browsers that this technique was written for, is satisfactory to you, we're glad we could help! Article published 24, Feb, 2004. Please leave comments at corresponding newspost.
Søren Madsen - www.picment.com
http://www.picment.com/articles/css/funwithforms/
by Anna 안나 2008. 10. 17. 22:26
http://kin.naver.com/detail/detail.php?d1id=1&dir_id=109&eid=sCEo8JMc3J9QMIW4U4TZw7aN1s2Au/T7&qb=c2hvdXRib3g= http://blog.naver.com/gfeel?Redirect=Log&logNo=120010749129
by Anna 안나 2008. 10. 17. 18:49
Nick La의 디자인 블로그 WebDesignerWall에서 XHTML/CSS를 이용한 겔러리 이미지 데코레이션 CSS Decorative Gallery에 대한 기사가 올라왔다. 이미지툴에서 별도의 작업 없이 SPAN 태그만으로 다양한 이미지 데코레이팅이 가능하다는 것을 볼 수 있다. 기본적으로 PNG의 알파채널을 이용해서 눈에 보이는 부분과 투명값이 적용된 부분을 이용한 Trick인데, WTA의 겔러리에서 Flash Winner등의 뱃지가 썸네일 좌측 상단에 붙어있는 것도 이것과 마찬가지로 Span 태그를 이용한 데코레이션 기법이다.

예문을 8가지나 들어 데모페이지를 제공하고 있으므로 누구나 쉽게 가장 마음에 드는 데코레이션 기법을 사용해 볼 수 있다. http://www.webtrendawards.com/1337
by Anna 안나 2008. 10. 17. 18:45
VickiWorks Studio에 서 제공하는 가볍고 깔끔한 CSS 블록 네비게이션 메뉴. 단 몇줄의 코드만으로 유치하지 않은 검색엔진 친화적 메뉴를 작성 할 수 있다. Nick La의 검색 엔진 친화 최적화에 대한 블로그를 보면 왜 CSS 메뉴가 플래쉬 메뉴보다 탁월한지에 대해 아래와 같이 서술하고 있다. Many designers make this mistake by using Flash menus such as those fade-in and animated menus. They might look cool to you but they can’t be seen by the search engines; and thus the links in the Flash menu will not be followed.
SEO에 대한 보다 심청적인 내용에 대해 알고 싶다면 Nick La의 webdesignerwall.com에 기재된 SEO Guide for Designers 기사를 참고하기 바란다. 아무튼 첨부 된 파일은 다음과 같이 HTML 코드와 CSS 코드를 가지고 있으니 자신의 사이트에 직접 추가해 본다. XHTML / CSS Code HTML Code
view plaincopy to clipboardprint? <ul class="menu"> <li><a href="#">Menu01<br /><span>Short desc</span></a></li> <li><a href="#">Menu02<br /><span>Short desc</span></a></li> <li><a href="#">Menu03<br /><span>Short desc</span></a></li> </ul> <ul class="menu"> <li><a href="#">Menu01<br /><span>Short desc</span></a></li> <li><a href="#">Menu02<br /><span>Short desc</span></a></li> <li><a href="#">Menu03<br /><span>Short desc</span></a></li> </ul>
CSS Code
view plaincopy to clipboardprint? ul.menu { margin:0;padding:0; } ul.menu li { display:block;padding:0; float:left;text-align:left;margin-right:2em; } ul.menu li a { color:#fff;font:bold14px georgia;text-decoration:none;line-height: 1.3em; display:block; } ul.menu li a:hover { color:#ffc300; } ul.menu li span { font:11pxarial; color:#666; margin:0; } ul.menu li span:hover {color:#999;} ul.menu { margin:0;padding:0; } ul.menu li { display:block;padding:0; float:left;text-align:left;margin-right:2em; } ul.menu li a { color:#fff;font:bold 14px georgia;text-decoration:none;line-height: 1.3em; display:block; } ul.menu li a:hover { color:#ffc300; } ul.menu li span { font:11px arial; color:#666; margin:0; } ul.menu li span:hover {color:#999;} http://www.webtrendawards.com/818
by Anna 안나 2008. 10. 17. 18:43
css_vmenu.zip 필자가 IAC Korea 웹사이트에 사용한 CSS Vertical Menu. 특별한 Generator의 도움 없이 CSS의 ID만으로 Selected 효과(클릭한 메뉴가 하이라이트)가 가능한 간단하면서도 검색엔진 친화적 메뉴다. css_vmenu.zip 파일을 다운로드 받으면 다음과 같은 소스가 포함되어 있다. 참 고로 클릭한 메뉴가 다음 페이지에서 Selected On으로 표시하고 싶다면 HTML 문서에서 body 태그에 cars-black이라는 이름의 ID를 부여 해 놓은 후, CSS 파일에서는 아래와 같이 cars-black이라는 ID에 대해 Selected 되었을 경우에 해당 LI 태그의 배경색이 바뀌게끔 정의한다. view plaincopy to clipboardprint? body#cars-black a#black, { background-color: #1c1c1c; } body#cars-black a#black, { background-color: #1c1c1c; } XHML & CSS Code XHTML Code
view plaincopy to clipboardprint? <body id="cars-black"> <ul id="vmenu"> <li class="top"><a href="#">Cars Category</a></li> <li><a href="#" id="black-plus">Black Plus+ Membership</a></li> <li><a href="#" id="black">Black membership</a></li> <ul> <li><a href="#">Group A</a></li> <li><a href="#">Group B</a></li> <li><a href="#">Group C</a></li> </ul> <li><a href="#" id="corporate">Corporate Membership</a></li> <li><a href="#" id="platinum">Platinum Membership</a></li> <li class="bottom"><a href="javascript:history.back();">Back to previous</a></li> </ul> </body> <body id="cars-black"> <ul id="vmenu"> <li class="top"><a href="#">Cars Category</a></li> <li><a href="#" id="black-plus">Black Plus+ Membership</a></li> <li><a href="#" id="black">Black membership</a></li> <ul> <li><a href="#">Group A</a></li> <li><a href="#">Group B</a></li> <li><a href="#">Group C</a></li> </ul> <li><a href="#" id="corporate">Corporate Membership</a></li> <li><a href="#" id="platinum">Platinum Membership</a></li> <li class="bottom"><a href="javascript:history.back();">Back to previous</a></li> </ul> </body>
CSS Code
view plaincopy to clipboardprint? <!-- body {background-color:#000000} body#cars-black a#black, { background-color: #1c1c1c; } #vmenu { font: 11px"Lucida Grande", Geneva, Arial, Verdana, sans-serifsans-serif; list-style-type: none; width: 291px; margin: 25px0px20px0px; padding: 0px; background-color: #2a2a2a; } #vmenu li a { color: #949494; height: 22px; border:1pxsolid#000000; border-bottom: none; padding: 10px0px0px15px; display:block; text-decoration:none} #vmenu li a:hover { color: #ffffff; text-decoration: none; background-color: #1c1c1c; } #vmenu li.top a { background: #2a2a2aurl(btop.gif) no-repeattop; font-weight: bold; display:block; } #vmenu li.bottom a{ color: #666666; background: #2a2a2aurl(bbottom.gif) no-repeatbottom; display:block; } #vmenu ul {margin: 0px; padding: 0px; list-style-type: none; border: 1pxsolid#000000; border-bottom: none; background-image: url(/images/sample/vmenu_bg.gif); } #vmenu ul li a { height: 15px; color: #949494; padding: 5px0px5px15px; border: none; background-color: #333333; background-image: none; text-decoration:none} #vmenu ul li a:hover { color: #ffffff; text-decoration: underline; background-color: #333333; background-image: none; } --> </style> <!-- body {background-color:#000000} body#cars-black a#black, { background-color: #1c1c1c; } #vmenu { font: 11px "Lucida Grande", Geneva, Arial, Verdana, sans-serif; list-style-type: none; width: 291px; margin: 25px 0px 20px 0px; padding: 0px; background-color: #2a2a2a; } #vmenu li a { color: #949494; height: 22px; border:1px solid #000000; border-bottom: none; padding: 10px 0px 0px 15px; display:block; text-decoration:none} #vmenu li a:hover { color: #ffffff; text-decoration: none; background-color: #1c1c1c; } #vmenu li.top a { background: #2a2a2a url(btop.gif) no-repeat top; font-weight: bold; display:block; } #vmenu li.bottom a{ color: #666666; background: #2a2a2a url(bbottom.gif) no-repeat bottom; display:block; } #vmenu ul {margin: 0px; padding: 0px; list-style-type: none; border: 1px solid #000000; border-bottom: none; background-image: url(/images/sample/vmenu_bg.gif); } #vmenu ul li a { height: 15px; color: #949494; padding: 5px 0px 5px 15px; border: none; background-color: #333333; background-image: none; text-decoration:none} #vmenu ul li a:hover { color: #ffffff; text-decoration: underline; background-color: #333333; background-image: none; } --> </style> written by..http://www.webtrendawards.com/838
by Anna 안나 2008. 10. 17. 18:42
IE 의 도구 > 인터넷 옵션 > 프로그램 > 웹설정 원래대로
by Anna 안나 2008. 10. 13. 22:36
이번에 새로 나온 인증패치는 기존 인증 건너뛰는 방법(추가기능관리 비활성화)으로는 통하지 않습니다.

일단 도구-윈도우 업데이트에서 하라는대로 업데이트 하면 정품인증혜택 업데이트를 합니다.
다시 접속해서 업데이트를 하면 정품인증 문제로 업데이트가 안됩니다.




해결방법



1. 익스플로러 - 도구 - 윈도우 업데이트
2. 업데이트 사이트로 이동이 됩니다.(업데이트 갔을시 초기 사이트 페이지로...)
사이트가 완전 로드되면 빠른설치버튼과 사용자 지정설치 버튼이 뜹니다.
3. 파일 - 열기를 클릭해 (사이트 이동시 쓰는 방법입니다.)
다음을 입력해줍니다.
4.
javascript:void(window.g_sDisableWGACheck='all')
5.
입력후 엔터
6. 아무런 변화가 없다. [이미 적용이 된 상태랍니다]
7. 업데이트를 진행하면 업데이트가 됨

4번까지 진행 후 즐겨찾기 추가해주시면 업데이트 사이트 바로가기식이 되는 거죠.
이걸 먹여준 다음 빠른 설치버튼이나 사용자 지정설치 버튼 클릭후
업데이트 하는대로 나가면 업데이트 할걸 할 수 있습니다.
by Anna 안나 2008. 10. 3. 11:39
XHTML및 HTML 4.01부터 사용 불가능한 태그 :
center, s, strike, u 등이 있습니다.

center의 대책!..
CSS로 바꾸어 씁니다.
text-align: center;

s의 대책!..[strike 포함]
CSS로 바꾸어 씁니다.
text-decoration: line-through;

u의 대책!..
CSS로 바꾸어 씁니다.
text-decoration: underline;

++
윗줄을 한번 쳐봅시다~^^..
text-decoration: overline;

윗줄 밑줄을 동시에 치려면?
text-decoration: overline underline;
?죠?^^..


가장 오해하는 몇가지!...
blockquote는, 들여쓰기 할때 쓴다? 도대체 누가 그런 발상을 -_-;
이렇게 쓰시는 분들.. 모두 아니 무조건 반성하십시요.

blockquote의 쓰임을 아시는 지요.. 바로 인용문을 나타낼때 사용하는 겁니다.
즉, 어떠한 글을 인용하거나 할때 blockquote를 사용해서 알려주지죠.

그런데 어떻게 이것을 들여쓰기용으로 사용하시는 지..
text-indent: 1em;
이렇게 하시면 한글자 들여쓰기 됩니다.

비표준 속성-_-;;;;;;;;;
cursor: hand;
이거 표준아닙니다. FF에서 보면 이거 잘못되었다고 나오고요.
표준은, hand가 아닌, pointer입니다. IE에서 이상한 것만 만들어 내서 원..


그리고, 태그를 쓸적에.. 대/소문자 구문안한다고 했는데요.
XHTML넘어와서는 무조건!.. 소문자로 써주셔야 합니다.
속성은 모두 "등으로 묶어주고요~
by Anna 안나 2008. 7. 29. 16:19
보통 CSS를 사용하면 파폭, 사파리, 오페라에서는 잘 보이는데 IE에서는 깨진다거나 IE7까지는 맞출 수 있지만 IE6까지 맞출 방법이 없다거나 그렇다고 IE6에다 맞추면 다른 브라우저에서 전부 깨져보인다던가 하는 난감한 일이 발생합니다. 그런 경우를 위한 팁을 적어보겠습니다.

***HTML명령어 if IE 와 COMMENT***

if IE와 COMMENT가 무엇인가요?

두 명령어는 익스플로러에서만 지원하는 특수 명령어입니다. 다만 if IE는 웹표준 검사 시에 주석으로 인식 되어 통과가 되지만 comment는 비표준 태그에 해당하기 때문에 얄짤없이 테스트에 탈락하게 되니 웹표준 테스트에 신경을 쓰시는 분이라면 다른 종류의 방법. 이를테면 CSS핵 등을 사용하시길 권해 드립니다.

if IE는 HTML코드 사이에 IE에서만 작동하는 코드를 포함시킬 수 있는 명령어입니다. 기본적으로 주석의 형태를 가지고 있기 때문에 다른 브라우저에서는 이 명령어가 포함된 문장은 실행이 되지 않습니다. if IE가 더욱 마음에 드는 점이라면 익스플로러의 버전별로 다 명령어를 설정해 줄 수 있다는 것이지요.

COMMENT는 if IE와는 반대 되는 성격을 가진 명령어입니다. if IE가 쓰인 행이 IE에서만 인식이 되고 기타 브라우저에서는 주석으로 인식해서 비활성 처리가 되는 것에 반해 COMMENT는 IE 전용 주석 설정태그로써 이 태그가 사용된 행은 IE에서는 주석으로 인식되지만 기타 브라우저에서는 COMMENT를 비표준 태그로 인식해서 COMMENT 안에 들어간 내용을 전부 실행해 버리지요.

어떻게 사용하나요?

if IE 명령어는 이런 식으로 사용합니다.
<!--[if IE]>

IE 유저에게만 표시할 내용

<![endif]-->

IE에서만 실행 할 내용.


버전별로 따로 설정을 할 수도 있습니다.
<!--[if IE 6]>
IE6 유저에게만 표시할 내용
<![endif]-->

같은 방법으로 <!--[if IE 7]>이라고 하면 IE7 유저에게만 보이겠지요?


comment 명령어의 사용법은 더 쉽습니다.
<comment>
기타 브라우저 사용자에게만 표시할 내용
</comment>

실제로 사용되는 사례를 가르쳐 주세요.

각 브라우저 별로 전혀 다른 페이지를 보여주는 것도 물론 가능하기는 합니다만 저는 각 브라우저별로 다른 CSS를 사용하는 데에 많이 사용합니다.

이를테면 이런 경우입니다.
<style>
.test { font-weight:bold; }
.test_IE6 { text-decoration:underline; }
.test_IE7 { color:#CCCCCC; }
</style>

<html>

<!--[if IE 6]>
<div class = "test_IE6">
<![endif]-->

<!--[if IE 7]>
<div class = "test_IE7">
<![endif]-->

<comment>
<div class = "test">
</comment>

이 글자가 어떻게 보이십니까?
</div>

</html>



이 코드를 브라우저 별로 실행시켜 보시면 IE6에선 밑줄이, IE7에서는 글씨가 회색으로, 파이어폭스 등 기타 브라우저에서는 글씨가 굵게 보일겁니다. 이런 식으로 브라우저별로 다른 CSS를 설정해 줄 수가 있는 것이지요. 그 중에서도 버그 상습범인 IE는 이런 식으로 CSS 클래스 자체를 다르게 주어서 격리를 시키는 것이 최고이지요.
참고할만한 사이트 : http://www.quirksmode.org/css/condcom.html
by Anna 안나 2008. 7. 29. 16:17
CSS에는 position:fixed 라는 속성이 존재하고 이 속성이 부여된 엘리먼트는 화면에 고정되어 스크롤을 해도 움직이지 않고 항상 같은 자리에 머물게 됩니다. 흔히 "스크롤을 따라다니는 배너" 라고 표현하는 이런 UIO(User Interface Object) 따위를 코딩할 때 이 속성을 사용할 수 있는데 보통의 경우 IE6에서 지원하지 않기 때문에 별도의 자바스크립트를 추가하여 이 기능을 구현해 왔습니다. 하지만 이제는 더이상 그럴 필요가 없을것 같습니다. 자바스크립트는 전혀 사용하지 않고 CSS Hack을 사용하여 IE6 에서 position:fixed 상태의 레이어를 구현할 수 있는 팁을 발견하였습니다. 예제 미리보기 http://naradesign.net/open_content/reference/fixedLayer/index.html CSS Code * { margin:0; padding:0;} /* html, body 사이의 간격을 제거 */
html { _overflow:hidden;} /* 기본 스크롤 제거 */
body{ _height:100%; _width:100%; _overflow:auto;} /* 대체 스크롤 생성 */
#content { width:580px; height:1000px; margin:20px; padding:10px; background:#eeeeee;}
#aside { position:fixed; _position:absolute; _z-index:-1; left:650px; top:20px; width:100px; height:300px; padding:10px; background:#dddddd;}
HTML Code <div id="content">
<h1>Fixed Layer Hack for IE6</h1>
</div>
<div id="aside">
<h2>Example</h2>
</div>
이 팁의 핵심은 <html> 요소에서 발생하는 스크롤을 제거하고 <body> 요소에 스크롤을 부여하는 것입니다. <html> 에 스크롤이 붙으면 <html> 내부의 모든 콘텐트가 스크롤과 함께 움직이지만 <body> 요소로부터 발생한 스크롤은 <html> 요소를 offset(x,y) 기준점으로 삼고있는 #aside 요소의 화면배치에 아무런 영향을 주지 않습니다. 만약 <body> 요소에 position:relative 를 주게 된다면 offset 의 기준점이 <body> 가 되기 때문에 레이어를 화면에 고정할 수 없는 상태로 다시 돌아가게 됩니다. 예제 코드에서 강조 표시된 코드가 관련 코드이며 이 팁의 내용을 더욱 자세하게 이해하고 싶으시면 관련 CSS 속성을 하나씩 제거하면서 테스트 해보시기 바랍니다. 브라우저 호환정보 Firefox2, Opera9, Safari2, IE6~7 에서 모두 동일하게 position:fixed 형태로 렌더링 합니다. IE5.0~IE5.5 버전의 브라우저에서는 position:absolute 형태로 렌더링 합니다. DTD가 Quirks Mode 상태일 때에는 적용되지 않습니다. 발견된 문제점 현재 코드는 IE6 핵으로서 #aside 영역에 _z-index:-1 속성을 사용하였기 때문에 IE6 에서는 #aside 영역의 텍스트를 자연스럽게 드래그 하거나 링크를 클릭할 수 없습니다. 다른 브라우저에서는 발생하지 않는 현상입니다. 한편 _z-index:-1 을 제거하게 되면 텍스트를 드래그 하거나 링크를 클릭하는 것이 가능하지만 화면크기를 줄였을 때 #aside 레이어가 세로 스크롤바를 덮는 현상이 발생합니다. 이 문제 역시 IE6 에서만 발생하는 현상입니다. 참조 http://www.cssplay.co.uk/layouts/fixed.html http://hiphapis.net/entry/IE6fixed http://naradesign.net/wp/2007/09/08/128/
by Anna 안나 2008. 7. 29. 15:51
사실 ‘따라다닌다’ 는 표현은 잘못된 표현이고 그 반대로 ‘고정된’ 이라고 부르는 것이 맞는 표현 같습니다. 이번 글은 언젠가 한번 정리하려고 생각해 놓은 주제였는데 모질라 커뮤니티에서 어떤분이 ‘따라다니는 배너’ 소스에 대한 질문을 하셨기에 그곳에 답변 달아드리고 이곳에도 포스팅 합니다. Javascript 가 Client Side 의 UI를 풍부하게 해주는 것만은 사실이지만 꼭 필요한 곳에만 사용해야 한다는 원칙이 필요합니다. 사실 저는 Javascript 코드를 처음부터 끝까지 직접 짜는 능력은 없지만 다행히도 특별히 코치해 주시는 선생님 과 주변의 전문가들이 계셔서 매번 어렵지 않게 문제를 해결하고 있습니다. 하지만 이마저도 싫어라 합니다. Javascript 가 동작하지 않는 환경을 고려하여 웹문서의 접근성을 높이려는 이유 입니다. 바로 본론으로 들어갑니다. 아래와 같은 코드를 사용하면 ‘CSS 만으로 따라다니는 배너 만들기(Updated_070908)‘ 가 가능합니다. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Fixed Quick Link</title>
<style type="text/css">
#quickLink { position:fixed; _position:absolute; left:800px; top:200px; width:100px; height:300px; background:#CCC;}
</style>
</head> <body>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<p>-</p>
<div id="quickLink">Fixed Quick Link</div>
</body>
</html> 웹 브라우저(Vendor) 호환성 측면 검토
Firefox, Opera, Safari 브라우저와 특히 IE 7.x 도 이것을 지원합니다. 단, IE6.x 에서는 position:fixed 라는 표준속성을 지원하지 않기 때문에 예제코드에는 underscore hack ‘_’ 을 사용하였고 이것은 IE 6.x 이하의 버전에서만 position:absolute 방식으로 작동하게 된다는 것을 의미합니다. 즉, IE 6.x 이하의 버전에서는 문서의 내용에 고정되고 나머지 브라우저에서는 문서와는 별개로 창에 고정(fixed)되어 의도했던 효과대로 스크롤을 따라다니는 것처럼 보입니다. 장점
자바스크립트를 사용하는 것보다 시스템리소스를 덜 잡아먹으며 코드가 줄고 ‘깔끔’ 해진다는점 입니다. 단점 IE 6.x 브라우저에서만 다르게 렌더링 된다는 점 입니다. 하지만 이것은 큰 문제가 되지는 않는다고 생각합니다. 저같은 경우는 클라이언트를 직접 설득합니다. 그렇지 않아도 AxtiveX 나 다른 필수 Javascript 때문에 로딩속도가 느린데 그런 단순한 기능도 Javascript 를 사용해서 페이지 로딩속도에 지장주지 말고 웹 표준으로 깔끔하게 처리하자구요. 실제로 있었던 일입니다. ‘IE 6.x 에서 큰 문제가 되지 않는다’ 는 발언으로 미루어 추측하셨겠지만 특히 요즈음과 같은 경우 하위버전 호환성보다 상위버전 호환성에 무게를 두고 개발하는 편입니다. 내년 상반기부터는 IE 7.x 에 대한 자동업데이트가 시작될 테니까요. http://naradesign.net/wp/2006/12/16/101/
by Anna 안나 2008. 7. 29. 15:48
이 문서는 다음 두 곳을 상당부분 참고하여 작성되었습니다. TracOnWindows : http://yeoupooh.us.to:8080/wiki/display/pu/TracOnWindowstrac 한글번역 프로젝트 : http://kldp.net/forum/?group_id=724 trac 설치 TracOnWindows 패키지를 받아 http://yeoupooh.us.to:8080/wiki/display/pu/TracOnWindows 설명대로 설치trac 한글번역 프로젝트 0.10.4-ko (http://kldp.net/forum/forum.php?forum_id=3781) 설치 패키지파일을 받아 를 압축을 임시 폴더에 푼다.TracOnWindow 의 setenv.bat (C:\Trac\ 에 위치) 가 실행된 상태,압축이 풀어져있는 폴더의 루트에서 python ./setup.py install 수행 trac 플러그인 설치 기초작업 수행 C:\Trac\Python\Scripts 의 easy_install-2.4-script.py, easy_install-script.py 의 첫줄 경로를 수정해줄것(C:\Trac\Python\Python.exe 로)개별 플러그인 설치는 http://trac.edgewall.org/wiki/TracPlugins 을 참조할것 TracWebAdmin 플러그인 설치 TracWebAdmin-0.1.2dev_r4240-py2.4.egg 를 C:\Tra\Python\Scripts 폴더에 복사C:\Trac\Python\Scripts 에서 easy_install TracWebAdmin-0.1.2dev_r4240-py2.4.egg 를 수행C:\Trac\TracRepo\Projects\프로젝트명\conf 에서 trac.ini 의 마지막에 [components] / webadmin.* = enabled 의 두 줄을 추가 (http://trac.edgewall.org/wiki/WebAdmin#EnablingthePlugin 참고) AccountManager 플러그인 설치 TracAccountManager-0.1.3dev-py2.4.egg 를 C:\Trac\Python\Scripts 폴더에 복사C:\Trac\Python\Scripts 에서 easy_install TracAccountManager-0.1.3dev-py2.4.egg 를 수행 어드민계정을 설정 C:\Trac\SvnRepo\Projects 의 trac.passwd 파일 내용 제거C:\Trac 에서 'add-user admin 암호' 를 수행하여 새로운 암호의 admin 을 설정'trac-admin 프로젝트명 permission add admin TRAC_ADMIN' 을 주어 트랙 어드민 권한을 admin 에게 설정(http://trac.edgewall.org/wiki/TracPermissions) run-apache 로 아파치 기동하고, http://ip:8080/projects/프로젝트명 에 접속하여 admin 으로 로그인후 Admin 탭에서 플러그인 세팅 마저함. AccountManager 켜고 서버 재기동Admin 탭의 Accounts 항목 하부 Configuration 에서 패스워드 저장방법을 HtPasswdStore 로 설정하고 패스워드 파일의 경로를 풀패스(C:\Trac\SvnRepo\Projects\trac.htpasswd)로 지정해줄것 http://trac.edgewall.org/wiki/TracPermissions#PermissionGroups 를 참조해 그룹별 퍼미션 세팅WebAdmin 으로 기타 세부사항 수정(프로젝트 상단 배너나 링크주소 등등..)
by Anna 안나 2008. 7. 12. 22:17
{1}활성화된 모든 티켓들Active Tickets

* 활성화된 전체 티켓들을 볼 수 있습니다.
* 급한 티켓은 각 색을 기본으로 정렬됩니다.
* 티켓이 통과되어지면, 담당자의 이름 뒤에 '*' 가 붙습니다.

* List all active tickets by priority.
* Color each row based on priority.
* If a ticket has been accepted, a '*' is appended after the owner's name
SELECT p.value AS __color__,
id AS ticket, summary, component, version, milestone, t.type AS type,
(CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE status IN ('new', 'assigned', 'reopened')
ORDER BY p.value, milestone, t.type, time


{2}Active Tickets by Version
This report shows how to color results by priority,
while grouping results by version.

Last modification time, description and reporter are included as hidden fields
for useful RSS export.
SELECT p.value AS __color__,
version AS __group__,
id AS ticket, summary, component, version, t.type AS type,
(CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE status IN ('new', 'assigned', 'reopened')
ORDER BY (version IS NULL),version, p.value, t.type, time



{3}마일스톤 별 활성화된 모든 티켓들Active Tickets by Milestone
마일스톤 별 활성화된 모든 티켓들을 보여줍니다.

This report shows how to color results by priority,
while grouping results by milestone.

Last modification time, description and reporter are included as hidden fields
for useful RSS export.
SELECT p.value AS __color__,
milestone||' Release' AS __group__,
id AS ticket, summary, component, version, t.type AS type,
(CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE status IN ('new', 'assigned', 'reopened')
ORDER BY (milestone IS NULL),milestone, p.value, t.type, time



{4}담당자별 활성화된 티켓들Assigned, Active Tickets by Owner

담당자별로 활성화된 티켓들을 보여줍니다.

List assigned tickets, group by ticket owner, sorted by priority.
SELECT p.value AS __color__,
owner AS __group__,
id AS ticket, summary, component, milestone, t.type AS type, time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE status = 'assigned'
ORDER BY owner, p.value, t.type, time

{5}
담당자별 활성화된 티켓들 자세히
Assigned, Active Tickets by Owner (Full Description)

담당자별로 활성화된 티켓들을 보여줍니다.

List tickets assigned, group by ticket owner.
This report demonstrates the use of full-row display.

SELECT p.value AS __color__,
owner AS __group__,
id AS ticket, summary, component, milestone, t.type AS type, time AS created,
description AS _description_,
changetime AS _changetime, reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE status = 'assigned'
ORDER BY owner, p.value, t.type, time



{6}
마일스톤별 모든 티켓들
All Tickets By Milestone (Including closed)

마일스톤별로 해결된 티켓들까지 모두 보여줍니다.

A more complex example to show how to make advanced reports.

SELECT p.value AS __color__,
t.milestone AS __group__,
(CASE status
WHEN 'closed' THEN 'color: #777; background: #ddd; border-color: #ccc;'
ELSE
(CASE owner WHEN $USER THEN 'font-weight: bold' END)
END) AS __style__,
id AS ticket, summary, component, status,
resolution,version, t.type AS type, priority, owner,
changetime AS modified,
time AS _time,reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
ORDER BY (milestone IS NULL), milestone DESC, (status = 'closed'),
(CASE status WHEN 'closed' THEN modified ELSE (-1)*p.value END) DESC


{7}
나에게 할당된 티켓들


이 리포트는 실행될 때 로그온한 사용자이름으로 자동으로 변경되는, $USER 동적 변수의 사용 방법을 보여줍니다.

This report demonstrates the use of the automatically set
USER dynamic variable, replaced with the username of the
logged in user when executed.


SELECT p.value AS __color__,
(CASE status WHEN 'assigned' THEN 'Assigned' ELSE 'Owned' END) AS __group__,
id AS ticket, summary, component, version, milestone,
t.type AS type, priority, time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE t.status IN ('new', 'assigned', 'reopened') AND owner = $USER
ORDER BY (status = 'assigned') DESC, p.value, milestone, t.type, time


{8}활성화된 티켓, 나에게 할당된 티켓들을 먼저 보여줍니다 Active Tickets, Mine first

* 우선순위별로 활성화된 모든 티켓들을 보여줍니다.
* 로그인한 사용자가 소유한 티켓들을 먼저 보여줍니다.

* List all active tickets by priority.
* Show all tickets owned by the logged in user in a group first.

SELECT p.value AS __color__,
(CASE owner
WHEN $USER THEN 'My Tickets'
ELSE 'Active Tickets'
END) AS __group__,
id AS ticket, summary, component, version, milestone, t.type AS type,
(CASE status WHEN 'assigned' THEN owner||' *' ELSE owner END) AS owner,
time AS created,
changetime AS _changetime, description AS _description,
reporter AS _reporter
FROM ticket t
LEFT JOIN enum p ON p.name = t.priority AND p.type = 'priority'
WHERE status IN ('new', 'assigned', 'reopened')
ORDER BY (owner = $USER) DESC, p.value, milestone, t.type, time


-
by Anna 안나 2008. 7. 12. 18:42
voice-family: ""}""; 위는 시각장애인용 웹브라우저에서 글자를 판독할 때 사용되는 목소리를 지정하는 속성입니다. font-family와 같이 이해하면 쉬워요. ' '사이에 사용할 수 있는 값은 'male', 'female', 'child' 으로써 남자,여자,어린이 목소리로 글을 판독하게 됩니다. 사실 저도 아직 사용해본 적이 없을 뿐더러, 시각장애인 전용 브라우저가 아닌 IE나 FF에서는 제대로 지원하지 않습니다.

voice-family:inherit; 이건 상속된다는 뜻이죠~ http://forum.standardmag.org/viewtopic.php?id=19
by Anna 안나 2008. 7. 12. 16:40
html>body #content {} 이건 인터넷익스플러 핵(hack)입니다. 전체 코드를 확인할 수 없지만, 보통 인터넷익스플러가 CSS를 제대로 랜더링 하지 못하는 박스모델링에서 사용합니다. 인터넷익스플러는 width, height 를 표준이 아닌 MS맘대로 해석하기 때문에 익스플러만 해석하는 html 을 사용한 것입니다. 그건 Tantek Hack이라고 불리우는 CSS Boxmodel Hack입니다.

css boxmodel에선 width란 padding이나 border를 제외한 순수 컨텐츠가 들어가는 박스의 폭을 얘기하지만 IE5.x에선 이 width나 height안에 padding과 border를 포함시켜버립니다.

{ width:100px; padding:10px; border: 10px; }
이런 박스가 있다고 할때 표준 브라우저에서 box의 총 width는 140px이 되지만 IE5.x에선 100px이죠.
그래서 hack이 필요한데 이경우에는 IE5.x의 또다른 버그인 parsing bug를 이용합니다.
키포인트는 ""}"" 입니다.

div.content {
width:400px; /* IE5.x용 */
voice-family: ""}"";

/*IE5.x는 다음룰 무시*/

voice-family:inherit;
width:300px; /*일반 브라우저용*/
}

여기에서 opera5같은 경우는 IE5.x와 동일한 parsing bug가 있지만 boxmodel은 표준을 지원하기때문에 별도로 스타일을 지정해줍니다. ( >주위에 스페이스가 없어야 합니다)

html>body .content {
width:300px; /* Opera 5용 */
}

이 Tantek hack을 사용하려면 반드시 nn4에서는 css가 보이지 않게 해줘야 합니다.

nn4와 opera5같은 브라우저의 문제때문에 이 핵보다는 Simplified Box model Hack이나 Tan hack을 많이 사용하는 편입니다.
by Anna 안나 2008. 7. 12. 16:40
브라우저마다 HTML렌더링하는 방식이 조금씩 차이가 나고, 때로는 버그가 존재하는 관계로(망할 IE) 모든 CSS 코드가 모든 웹브라우저에서 똑같이 보이지 않습니다.
따라서 이러한 특성을 이용하여 특정 브라우저를 제외하거나, 특정 브라우저에서만 CSS를 적용하는 기법을 CSS 핵(Hack) 이라고 부르죠...

그래서 문법적으로 맞지 않거나, 특정 브라우저에만 적용되는 비표준인 경우가 많기 때문에 이러한 CSS핵은 어쩔 수 없는 경우가 아니면 사용하지 않아야 합니다. 또한, 단순히 눈앞의 문제만을 해결하기 위해 핵을 사용하면 나중에 페이지를 수정하거나 브라우저의 버전이 올라갈 때에 문제가 생기는 경우도 있구요.

CSS핵은 이런게 있다는 것도 알아두고, CSS핵을 사용하기 이전에 근본적으로 디자인을 수정하거나 다른 표준 태그로 해결하는게 좋을 듯 하네요.

어쨌든 일단 현존 CSS핵에 대한 정리!

http://centricle.com/ref/css/filters/


서핑하다 찾은 사이트인데 CENTRICLE.COM 의 CSS filters 페이지가 가장 잘 되어 있는 것 같습니다.
이제까지 알려진 CSS핵의 종류와 현존하는 거의 모든 웹 브라우저에서 적용되는지의 여부를 알기쉽게 표로 보여줍니다. 각 항목을 눌러보면 해당 핵의 예제도 볼 수 있네요.

http://www.communis.co.uk/dithered/css_filters/


웹표준 교과서에서 소개하는 CSS 핵 & 필터 안내 페이지

그 외에 평소에 자주 사용하는 팁으로서의 CSS 핵 정리는 아래에 정리.
Netscape 4 배제하기
<link rel="stylesheet" type="text/css" href="/css/style.css" media="all" />
Netscape 는 media 속성이 screen 이 아닌 경우 외부 스타일시트를 읽지 못하는 버그가 존재함.

Win IE 3~4, Mac IE 4~4.5, Netscape 4 배제하기
@import url("/css/style.css")
Win IE 4, Mac IE 4 는 인용부호가 "가 아니면 읽지 못하는 버그 존재. IE 3과 Netscape 4는 @import 지원하지 않음.

Mac IE 5 배제하기
H1 { /* \*/ color:red; /* */ }
Holly 핵이라 하며, 주석 안의 내용이 적용되지 않음.

Win IE 4~5 배제하기
H1/**/ { color:red; }
셀렉터 뒤에 /**/ 삽입.

Win IE 4~5, Mac IE 4.5~5 배제하기
H1 { color/* */:red; }
속성과 속성값을 구분하는 콜론(:) 앞에 /* */ 삽입.

Win IE 4~6, Mac IE 4, Netscape 4 배제하기
html>body H1 { color:red; }
셀렉터 앞에 html>body 삽입.

Win IE 6 제외시키기
H1 { color /**/:red; }
속성과 속성값을 구분하는 콜론(:) 앞에 스페이스와 /**/ 삽입.

언더스코어 핵 (_)
H1 { _color:red; }
Win IE 4~6 에 적용.

닷핵 (.)
H1 { .color:red; }
속성 앞에 . 삽입. Win IE 6~7 에만 적용. 타 브라우저는 정확히 확인하지 못했습니다.
이 핵에 대해선 계속 확인중인데 블로그스피어나 여타 서적에는 전혀 언급이 없는 이상한 핵(?)입니다.

해시 핵(#)
H1 { #color:red; }
속성 앞에 # 삽입. Win IE 4~6, Mac IE 5, Opera 7, Mozilla계열, Firefox 에 적용.

스타 핵
*HTML H1 { color:red; }
셀렉터 앞에 *html 삽입. Win IE 4~6, Mac IE 4~5 에 적용.

스타7 핵
HTML*H1 { color:red; }
셀렉터 앞에 html* 삽입(공백없이). Win IE 5.5~6, Mac IE 5, Safari 에 적용.

xmlns 속성 핵
HTML[xmlns] H1 { color:red; }
셀렉터 앞에 속성 선택자를 삽입. Mozilla, Firefox, Opera, Safari 등 속성 선택자를 지원하는 브라우저에 적용.

:root 가상클래스 핵
:root H1 { color:red; }
셀렉터 앞에 :root 가상클래스 삽입. Mozilla, Firefox, Mac IE 5, Safari 등 가상클래스를 지원하는 브라우저에 적용.

Tantek 박스모델 핵
H1 {
width:500px;
voice-family: ""}"";
voice-family:inherit;
width:400px;
}Tantek Celik 이 고안한 유명한 박스모델 핵. Win IE 4~5, Mac IE 4, Netscape 4 에서는 voice-family 속성 이전의 스타일 적용. 그외의 브라우저는 뒤의 속성 적용.

단순 박스모델 핵
H1 {
width:500px;
w\idth:400px; //Win IE 6, Mac IE 5, Mozilla, Opera, Safari
\width:450px; // only Win IE 5
}
속성의 첫번째, 두번째 글자 사이에 \를 삽입하면 Win IE 6, Mac IE 5, Mozilla, Opera, Safari 에 적용.
추가로 속성의 앞에 \를 삽입하면 Win IE 5 에만 적용.

IE 7, Opera 적용하기
*+html body H1 { color:red; }
셀렉터 앞에 *+html body 삽입. IE 7, Opera 8 이후 버전 적용. Opera를 배제한 IE7 전용으로 하고 싶을 때는 *+html>/**/body 로 Opera 전용 속성 기술.

IE 7 적용하기
*:first-child+html H1 { color:red; }
셀렉터 앞에 *:first-child+html 삽입. IE 7에만 적용되고, 이외의 브라우저는 앞에서 기술한 셀렉터의 속성 적용.

Win IE 5 패스필터
@media tty {
i{content:"";/*" "*/}}; @import '/css/style.css'; {;}/*";}
}/* */

Win IE 5.5 패스필터
@media tty {
i{content:"";/*" "*/}}@m; @import '/css/style.css';/*";}
}/* */

Win IE 6 패스필터(?)
<!--[if IE 6]><link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /><![endif]-->

Win IE 7 패스필터(?)
<!--[if gte IE 7]><link rel="stylesheet" type="text/css" href="/css/style.css" media="all" /><![endif]-->

모던브라우저 패스필터 (Win IE 5.5 이하, Mac IE 5, Opera 8 이하, Netscape 4 이하 제외)
@import "null?"{";
@import "/css/style.css";
@import "null?"}";


저의 주 작업 브라우저는 IE6, IE7, FF2, OP9 입니다. 개인적으로 CSS 핵은 거의 사용하지 않지만, 폼 (특히 체크박스, 라디오 버튼) 의 형태가 각 브라우저마다 틀려서 IE 6~7 에서 폼의 마진을 조절하기 위해 언더스코어 핵, 닷핵 만을 사용하고 있습니다.
덧붙여... 우리나라에서 최고의 사용률을 보여주는 IE가 CSS Spec을 제대로 지원하지 않으면서도 이를 업데이트하지 않는 이유는, 아이러니컬하게도 브라우저간 버그를 보정하기 위한 CSS핵도 큰 이유를 차지하고 있는 듯.
IE 6에서 갑자기 IE 7 또는 표준스펙 풀 지원으로 CSS 지원 스펙을 수정하면 현재 IE 6 기준으로 만들어진 사이트나 IE 6용 패스필터, 핵을 사용한 엄청난 수의 사이트(특히 우리나라)는 어떻게 될지...
중요 포인트!!
1. 구조를 설계할 때 절대 CSS핵 위주로 설계하지 말 것.
2. 단발성 CSS 핵보다는 패스필터 사용 권장.
3. CSS핵은 어쩔 수 없는 경우에만 사용할 것. http://kaludin.egloos.com/967831
by Anna 안나 2008. 7. 11. 23:23
참고사이트
http://bebop.emstone.com/projects/programming_rules/using_doxygen/
http://www.stack.nl/~dimitri/doxygen/index.html

Doxygen 사용법 by 양선진 ? 최종 수정일: 2007-02-20 18:46 Contents 특징 프로그램 사용방법 코드 문서화하기 태그 및 명령어 지원 에디터 참조 사이트 Doxygen은 C++, Java, IDL(Corba, Microsoft and KDE-DCOP flavors), C를 위한 문서 시스템이다. 특징 이 시스템은 소스 코드로 부터 온라인 문서(HTML), 오프라인 문서(Latex)를 생성하며, RTF(MS-Word), PostScript-x, Hyperlinked PDF, Compressed HTML 그리고 Unix man page 문서를 생성한다. 또한 비구조화된 소스 코드로 부터 코드의 구조를 추출해 낼 수 있으며, 의존선 그래프, 상속 다이어그램, 집합 다이어그램 등을 자동으로 생성한다. 프로그램 doxygen : 소스를 파싱하고 문서를 생성하는 주 프로그램 doxytag : doxygen 으로 생성한 외부 문서를 참조하거나 검색 엔진용 인덱스를 생성하기 위해 사용 doxysearch : 검색 엔진을 사용하기 위해 필요한 프로그램 doxywizard : doxygen 을 사용하기 위한 설정 파일을 조작하기 위한 GUI 프론트엔드 사용방법 doxygen 설정 하나 하나와 프로그램 실행 방법을 설명하는 것보다는, GUI 방식으로 설정과 생성 작업을 동시에 할 수 있는 doxywizard 사용을 권한다. 참고로 doxywizard 의 툴바에는 ? 명령이 있는데 이 버튼을 누르고 궁금한 항목을 클릭하면 도움말이 자세하게 나온다. 코드 문서화하기 기본적으로 Doxygen은 다음과 같은 주석을 문서의 일부로 인식한다./** - ... text ...( JavaDoc style ) -/ /*! - ... text ... ( Qt style ) -/ /*! ... text ... -/ /// /// ... text ... /// //! //! ... text ... //! /////////////////////////////////////// /// ... text ... /////////////////////////////////////// 하지만, 일관성을 위해 JavaDoc 형식을 사용할 것을 권한다. 모든 설명은 간략(brief)과 상세(detailed)로 나뉘어진다. 이렇게 나뉘는 이유는 문서를 생성할때 목차나 구조상 단계를 나눌때 사용할 설명을 구분하기 위해서다. 이를 위해 Doxygen은 두 가지 방법을 제공한다. 첫번째 방법은 명시적으로 brief 태그를 붙이는 경우이다. 이때 간략 설명과 상세 설명은 공백라인을 기준으로 구분한다./*! brief Brief descript-xion - Brief descript-xion continued. - - Detailed descript-xion start here. -/ 하지만 JavaDoc 스타일을 사용하거나 설정에서 JAVADOC AUTOBRIEF YES 를 사용하면 처음 나오는 점(.)을 기준으로 구분한다. 가능하면 이 방법을 사용할 것을 권한다./** Brief descript-xion which ends at this dot. Details follow - here. -/ --------------------------------------------------------------- /// Brief descript-xion which ends at this dot. Details follow /// here. 주석이 한 라인을 넘지 않을 경우 다음과 같은 방법을 사용할 수도 있다./// Brief descript-xion /** Detailed descript-xion or //! Brief descript-xion <-- separate blank line( using JAVADOC AUTOBRIEF NO ) //! Detailed descript-xion //! starts here 다음과 같은 방법은 사용할 수 없다.//! Brief descript-xion, which is //! really a detailed descript-xion since it spans multiple lines. /*! Oops, another detailed descript-xion! -/ 다음은 JavaDoc 형식을 이용한 전체적인 문서화 예제이다./** * A test class. A more elaborate class descript-xion. *-/ class Test { public: /** * An enum. * More detailed enum descript-xion. */ enum SampleEnum { SAMPLE_VAL1, /**< Enum value SAMPLE_VAL1.-/ SAMPLE_VAL2, /**< Enum value SAMPLE_VAL2.-/ SAMPLE_VAL3 /**< Enum value SAMPLE_VAL3.-/ } *enum_ptr, /**< enum pointer. Details.-/ enum_var; /**< enum variable. Details.-/ /** * A constructor. * A more elaborate descript-xion of the constructor. */ Test(); /** * A destructor. * A more elaborate descript-xion of the destructor. */ ~Test(); /** * a normal member taking two arguments and returning an integer value. * * @param a an interger argument. * @param s a constant character pointer. * @see Test() * @see ~Test() * @see test_me_too() * @see public_var() * @return The test results */ int test_me(int a, const char-s); /** * A pure virtual member. * * @see test_me() * @param c1 the first argument. * @param c2 the second argument. */ virtual void test_me_too(char c1, char c2) 0; /** * a public variable. * Details. */ int public_var; private: /** * a function variable. * Details. */ int (*handler)(int a, int b); }; 태그 및 명령어 struct union enum fn var def file namespace package interface 지원 에디터 아직까지 찾아낸 건 Emacs 뿐이다. doxymacs 라는 데비안 패키지를 설치하면 아주 편하게 Doxygen 문법으로 주석을 작성할 수 있다. 예를 들어 함수 이름 앞에 커서를 두고 Ctrl-c-d-f 를 입력하면 자동으로 함수의 인수를 추출해 함수 주석 템플릿을 만들어 주고 커서를 위치시킨다. 참조 사이트 http://www.gpgstudy.com/gpgiki/DoxygenTutorial RTF 가 깨지는 문제등에 대한 해답이 있음.
by Anna 안나 2008. 7. 11. 21:21
5장. Trac On Windows - Trac을 실제로 사용해 보자 지금까지 Trac과 서브버전 설정에 대해서 알아보았습니다. 그럼 실제로 Trac을 어떻게 사용하는지 알아보아야 겠죠? 1. 서브버전 저장소에 소스 올리고 수정하기 일단 서브버전 Test 저장소에 파일들을 올리고 갱신해 보도록 하겠습니다. 이 작업은 Trac을 사용하는데는 상관이 없지만 Trac이 서브버전 저장소와 연계가 되는지라 아무것도 없으면 뭐 할게 없어서... 제가 어떤 작업을 수행했는지만 나열하겠습니다. - 저장소에 trunk/src, branches, tags 등의 디렉토리를 만든다. - 아래의 helloworld.c 파일을 만들어 tags 디렉토리에 올린다. - tags디렉토리는 작업 디렉토리가 아니므로 다시 trunk/src 디렉토리에 올리고 tags디렉토리에서는 삭제한다. 우선 여기까지 작업을 합니다. 다음은 현재의 helloworld.c 파일의 내용입니다. #include int main(int argc, char *argv[]) { printf("Hello World... Hi %s!\n", argv[1]); return 0; } 자 여기까지 했다면 Trac의 Test프로젝트(http://localhost:88/projects/Test)에 접속해 보도록 하겠습니다. 메인 화면의 메뉴에서 "시간이력"을 클릭해 봅니다. 그러면 다음과 같이 나옵니다.
((-------IMAGE-------))

보시면 서브버전에 Commit할때마다 적었던 메모가 보여집니다. 각 변경사항을 클릭하면 다음과 같이 상세 내용이 나타납니다.

((-------IMAGE-------))

((-------IMAGE-------))

메뉴에서 "소스 브라우져" 클릭하셔서 보시면 서브버전의 저장소를 그대로 보여줍니다. trunk/src로 들어가셔서 helloworld.c 파일을 클릭하면 소스의 내용도 볼 수가 있네요. 참 한가지 말씀드릴 것은 소스에 한글을 사용하셨고 UTF-8로 작성하시지 않았다면 한글이 깨져 보일 수 있습니다. 이럴때는 trac저장소/conf/trac.ini 파일에서 default_charset을 찾아서 euc-kr이나 cp949로 바꿔 주세요. 2. 티켓과 로드맵 사용하기 Trac은 서브버전과 연동되고 버그리포트나 작업관리를 하는 것이 목적입니다. 여기에 사용하는 것이 티켓과 로드맵 기능입니다. 문제점이 생겼거나 개선사항이 생겼다면 해당 프로젝트에 티켓을 생성합니다. 그런 다음 프로젝트 참가자 중 한사람이 그 티켓을 받아 자신의 작업리스트에 추가하여 처리하거나 다른 사람에게 건내주거나 하면서 일을 처리하게 됩니다. "백문이불여일견"!!! 예를 들어 설명하고 사용방법을 보이도록 하겠습니다. 위의 helloworld.c가 오픈 프로젝트 였고 누군가가 사용해 보고 문제점이 생겨 이 Trac에 접근하는 시나리오로 이야기를 풀어 보겠습니다. 어떤 사람이 helloworld.c를 이용하다가 프로그램 실행시 아큐먼트를 입력하지 않으면 오류가 발생하는 것을 보고 이 Trac에 접속하였습니다. 그리고는 메뉴 중 "새로운 티켓"을 선택하고 다음과 같이 입력합니다.

((-------IMAGE-------))

위와 같이 작성하고 "새로운 티켓 추가" 버튼을 눌러 글을 올렸습니다. 이로써 하나의 티켓이 만들어 졌습니다. "nicholas"라는 사람이 이 시스템에 들어와 "시간이력"이나 "티켓들보기"메뉴를 클릭하여 새로운 티켓이 만들어 졌음알아고 열람해 봅니다.

((-------IMAGE-------))

한가지... 작성자가 nicholas라고 되어 있는데.. 이부분은 제가 예제를 만들면서 nicholas로 로그인하고 혼자 글올리고 수정하고 답변올리고 해서 그런 것입니다. 상황에 맞게 해석해 주세요. (죄송합니다.) 사실 지금까지 설명한 배경으로는 작성가 익명이 되어야 할 것입니다. 그건 그렇고 여기서 자세히 보아야 할 부분은 담당자 입니다. 이 티켓을 처리할 담당자가 somebody로 되어 있습니다. 이는 티켓을 누가 처리해야 할지 모른다는 뜻도 되고 티켓의 처리가 누군가에게 맞겨지지 않았다는 뜻도 됩니다. 아무튼 이 nicholas라는 프로젝트 참여자가 이 티켓을 보고 자신이 처리하는게 맞을 것 같아서 "응답하기"버튼을 클릭해서 답변을 작성합니다.

((-------IMAGE-------))

답글을 쓰고 아래쪽 중간에 마일스톤과 version을 바꾸었습니다. 마일스톤은 제품명이나 프로젝트명 쯤으로 생각하시면 될 것 같습니다. 사실 마일스톤 명을 먼저 수정해야 하는 것이 정상이지만 여기서는 Trac저장소를 생성하면 기본으로 생기는 마일스톤과 버전을 가지고 그대로 사용하고 있습니다. 어찌됐든 제일 아래 쪽에 "티켓에 대한 동작" 부분에서 자신이 직접 처리하겠다는 의사로 "티켓 수락하기"를 선택하였습니다. 이 티켓의 변경사항을 보면 다음과 같음을 알 수 있습니다.

((-------IMAGE-------))

보면 owner가 somebody에서 nicholas로 변경된 것을 보실 수 있습니다. 그래서 nicholas라는 사람은 helloworld.c파일을 수정하고 있었는데... 또 다른 사람이 이번에는 개선사항으로 "사용법을 보여 출력하게 해 달라는" 티켓을 또 추가합니다. 그래서 또 다시 nicholas 티켓을 확인 하고 이것 역시 답변을 쓰고 마일스톤1로 가져옵니다.

((-------IMAGE-------))

이제 "로드맵" 메뉴의 "마일스톤1"에 다음과 같이 두개의 티켓이 접수된 것(활성화된 티켓들)이 보여지게 됩니다.

((-------IMAGE-------))

nicholas는 이 두개의 티켓을 처리하는데 힘을 써서 다음과 같이 helloworld.c의 소스를 변경하였습니다. #include int main(int argc, char *argv[]) { if(argc\n", argv[0]); return 0; } printf("Hello World... Hi %s!\n", argv[1]); return 0; } 이 소스를 서브버전의 저장소에 체크인시키고 Trac에서 "시간이력"을 보면 다음과 같이 나타납니다.

((-------IMAGE-------))

자 이제 열린 티켓을 닫아야 겠군요.

((-------IMAGE-------))

받았던 두개의 티켓으로 가서 각각 하나씩 제일 하단에 "다음 방법으로 해결됨"을 선택하고 확인항 티켓을 닫습니다. 해당 티켓의 변경사항을 보면 티켓이 발생한 시기부터 경과한 내용 및 시간을 모두 알 수 있습니다.

((-------IMAGE-------))

다시 메뉴의 "시간이력"으로 들어가 보면 마일스톤1의 활성화 되었던 티켓들이 모두 닺쳐 진척도가 100%가 된 것을 알 수 있습니다.

((-------IMAGE-------))

메뉴 중 "소스브라우져"에 가서 소스를 보고 비교하기를 누르면 다음과 같이 변경된 내용이 무엇인지도 비교하여 보여줍니다.

((-------IMAGE-------))

그림이 많아서 조금 보기 힘드신가요? 대충 글만 읽어보고 그냥 실습을 한번 해보세요. 어렵지 않습니다. 금방 따라하실 수 있습니다. 3. 웹어드민으로 Trac관리하기 우리가 이미 설치한 웹어드민 플러그인이 있었습니다. 이번에는 이것의 사용법에 대해서 알아 보도록 하겠습니다. Trac 저장소에 우리는 admin이라는 계정에 관리자 권한을 주었었습니다. 그래서 Trac에 admin으로 로그인을 하면 Admin이라는 메뉴를 메뉴바의 맨 오른쪽에서 찾을 수 있습니다.

((-------IMAGE-------))

이 Admin이라는 메뉴를 클릭하면 현재 프로젝트의 Trac을 관리할 수 있는 화면이 나타납니다. Trac의 관리란 주로 저장소의 권한 설정이나 플러그 인을 설치 및 제거 그리고 티켓의 컴퍼넌트, 마일스톤 등을 관리하는 것을 이야기 합니다. 특이한 사항은 없으므로 그냥 몇가지 캡쳐된 화면만을 보이도록 하겠습니다.

((-------IMAGE-------))

Admin의 메뉴인데 메뉴의 각 항목을 관리할 수 있는 기능이 있다고 생각하시면 되겠네요. 크게 Trac의 일반 관린 모드인 "General"과 Ticket을 관리할 수 있는 "Ticket System"으로 구성되어 있습니다.

((-------IMAGE-------))

기본 설정(Basic Settings)에서 나오는 화면입니다. 프로젝트 이름이나 URL, 프로젝트에 대한 설명을 수정할 수 있습니다. 여기서 URL은 Trac의 웹페이지 좌측 상단의 trac로고를 클릭했을 때 가야할 URL을 설정하는 부분입니다.

((-------IMAGE-------))

로깅(Logging)메뉴에서 나오는 화면입니다. 로그를 어디에 남길지 어느 정도의 수준으로 남길지등을 설정할 수 있습니다. 또한 Log파일의 이름 및 경로를 지정할 수도 있습니다.

((-------IMAGE-------))

권한(Permissions)메뉴에서 나오는 화면 중 하나입니다. 현재 저장소에 설정된 권한을 표시하며 선택해서 해당 권한을 삭제할 수 있습니다.

((-------IMAGE-------))

권한(Permissions)메뉴에서 나오는 화면 중 하나입니다. 현재 저장소에 특정한 사용자 혹은 그룹으로 권한을 설정할 수 있습니다.

((-------IMAGE-------))

권한(Permissions)메뉴에서 나오는 화면 중 하나입니다. 특정한 사용자를 존재하는 특정 그룹에 포함 시킬 수 있습니다.

((-------IMAGE-------))

플러그인(Plugins)메뉴에서 나오는 화면 중 하나입니다. 현재 설치된 Trac플러그인의 리스트를 볼 수 있습니다. "Uninstall"버튼을 클릭해서 설치된 플러그인을 삭제할 수 있습니다.

((-------IMAGE-------))

플러그인(Plugins)메뉴에서 나오는 화면 중 하나입니다. 다운받은 플러그인 파일을 이 화면에서 선택하여 설치할 수 있습니다. 참고로 http://www.trac-hacks.org/ 에서 다양한 Trac 플러그 인들을 찾을 수 있습니다. 다음으로 Ticket을 관리하기 위한 메뉴들입니다.
((-------IMAGE-------))

컴포넌트(Components)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 컴포넌트의 종류를 보여줍니다. 또한 해당 컴포넌트의 소유자를 표시합니다. 리스트에서 특정 컴포넌트를 선택해서 삭제할 수도 있습니다.

((-------IMAGE-------))

컴포넌트(Components)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 컴포넌트에 소유자를 정하여 추가할 수 있습니다.

((-------IMAGE-------))

마일스톤(Milestones)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 마일스톤의 현재 리스트를 보여줍니다. 특정 마일스톤을 선택하여 삭제할 수 있습니다.

((-------IMAGE-------))

마일스톤(Milestones)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 새로운 마일스톤을 추가할 수 있습니다. 또한 추가하는 마일스톤의 완료일을 YYYY-MM-DD의 형식으로 날짜로 지정할 수 있습니다.

((-------IMAGE-------))

우선순위(Priorities)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시되는 우선순위의 목록을 보여줍니다. 우선순의 값을 변경할 수도 있으며 특정 우선순위를 선택하여 제거할 수도 있습니다.

((-------IMAGE-------))

우선순위(Priorities)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 새로운 우선순위를 추가합니다.

((-------IMAGE-------))

Severities 메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시되는 Severity의 목록을 보여주게 되는데 초기에는 아무 Severity가 설정되지 않아 보여지지 않고 위와 같은 화면이 나타납니다. Severity가 추가되면 다음과 같은 화면이 표시됩니다.

((-------IMAGE-------))

우선순위와 화면 및 기능이 같습니다.

((-------IMAGE-------))

티켓 종류(Ticket Types)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시되는 티켓 종류의 목록을 보여줍니다. 표시될 순서 값을 변경할 수도 있으며 특정 티켓 종류를 선택하여 제거할 수도 있습니다.

((-------IMAGE-------))

티켓 종류(Ticket Types)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 새로운 티켓 종류를 추가할 수 있습니다.

((-------IMAGE-------))

버전(Versions)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시되는 버전의 목록을 보여줍니다. 특정 버전을 선택하여 제거할 수도 있습니다.

((-------IMAGE-------))

버전(Versions)메뉴에서 나오는 화면 중 하나입니다. 티켓 생성시 표시될 버전을 추가할 수 있습니다. 지금까지 Trac Web Admin의 사용법을 알아보았습니다. 뭐 그리 어려운 내용이 아니므로 그냥 한번 읽어보시고 실습을 한번 해보시기 바랍니다. 이렇게 해서 Trac, 서브버전, 아파치 등의 설치 및 설정 방법 그리고 사용법 등을 알아보았습니다. 서브버전 클라이언트를 사용하기 위한 구체적인 명령들에 대해서는 살펴보지 않았지만 윈도우즈에서 작업할 것이라면 "TortoiseSVN"이라는 GUI툴을 사용할 수도 있으므로 어렵지 않게 사용할 수 있을 것입니다. 참고로 TortoiseSVN은 http://tortoisesvn.net/ 에서 다운받아 사용할 수 있습니다. 한글 언어팩도 있으므로 그것도 다운받아 설치하셔서 사용하십시오. 지금까지의 글이 여러분의 프로젝트 관리에 많은 도움이 되었길 바랍니다.
by Anna 안나 2008. 7. 11. 21:19
이번 장의 내용은 Trac을 사용하는데는 꼭 하지 않아도 상관없는 내용입니다. 하지만 Trac이 서브버전을 사용하고 있고 서브버전 설치에 대해서도 알아봤으니 서브버전을 설정하는 법에 대해서도 알아보도록 하겠습니다. Trac만을 사용하겠다시는 분은 이번장을 넘어가셔도 상관없습니다. 4장. Trac On Windows - Subversion 설정 및 실행해보기 3장까지 해서 Trac을 설정해 보았습니다. 프로젝트 참여자 각자 모두가 어차피 서브버전을 설치해서 사용할 거니깐... 서브버전을 꼭 웹과 연동되어야 하는 것은 아닙니다. 하지만 웹과 연동을 시켜 놓으면 좋은 점이 있습니다. 먼저 웹에서 소스를 열람해 볼 수 있습니다. 그런데 이부분은 Trac을 통해서도 가능합니다. 또 다른 장점은 서브버전으로 소스를 체크아웃 할때 svn 프로토콜 뿐만이 아니라 http프로토콜도 사용할 수 있습니다. http프로토콜을 사용할 수 있다는 것은 일반적으로 방화벽 때문에 생기는 문제들을 해결할 수 있습니다. 왜냐면 80포트는 일반적으로 풀려 있기 때문이죠. 설정할 필요가 있던 없던 설명은 하도록 하겠습니다. 자 우리 한번 해봅시다. 1. 서브버전과 아파치와의 연동 이미 3장에서 아파치에 서브버전에 관한 Test프로젝트 저장소도 만들었고 서브버전 모듈들도 이미 설정했고 가상디렉토리도 설정해서 간단한 테스트도 해 보았습니다. 서브버전 가상디렉토리 설정 이야기는 여기서 부터 시작합니다. 3장에서 httpd.conf에 설정했던 내용을 다시 한번 보겠습니다. DAV svn SVNPath "D:/Trac/SvnRepo/Projects/Test" ▲ dav_svn_module 테스트 페이지 설정 위에서 DAV라는 것은 "Distributed Authoring and Versioning"(분산 저작 및 버전관리)의 약자로 여기서는 정확히 "Web-based Distributed Authoring and Versioning"(웹 기반 분산 저작 및 버전 관리)가 되겠습니다. 즉 Web을 이용해서 웹페이지를 올리는 것 같지 한다는 이야기죠. 일반 웹브라우저는 WebDAV를 지원하지는 않구요. 특수한 클라이언트가 있어야 합니다. 여기서는 아파치에 서브버전의 DAV모듈을 로드하여 서브버전 클라이언트와 WebDAV프로토콜을 사용하여 소스를 받고 올리게 한다는 것입니다. WebDAV에 대한 자세한 사항은 http://www.webdav.org/ 를 참조하세요. 1) 인증 처리 추가 위의 설정의 가상디렉토리를 접근하는 URL은 http://localhost:88/svn/Test입니다. 그런데 이곳은 아무나 접근을 해서 볼 수 있게 되어 있습니다. 그래서 인증을 추가해 보겠습니다. 인증 파일은 3장에서 만들었던 D:\Trac\.htpasswd 파일을 사용하도록 하겠습니다. DAV svn SVNPath "D:/Trac/SvnRepo/Projects/Test" AuthName "Subversion Test repository" AuthType Basic Require valid-user AuthUserFile "D:/Trac/.htpasswd" ▲ 서브버전 인증 추가 설정 이제 다시 웹으로 접속해 보면 아까와는 달리 BASIC인증 대화상자가 나타납니다.
((-------IMAGE-------))

로그인이 되면 소스의 내용을 볼 수 있습니다. 2) 다중 프로젝트 설정 Trac에서도 그랬지만 서브버전이 하나의 프로젝트만 관리하지는 않겠죠? 그래서 여러 프로젝트를 보기 위한 설정을 하도록 해보겠습니다. D:\Trac\SvnRepo\Projects 디렉토리에 Test 서브버전 저장소 뿐만 아니라 ProjectA, ProjectB라는 저장소도 생성하십시오. 귀찮으면 Test를 복사해서 이름이라도 바꾸십시오. 그런 다음 httpd.conf파일에서 아까 설정했던 부분을 다음과 같이 변경합니다. DAV svn SVNParentPath "D:/Trac/SvnRepo/Projects" AuthName "Subversion Projects" AuthType Basic Require valid-user AuthUserFile "D:/Trac/.htpasswd" ▲ 다중 프로젝트 설정 여기서 조금 특이한 부분은 SVNParentPath입니다. 이게 한단계 상위의 Path를 맵핑시키고 각각의 프로젝트를 http://localhost:88/svn/ProjectA, http://localhost:88/svn/ProjectB, http://localhost:88/svn/Test URL로 접근할 수 있도록 해줍니다. 웹브라우져 뿐만이 아니라 서브버전 클라이언트로도 같은 URL로 접근할 수 있습니다. 예를 들면 다음과 같이 해서 체크아웃 할 수 있습니다. C:\testsvn>svn co http://localhost:88/svn/Test Test 체크아웃된 리비전 0. ▲ 아파치와 연동하여 저장소 소스 체크아웃하기 위에서 보면 서버를 지정하기 위해 http프로토콜을 사용하고 있음을 알 수 있습니다.
만약 웹브라우저로 소스를 열람하는 것과 체크아웃하는 것은 아무나 할 수 있도록 하고 커밋은 지정된 사용자만 할 수 있게 하려면 위의 내용을 다음과 같이 바꾸면 됩니다. DAV svn SVNParentPath "D:/Trac/SvnRepo/Projects" AuthName "Subversion Projects" AuthType Basic AuthUserFile "D:/Trac/.htpasswd" Require valid-user ▲ 모두에게 열람 및 체크아웃하게 하고 지정된 사용자만 커밋 가능 설정 여기서 커밋 가능한 사용자는 따로 서브버전 저장소에 설정하여야 합니다. 2. 서브버전 서버(svnserve) 사용 어찌 어찌 하다보니깐 순서가 바뀐 것 같은 느낌이 듭니다. ㅎㅎ 원래 서브버전의 다른 강좌에서는 서브버전으로 우선 서비스를 하는 것을 모두 설명한 다음에 아파치와 연동하는 것을 이야기 하는데 이야기를 Trac에 촛점을 맞춰서 시작하다 보니 거꾸로 온 듯한 느낌은 들지만 뭐 이해하시는 대는 문제가 없을 듯합니다. ㅎㅎ 서브버전을 설치하면 svn.exe라는 파일을 사용할 수 있는데 이것이 바로 서브버전의 클라이언트에 해당합니다. 그럼 서버는 어떤 것이냐면... svnserve.exe라는 파일입니다. 물론 로컬 컴퓨터에서 혼자만 사용할 거라면 svnserve.exe으로 서버를 동작시키지 않고도 로컬 파일 시스템은 사용할 수 있습니다. 이번 장에서는 svnserve.exe에 의해 서버를 띄우고 이를 통해(아파치와 연동하지 않고) 서브버전을 사용하는 것에 대해서 설명하도록 하겠습니다. 1) svnserve 서버 띄우기 svnserve는 커맨드 창에서 다음과 같이 실행할 수 있습니다. C:\>start svnserve --daemon --root D:\Trac\SvnRepo\Projects\Test ▲ 윈도우즈에서 서브버전 서버 실행하기 /home>svnserve --daemon --root /Trac/SvnRepo/Projects/Test ▲ 유닉스/리눅스에서 서브버전 서버 실행하기 위와 같이 실행하면 아무 메시지도 나타나지 않는 새로운 창이 뜨게 됩니다. 무소식이 희소식이라고 아무 메시지도 안나오는게 정상적으로 동작하는 것입니다. 사실은 문제가 있더라도 아무 메시지가 출력되지 않습니다. 다음과 같은 명령으로 서브버전 서버에서 소스를 체크아웃 할 수 있습니다. C:\testsvn>svn co svn://localhost/ Test 체크아웃된 리비전 0. ▲ 서브버전 서버와 연동하여 저장소 소스 체크아웃하기 이번에는 서버를 지정하기 위해 svn프로토콜을 사용하고 있군요. 포트번호는 특별히 지정하지 않았는데요. 서브버전은 기본으로 3690번 포트를 사용합니다. 만약 포트를 7000번으로 바꾸고 싶다면 svnserve를 실행할 때 --listen-port 7000 와 같은 옵션을 추가해 줍니다.
위의 명령에서 start는 새로운 창으로 띄워서 실행하라는 의미입니다. 유닉스나 리눅스의 경우는 start라는 명령은 사용하지 않습니다. --daemon은 백그라운드로 돌아라는 명령인데 그렇다고 --daemon을 생략하면 실행됐다가 바로 죽어버립니다. 그래서 반듯이 줘야 합니다. --root는 서브버전 저장소가 어디인지를 알려주기 위해 사용합니다. 위의 설정으로는 Test 프로젝트에만 접근 가능합니다. 위의 명령에서 서브버전 저장소를 Test까지 주지 않고 Projects까지 주면 Test뿐만 아니라 ProjectA, ProjectB 모두를 꺼내볼 수 있습니다. 새창이 떠있을 때는 사실 문제의 소지가 있습니다. 뭐 창이 하나 떠 있어서 귀찮다는거 말고도 누군가 실수로 창을 닫아 버리거나 컴퓨터를 재 부팅 했을 경우 다시 띄워줘야 정상적인 서비스가 가능하다는 것이죠. 물론 시작프로그램에 등록하면 재 부팅 문제는 해결할 수 있겠네요. 어찌 되었건 창이 띄는게 맘에 안든다면 다음과 같이 할 수 있습니다. C:\>start /B svnserve --daemon --root D:\Trac\SvnRepo\Projects\Test ▲ 윈도우즈에서 새창 띄우지 않고 서브버전 서버 실행하기 보시면 /B옵션을 추가 했다는 것을 아시겠죠? 이런 경우는 svnserve를 죽이기 위해 작업관리자를 사용해서 작업종료를 해야 합니다. 하지만 가장 중요한 문제가 하나 더 남아 있는데 서브버전 서버를 컴퓨터에 로그인 하지 않으면 실행되지 않는 다는 것이 큰 문제입니다. 즉, 컴퓨터가 시작되면서 바로 서비스가 실행되지 않는다는 것이죠. 이문제를 해결하기 위해서는 svnserve를 서비스로 등록하여야 합니다. 2) svnserve 서버 서비스로 등록하기 서비스로 등록하는 방법으로는 여러가지가 있습니다. 또한 이런 걸 도와주는 툴들도 인터넷 상에 돌아다닙니다. 툴을 사용하실려면 다음의 URL을 참고하세요. http://dark.clansoft.dk/~mbn/svnservice/ http://www.pyrasis.com/main/SVNSERVEManager 여기서는 이런 툴 없이 그냥 맨손으로 서비스에 등록하도록 하겠습니다. 우선 서비스에 등록하기 위해 필요한 준비물은 sc.exe라는 프로그램입니다. 일반적으로 Windows의 system32디렉토리에 존재합니다. 이 프로그램은 서비스 제어 프로그램의 윈도우즈에서 제공하고 있습니다. sc.exe의 기본 사용법은 다음과 같습니다. sc [command] [service name] ... ▲ sc.exe의 사용법 사용법은 command에 따라 다양하시만 여기서는 서비스 등록, 제거, 일부 값 변경에 관한 내용만 알아보도록 하겠습니다. <server>는 \\MyCom 과 같이 서비스를 제어하고 싶은 컴퓨터의 이름을 적는 부분인데 자신의 로컬 컴퓨터를 대상으로 한다면 생략하여도 됩니다. command는 다음의 값을 사용하면 됩니다. - 서비스의 등록: create - 서비스의 제거: delete [service name]은 서비스로 등록할 때 등록자가 임의로 그 서비스의 이름을 지정하는 것입니다. <option>은 각 command마다 다른데 우리가 필요한 몇가지만 보도록 하겠습니다. binpath= : 서비스를 제공할 파일의 전체 경로를 적어 줍니다. start= : 서비스를 시작 유형을 자동(auto), 수동(demand), 사용안함(diabled)으로 지정할 수 있습니다. displayname= : 서비스를 확인시키기 위해 사용될 이름을 지정합니다. 뭐 이정도만 알면 될 것 같습니다. 옵션을 지정할 때 주의 해야 할 점이 하나 있는데 "옵션명= 옵션값"을 지정하되 = 다음에는 꼭 스페이스가 있어야 합니다. 그렇지 않으면 오류가 납니다. 자 그럼 이제 서브버전을 서비스에 등록해 보도록 하겠습니다. svnserve에 지정하는 옵션 중 서비스에 등록할 때는 --deamon 대신에 --service를 사용해야 합니다. sc create "Subversion Serve" binpath= "C:\Program Files\Subversion\bin\svnserve.exe --service --root D:\Trac\SvnRepo\Projects" ▲ sc를 이용한 svnserve 서비스 등록 서비스 관리자에 가서 보면 "Subversion Serve"라는 이름으로 서비스가 등록되어 있는 것을 확인 하실 수 있을 것입니다.
((-------IMAGE-------))

시작시키면 시작도 되구요. 정지 시키면 정지도 됩니다. 물론 정상적으로 설치 했을 경우에 말이죠. ㅎㅎ 만약에 잘못 등록해서 서비스에서 제거해야 한다면 다음과 같이 합니다. sc delete "Subversion Serve" ▲ sc를 이용한 svnserve 서비스 제거 자 이제 서비스에도 등록했겠다. 이제 서브버전에 더 상세한 설정을 해 보도록 하겠습니다. 3. 서브버전 권한 설정 이미 해보셨겠지만 현재 상태에서 서브버전의 저장소는 읽기 전용으로 동작합니다. 즉, 체크아웃은 되지만 체크인은 되지가 않습니다. 좀 이상하다고 생각하실지 모르겠습니다. 이전에 아파치에서는 인증을 통해서 체크인도 했었는데 svnserve로는 커밋을 못한다니... 아파치와 연결해서 사용할 때는 httpd.conf에 설정한 값에 의해 서브버전이 행동을 합니다. 저장소의 설정과는 상관없이 말이죠. 하지만 svnserve는 아파치에 설정했던 것과 아무 상관없이 동작합니다. 사실 이게 설정했던 것과는 상관없습니다. svnadmin으로 저장소를 생성하면 기본적으로 읽기 전용으로 만들어 집니다. 이제 권한을 변경해 보겠습니다. 1) svnserve.conf 설정 및 인증 추가하기 각 서브버전의 저장소를 들여다 보면 conf라는 디렉토리가 있습니다. 우리가 실습하고 있는 예 중 하나로 보면 D:\Trac\SvnRepo\Projects\Test\conf 디렉토리가 되겠죠? 거기로 가서 svnserve.conf라는 파일을 열어보세요. 보시면 아시겠지만 대부분은 #으로 주석처리되어 있습니다. 그래서 읽기 전용인 것입니다. 그럼 12라인쯤에 보면 anon-access = read 라는 부분이 주석 처리되어 있습니다. 이 의미는 익명(로그인하지 않고)으로 서브버전 저장소에 저장하는 사용자에게 어떤 권한을 부여할지를 결정합니다. 사용할 수 있는 값으로는 read, write, none 중에 하나를 설정할 수 있습니다. read는 읽기전용이구요, write는 읽고 쓸수 있게 권한을 부여하는 것이구요. none의 경우는 읽지도 못하게 할때 사용합니다. 우선 #을 지우시고 값을 read로 그대로 놔 둡니다. 즉, 익명의 사용자는 읽어볼 수 만 있게 하는 것이죠. 그 다음 라인은 auth-access = write 라고 적혀 있는데 역시 주석처리 되어 있군요. auth-access는 로그인 한 사용자에 대한 권한을 지정하는 것입니다. 이 것도 그냥 주석만 풀어 주세요. 즉, 인증이 된 사용자는 읽고 쓰기가 모두 가능하게 하는 것이죠. 그 다음은 18라인 쯤 보면 passwd-db = passwd 라고 적혀 있는 라인이 보입니다. 뭐 주석처리 되어 있지만 인증을 하기 위한 사용자 명과 암호를 설정한 파일이 어디 있는지 지정하는 곳입니다. 지금 현재는 같은 디렉토리에 passwd라고 지정되어 있군요. 다른 디렉토리에서 사용자 계정을 관리하고 싶다면 해당 파일의 경로와 이름을 적어 주면 됩니다. 우선은 이것도 값을 그대로 두고 주석만 제거하세요. 그리고 제일 마지막 라인의 realm = My First Repository 부분의 주석을 제거하고 "My First Repository"라고 되어 있는 부분을 여러분이 쓰고 싶은 문자열을 쓰세요. 이 값은 인증을 요구할 때 표시되는 인증을 요청하는 곳의 명칭으로 사용됩니다. 저는 여기에 "Test Repository"라고 쓰도록 하겠습니다. 그리고 같은 디렉토리에 보면 passwd파일이 하나 있습니다. 이 파일은 위의 svnserve.conf파일의 passwd-db항목에 설정한 파일이죠? 이 파일을 열어 보시면 다 주석으로 처리되어 있네요. 사용자명과 암호를 =로 구분하여 적으면 됩니다. 즉, pooh라는 사용자명과 1234라는 암호를 부여하려면 파일의 제일 아래에 pooh=1234 라고 적어주면 됩니다. 아직 서브버전은 암호화된 인증 파일을 지원하고 있지 않습니다. 그래서 그냥 암호자체를 적어야 합니다. 좀 찝찝하기는 하지만 현재로선 별수가 없습니다. 어찌되었건 실습을 위해 passwd에 pooh = 1234 와 scott = 1234 를 지정하시기 바랍니다. 참고로 위의 설정 값들은 라인의 첫번째 컬럼부터 시작해야 합니다. 제일 앞에 공백과 같은 것이 있을때는 설정파일 오류가 납니다. 자 여기까지 했으면 svn으로 다시 한번 해 보죠. D:\testsvn>svn co svn://localhost/Test Test 체크아웃된 리비전 0. D:\testsvn>cd Test D:\testsvn\Test>copy con readme.txt 읽어보세요 ^Z 1개 파일이 복사되었습니다. D:\testsvn\Test>svn import -m "readme 추가" svn://localhost/Test 인증 영역(realm): Test Repository 'administrator'의 암호: 인증 영역(realm): Test Repository 사용자명:pooh 'pooh'의 암호:**** 무시함 '.svn' 추가 readme.txt 커밋된 리비전 1. D:\testsvn\Test> 위의 예를 보면 svn://localhost/Test 에서 체크아웃하고 거기에 readme.txt 파일을 하나 생성한 후 이 파일을 import시키고 있습니다. 그런데 체크아웃할 때는 암호를 물어보지 않지만 import할때는 저장소에 쓰기작업이기 때문에 암호를 물어보고 있습니다. 맨 처음에는 윈도우즈의 계정인 administrator의 암호를 물어 보게 됩니다. 하지만 우리는 pooh라는 사용자만 만들었죠? 그래서 그냥 앤터를 칩니다. 그럼 다시 사용자명 부터 물어보게 됩니다. 그리고 위에서 svnserve.conf에서 realm에 설정했던 값이 어디에 출력되는지도 한번 확인해 보시기 바랍니다. 2) 디렉토리, 파일별 권한 설정하기 위의 예에서는 한번의 인증으로 저장소의 모든 파일을 읽고 쓸 수 있는 상태가 되었음을 알 수 있습니다. 이런 경우라면 특별히 보호되어야 하는 파일이나 디렉토리를 지키기가 힘들겠죠? 그래서 이번에는 각 디렉토리 혹은 파일에 사용자별로 권한을 설정하는 방법에 대해서 알아 보겠습니다. svnserve.conf에서 우리가 아직 건드리지 않은 값이 하나 있죠? 약 25번째 라인 쯤에 authz-db = authz 라는 부분입니다. authz-db 항목은 파일이나 디렉토리별로 권한을 부여할 수 있는 설정을 저장하고 있는 파일을 설정하는 부분입니다. 뭐 또 주석만 제거하세요. 그리고 한가지만 더 수정할게 있는데요. authz-db를 사용하려면 anon-access = none 으로 설정되어야 합니다. 이 값이 설정되어 있으면 authz-db의 설정값과 충돌이 생겨서 읽거나 쓸수있는 상황이 생깁니다. 역시 authz라는 파일도 같은 디렉토리에 샘플이 있습니다. [groups] 세션에서 그룹을 대표하는 이름을 만들 있습니다. 예를 들어 ATeam = pooh, scott 과 같이 지정합니다. 이 예는 pooh와 scott이라는 사용자를 ATeam이라고 정하는 것입니다. 팀명을 사용할 때는 @ATeam 이라고 하면 됩니다. 그리고 나머지 세션은 제한을 두고 싶은 실제 저장소내 디렉토리 혹은 파일의 경로입니다. 각 디렉토리 혹은 파일별 권한을 설정하기 전에 우선 모든 사용자가 저장소의 / 디렉토리는 읽고 쓰게 해 주어야 합니다. 다음과 같이 해서 모든 사용자가 읽고 쓸 수 있게 해 줍니다. [/] * = rw 여기서 [/]는 저장소의 /디렉토리에 대한 접근 권한을 지정한다는 의미로 사용되며 *는 누구나 라는 의미이며 r은 읽기 가능 w는 쓰기 가능의 의미를 가지고 있습니다. 즉, rw는 읽고 쓰기가 모두 가능하게 지정하는 것입니다. 만약 읽지도 쓰지도 못하게 하려면 = 다음에 아무값도 적지 않으면 됩니다. 그럼 pooh 사용자가 readme.txt 파일을 읽지 못하게 하려면 다음과 같이 설정하면 됩니다. [/readme.txt] pooh = 이렇게 설정하면 됩니다. 위에서 이야기 한 내용을 모두 한번에 표시하면 다음과 같은 식이겠죠? [groups] ATeam = pooh, scott [/] * = rw [/readme.txt] pooh = [/temp] @ATeam = r 내용을 보면 이제 이해가 가실 거라 생각됩니다. 한가지 꼭 명심하셔야 할 것은 이렇게 설정했다고 해서 아파치를 통해 WebDAV로 접근하는 사용자에게도 통하는게 아니라는거 꼭 명심하시기 바랍니다.
by Anna 안나 2008. 7. 11. 20:56
이제 2장에서 설치한 아파치, 서브버전, 파이썬, Trac을 이용하기 위해 설정방법을 알아보고 실제로 구동 시켜 보도록 하겠습니다. 3장. Trac On Windows - Trac 설정 및 실행해보기 설명하기 앞서 각각의 디렉토리를 다음의 표기로 변경하도록 하겠습니다. 좀 길어서요. 아파치 설치 경로(C:\Program Files\Apache Software Foundation\Apache2.2)를 $Apache로 표기하겠습니다. 서브버전 설치 경로(C:\Program Files\Subversion)를 $Subversion으로 표기하겠습니다. 파이썬 설치 경로(C:\Program Files\Python24)를 $Python으로 표기하겠습니다. 1. 프로젝트 저장소 만들고 Trac Standalone으로 띄워 보기 우선 svn-admin으로 프로젝트의 소스를 저장하고 버전관리를 할 저장소를 생성합니다. svnadmin create D:\Trac\SvnRepo\Projects\Test Test 저는 다음과 같이 D:\Trac\SvnRepo\Projects\Test 라는 디렉토리에 저장소를 만들었습니다. 자 이번에는 이 서브버전 저장소와 연계된 Trac 저장소를 만들어 보도록 하겠습니다. python "C:\Program Files\Python24\Script-xs\trac-admin" "D:\Trac\TracRepo\Projects\Test" initenv 이번에는 "D:\Trac\TracRepo\Projects\Test" 라는 데렉토리에 저장소를 만들고 있습니다. 이렇게 입력하면 저장소 생성시 필요한 내용을 사용자에게 하나씩 물어 보면서 진행하게 됩니다. 제시한 값이 맞다면 그냥 엔터를 치시면 됩니다. 다음은 실제로 실행시의 화면 캡쳐 내용입니다. C:\>python "C:\Program Files\Python24\Script-xs\trac-admin" "D:\Trac\TracRepo\Projects\Test" initenv Creating a new Trac environment at D:\Trac\TracRepo\Projects\Test Trac will first ask a few questions about your environment in order to initalize and prepare the project database. Please enter the name of your project. This name will be used in page titles and descript-xions. Project Name [My Project]> Test Please specify the connection string for the database to use. By default, a local SQLite database is created in the environment directory. It is also possible to use an already existing PostgreSQL database (check the Trac documentation for the exact connection string syntax). Database connection string [sqlite:db/trac.db]> Please specify the type of version control system, By default, it will be svn. If you don't want to use Trac with version control integration, choose the default here and don't specify a repository directory. in the next question. Repository type [svn]> Please specify the absolute path to the version control repository, or leave it blank to use Trac without a repository. You can also set the repository location later. Path to repository [/path/to/repos]> D:/Trac/SvnRepo/Projects/Test Please enter location of Trac page templates. Default is the location of the site-wide templates installed with Trac. Templates directory [C:\Program Files\Python24\share\trac\templates]> Creating and Initializing Project Installing default wiki pages C:\Program Files\Python24\share\trac\wiki-default\CamelCase => CamelCase C:\Program Files\Python24\share\trac\wiki-default\checkwiki.py => checkwiki.py C:\Program Files\Python24\share\trac\wiki-default\InterMapTxt => InterMapTxt C:\Program Files\Python24\share\trac\wiki-default\InterTrac => InterTrac C:\Program Files\Python24\share\trac\wiki-default\InterWiki => InterWiki C:\Program Files\Python24\share\trac\wiki-default\RecentChanges => RecentChanges C:\Program Files\Python24\share\trac\wiki-default\SandBox => SandBox C:\Program Files\Python24\share\trac\wiki-default\TitleIndex => TitleIndex C:\Program Files\Python24\share\trac\wiki-default\TracAccessibility => TracAccessibility C:\Program Files\Python24\share\trac\wiki-default\TracAdmin => TracAdmin C:\Program Files\Python24\share\trac\wiki-default\TracBackup => TracBackup C:\Program Files\Python24\share\trac\wiki-default\TracBrowser => TracBrowser C:\Program Files\Python24\share\trac\wiki-default\TracCgi => TracCgi C:\Program Files\Python24\share\trac\wiki-default\TracChangeset => TracChangeset C:\Program Files\Python24\share\trac\wiki-default\TracEnvironment => TracEnvironment C:\Program Files\Python24\share\trac\wiki-default\TracFastCgi => TracFastCgi C:\Program Files\Python24\share\trac\wiki-default\TracForKorean => TracForKorean C:\Program Files\Python24\share\trac\wiki-default\TracGuide => TracGuide C:\Program Files\Python24\share\trac\wiki-default\TracImport => TracImport C:\Program Files\Python24\share\trac\wiki-default\TracIni => TracIni C:\Program Files\Python24\share\trac\wiki-default\TracInstall => TracInstall C:\Program Files\Python24\share\trac\wiki-default\TracInterfaceCustomization => TracInterfaceCustomization C:\Program Files\Python24\share\trac\wiki-default\TracLinks => TracLinks C:\Program Files\Python24\share\trac\wiki-default\TracLogging => TracLogging C:\Program Files\Python24\share\trac\wiki-default\TracModPython => TracModPython C:\Program Files\Python24\share\trac\wiki-default\TracNotification => TracNotification C:\Program Files\Python24\share\trac\wiki-default\TracPermissions => TracPermissions C:\Program Files\Python24\share\trac\wiki-default\TracPlugins => TracPlugins C:\Program Files\Python24\share\trac\wiki-default\TracQuery => TracQuery C:\Program Files\Python24\share\trac\wiki-default\TracReports => TracReports C:\Program Files\Python24\share\trac\wiki-default\TracRevisionLog => TracRevisionLog C:\Program Files\Python24\share\trac\wiki-default\TracRoadmap => TracRoadmap C:\Program Files\Python24\share\trac\wiki-default\TracRss => TracRss C:\Program Files\Python24\share\trac\wiki-default\TracSearch => TracSearch C:\Program Files\Python24\share\trac\wiki-default\TracStandalone => TracStandalone C:\Program Files\Python24\share\trac\wiki-default\TracSupport => TracSupport C:\Program Files\Python24\share\trac\wiki-default\TracSyntaxColoring => TracSyntaxColoring C:\Program Files\Python24\share\trac\wiki-default\TracTickets => TracTickets C:\Program Files\Python24\share\trac\wiki-default\TracTicketsCustomFields => TracTicketsCustomFields C:\Program Files\Python24\share\trac\wiki-default\TracTimeline => TracTimeline C:\Program Files\Python24\share\trac\wiki-default\TracUnicode => TracUnicode C:\Program Files\Python24\share\trac\wiki-default\TracUpgrade => TracUpgrade C:\Program Files\Python24\share\trac\wiki-default\TracWiki => TracWiki C:\Program Files\Python24\share\trac\wiki-default\WikiDeletePage => WikiDeletePage C:\Program Files\Python24\share\trac\wiki-default\WikiFormatting => WikiFormatting C:\Program Files\Python24\share\trac\wiki-default\WikiHtml => WikiHtml C:\Program Files\Python24\share\trac\wiki-default\WikiMacros => WikiMacros C:\Program Files\Python24\share\trac\wiki-default\WikiNewPage => WikiNewPage C:\Program Files\Python24\share\trac\wiki-default\WikiPageNames => WikiPageNames C:\Program Files\Python24\share\trac\wiki-default\WikiProcessors => WikiProcessors C:\Program Files\Python24\share\trac\wiki-default\WikiRestructuredText => WikiRestructuredText C:\Program Files\Python24\share\trac\wiki-default\WikiRestructuredTextLinks => WikiRestructuredTextLinks C:\Program Files\Python24\share\trac\wiki-default\WikiStart => WikiStart Indexing repository --------------------------------------------------------------------- Project environment for 'Test' created. You may now configure the environment by editing the file: D:\Trac\TracRepo\Projects\Test\conf\trac.ini If you'd like to take this new project environment for a test drive, try running the Trac standalone web server `tracd`: tracd --port 8000 D:\Trac\TracRepo\Projects\Test Then point your browser to http://localhost:8000/Test. There you can also browse the documentation for your installed version of Trac, including information on further setup (such as deploying Trac to a real web server). The latest documentation can also always be found on the project website: http://trac.edgewall.org/ Congratulations! C:\> WEB Admin이 동작할 수 있도록 D:\Trac\TracRepo\Projects\Test\conf\trac.ini 을 열어 다음을 추가합니다. [components]
webadmin.* = enabled
여기까지 했으면 우선 trac을 Standalone 데몬으로 띄워 보도록 하겠습니다. 명령창에 다음과 같이 입력하세요. C:\>python "C:\Program Files\Python24\Script-xs\tracd
" --port 8000 "D:\Trac\TracRepo\Projects\Test" 그런 다음 웹브라우져를 열어서 다음의 URL로 접속해 보세요. http://localhost:8000/Test
다음의 화면을 보실 수 있었다면 지금까지 잘 따라 오신 겁니다.
((-------IMAGE-------))

뭐 한글 Trac으로 설치를 했으니 한글로 해석된 글이 나오고 좋네요. 2. 아파치에 Trac 설정하기 이미 Trac을 웹을 통해 보았지만 궁극적인 목적은 아파치를 통해 많은 사람들이 프로젝트에 참여하도록 하는 것이 목적이므로 아파치를 설정해서 띄워 보도록 하겠습니다. 1) 필요한 모듈 설정 아파치와 서브버전을 연동 시키기 위해 다음과 같이 수행합니다. 단 이 과정은 Subversion을 인스톨본으로 설치하신 분은 대부분이 자동으로 되어 있을 수 있습니다. 그런분은 그냥 확인만 하십시오. - $Subversion\bin 디렉토리에 있는 mod_dav_svn.so파일과 mod_authz_svn.so파일을 $Apache\modules 디렉토리에 복사합니다. 또한 mod_*_svn.so 에서 필요한 dll파일(libdb44.dll와 intl3_svn.dll)도 같이 복사합니다. - $Apache\conf\httpd.conf 파일에서 다음 부분의 주석을 제거합니다. LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so - $Apache\conf\httpd.conf 파일에 다음을 추가합니다. LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so LoadModule python_module modules/mod_python.so 위의 모듈들은 인증을 처리하기 위한 모듈들과 서브버전과 연동을 위한 모듈 그리고 파이썬과 연동을 위한 모듈입니다. Trac은 cgi, fastcgi, 그리고 python_module로 연동이 가능한데... cgi는 성능이 많이 떨어지므로 사용하는 것을 권장하지 않습니다. 사용하길 권장하는 부분은 fastcgi와 python_module인데 위에서 mod_python.so을 로드하는 부분을 추가하고 있습니다. 2) Trac 가상 페이지 만들기 이 부분이 잘 설정되었는지 확인하기 위해 다음과 같이 $Apache\conf\httpd.conf파일에 다음을 추가합니다. SetHandler mod_python PythonHandler mod_python.testhandler ▲ python_module이 테스트 페이지 설정 이렇게 입력한 후 아파치를 재 시작시킵니다. 그런 다음 웹브라우져로 http://localhost:88/mpinfo 를 실행하여 다음과 유사한 화면이 나타나는지 확인합니다.
((-------IMAGE-------))((-------IMAGE-------))

정상적으로 표시가 되었다면 mod_python 은 정상적으로 설치가 되었습니다. 이 설정은 보안에 문제가 있을 수 있으므로 정상적으로 동작했다는 것을 확인하면 지우세요. 이번에는 서브버전과의 아파치와의 연동이 정상적으로 이루어 지는지를 다음의 내용을 추가하여 확인합니다. DAV svn SVNPath "D:/Trac/SvnRepo/Projects/Test" ▲ dav_svn_module 테스트 페이지 설정 httpd.conf파일을 적용하기 위해서는 아파치를 다시 시작시켜야 합니다. 웹으로는 http://localhost:88/svn/Test 로 접속합니다. 화면에 다음과 유사한 값이 찍히면 정상입니다. Revision 0: / Powered by Subversion version 1.4.4 (r25188). 상태나 버전에 따라 좀 다르게 나올 수도 있습니다. 이제 Trac을 띄워볼 차례입니다. $Apache\conf\httpd.conf파일에 다음을 추가합니다. SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv "D:/Trac/TracRepo/Projects/Test" PythonOption TracUriRoot /projects/Test ▲ Trac 테스트를 위한 페이지 설정 httpd.conf파일을 적용하기 위해서는 아파치를 다시 시작시켜야 합니다. 웹으로는 http://localhost:88/projects/Test 로 접속합니다. 위에 캡쳐(trac standalone deamon)된 것과 같은 화면이 출력되면 정상적으로 설정된 것입니다. 만약 Trac을 설치 할때 기본 디렉토리인 파이썬 디렉토리가 아니라 별도의 인스톨 디렉토리를 지정하였다면 위의 설정에 다음과 같은 구문을 추가해서 설치한 Trac의 경로를 파이썬에게 알려 주어야 합니다. PythonPath "sys.path + ['C:/Program Files/Trac']" 위의 설정은 Trac을 C:\Program Files\Trac 에 설치했다고 했을 때 설정입니다. 3) 로그인 처리 http://localhost:88/projects/Test 에서 보여진 화면에서 오른쪽 상단 부근에 "로그인"이라는 부분이 있습니다. 지금 상태에서는 "로그인"을 누르면 다음과 같은 오류 메시지가 나타납니다.
((-------IMAGE-------))

아직 로그인 페이지 처리를 하지 않아서 그런 것 입니다. 로그인을 처리하여 페이지에 접근 권한을 부여기 위해서 먼저 사용자 암호 파일을 만들어야 합니다. 암호 파일은 D:/Trac/.htpasswd 에 만들기로 하겠습니다. 이 파일은 추후 Subversion에서도 사용할 꺼거든요. 그래야 계정 하나로 서브버전도 그리고 Trac도 모두 사용할 수 있겠죠? 이 암호 파일은 아파치에서 제공하는 htpasswd.exe파일로 만들고 관리할 수 있습니다. 명령창으로 $Apache\bin으로 이동해서 다음과 같이 입력합니다. $Apache\bin>htpasswd -c D:\Trac\.htpasswd admin Automatically using MD5 format. New password: ****** Re-type new password: ****** Adding password for user admin ▲ 암호 파일 생성 및 계정 추가 위의 내용은 새로운 암호 파일(D:\Trac\.htaccess)을 만들면서 admin이라는 계정의 추가하고 있습니다. 암호를 정하고 다시 한번 암호를 확인하면 입력이 끝납니다. Trac에 인증절차를 추가하기 위하여 다음을 httpd.conf에 추가합니다. AuthType Basic AuthName "Test Project" AuthUserFile "D:/Trac/.htpasswd" Require valid-user ▲ Trac 인증 페이지 설정 당연한 이야기지만 httpd.conf를 변경하면 아파치 다시 띄워야 하는 거 아시죠? http://localhost:88/projects/Test 에 접속해서 "로그인"버튼을 클릭하면 다음과 같은 BASIC인증 창이 나타납니다.
((-------IMAGE-------))

이제 아까 입력했던 ID와 암호를 입력하여 들어가 보도록 하겠습니다. 이제는 오류가 나지 않고 로그인이 되었다는 메시지가 출력되는 것을 보실 수 있습니다.
((-------IMAGE-------))

로그인 되었을 때 할 수 있는 일에 대해서는 추후 이야기 하도록 하고 설정을 더 진행해 보도록 하겠습니다. 4) 다중 프로젝트 적용하기 위의 예제는 설정의 예를 보이기 위한 것일 뿐입니다. 그렇다 보니 Trac으로 Test라는 하나의 프로젝트만 서비스 하고 있습니다. 실제 상황에서는 여러 프로젝트를 여러 사람이 접근하여 하게 되겠죠? 즉, D:/Trac/TracRepo/Projects 디렉토리에 Test라는 프로젝트가 있는데 사실은 같은 디렉토리에 여러 프로젝트의 Trac 저장소가 있을 수 있다는 겁니다. 물론 D:/Trac/SvnRepo/Projects에도 서브버전 저장소가 여러개 있을 수 있겠죠? 뭐 구성하기 나름이겠지만... 이럴 경우 /projects/Test라는 가상디렉토리를 D:/Trac/TracRepo/Projects/Test에 직접 맵핑 하지 않고 가상디렉토리 /projects를 D:/Trac/TracRepo/Projects 디렉토리에 맵핑해서 저장소의 리스트를 보여주고 선택해서 들어갈 수 있게 하는 방법을 이야기 하려고 합니다. SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir "D:/Trac/TracRepo/Projects" PythonOption TracUriRoot /projects ▲ Trac에서 프로젝트 리스트 보기 설정 좀 달라진 것으로는 PythonOption 중에 TracEnvParentDir 이라는게 있네요. 어찌 되었건 저렇게 설정하고 http://localhost:88/projects 에 들어가 보면 다음과 같이 나타납니다.
((-------IMAGE-------))

물론 위의 경우는 제가 ProjectA와 ProjectB의 Trac저장소를 더 만들었을 때의 이야기 입니다. 어찌 되었건 프로젝트 리스트가 보여지죠? 여기서 Test를 클릭해서 들어가면 또 아까의 화면으로 들어가 집니다. 그런데... 프로젝트의 리스트는 보여주기는 싫고 프로젝트 URL을 직접 링크를 한다거나 혹은 프로젝트 URL을 아는 사람만 접속하게 하고 위의 설정을 다음과 같이 설정합니다. SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnvParentDir "D:/Trac/TracRepo/Projects" PythonOption TracUriRoot /projects ▲ Trac에서 프로젝트 리스트 보이 않게 설정 위의 설정으로는 http://localhost:88/projects 경로로는 접속할 수 없습니다. 하지만 http://localhost:88/projects/Test 로는 접속할 수 있습니다. 또 한가지 프로젝트가 여러개라면 로그인을 처리하는 설정도 여러개여야 합니다. 왜냐면 위의 로그인 처리를 하는 설정의 가상 디렉토리가 /projects/Test/login 이라서 다른 프로젝트에는 사용할 수 없기 때문이죠. 각 프로젝트마다 사용자가 모두 다르다면 별수 없이 이렇게 해야 하겠지만 하나의 계정 정보만으로 모든 프로젝트에 동일하게 적용하고 싶다면 위의 로그인을 위하여 설정한 내용을 다음과 같이 바꿉니다. AuthType Basic AuthName "Test Project" AuthUserFile "D:/AppData/Trac/.htpasswd" Require valid-user ▲ Trac의 모든 프로젝트에 같은 계정으로 로그인 설정 위의 예는 /projects/로 시작되고 끝이 /longin인 모든 가상디렉토리는 인증처리를 하라는 의미입니다. Trac설정의 마지막으로 여러분이 localhost밑에 프로젝트 경로가 아닌 도메인 자체가 projectA.company.com, test.company.com, test.company.com 과 같이 만들고 싶을 수도 있겠네요. 물론 hosts파일이든지 직접 도메인을 추가하든지 해서 이 도메인이 아파치가 설치된 웹서버의 주소로 변경될 수 있어야 겠죠? 어찌되었건 이럴때는 아파치의 가상호스트 설정을 해야 합니다. DocumentRoot "D:/Trac/TracRepo/Projects/Test" ServerName test.mycompany.com SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracEnv "D:/Trac/TracRepo/Projects/Test" PythonOption TracUriRoot / AuthType Basic AuthName "MyCompany Trac Server" AuthUserFile "D:/AppData/Trac/.htpasswd" Require valid-user ▲ 가상 호스트를 이용한 Trac 서비스 제공 만약 여기서도 다중 프로젝트를 서비스 하려면 위 설정 중 PythonOption TracEnv "D:/AppData/Trac/TracRepo/Projects/Test" 부분을 다음과 같이 변경하시면 되겠습니다. PythonOption TracEnvParentDir"D:/Trac/TracRepo/Projects" 이 부분은 필요에 따라 직접 한번 해보세요. 5) WebAdmin 적용하기 Trac을 관리하기 위해서는 Trac 저장소를 만들때 해본것과 같이 trac-admin을 사용해야 합니다. 그런데 이게 커맨드 도구여서 좀 사용이 불편합니다. 그래서 Web상에서 Trac을 관리할 수 있게 우리는 이미 2장에서 Web Admin 플러그인을 설치하였습니다. 그럼 어떻게 사용하는 한번 알아보도록 하겠습니다. 우선 Web Admin을 수행하기 위해서는 Trac저장소에 관리 권한이 부여되어야 합니다. 다음과 같은 명령으로 저장소에 관리권한을 부여합니다. python "C:\Program Files\Python24\Script-xs\trac-admin" D:/Trac/TracRepo/Projects/Test permission add admin TRAC_ADMIN 그런 다음 다시 http://localhost:88/projects/Test를 들어가서 로그인을 admin으로 하게 되면 다음 그림과 같이 제일 오른쪽에 Admin이라는 탭이 생긴것을 확인할 수 있습니다.
((-------IMAGE-------))

해봤더니 안 뜬다구요? 글을 자세히 읽지 않았군요. ^^; 위에서 다음과 같은 설명을 했었는데... ========================================= WEB Admin이 동작할 수 있도록 D:\Trac\TracRepo\Projects\Test\conf\trac.ini 을 열어 다음을 추가합니다. [components]
webadmin.* = enabled ========================================= 이 설정을 해야 한다는 거 잊지 마세요. Web Admin에 대한 사용법은 다음번에 알아보도록 하겠습니다. 여기까지 Trac의 설정을 마치구요. 다음은 서브버전에 대한 설정을 알아보도록 하겠습니다.
by Anna 안나 2008. 7. 11. 20:53
| 1 2 3 4 5 6 7 |