강대권
개발환경의 효율적 개선
3.1. 목표 ¶
지속적인 통합 베타리더 후기 중 가장 와닿는 후기 “(인간적으로는 돌아볼 일 없는 이이긴 하지만) 래리 월은 개발자의 덕목 중 하나로 '게으름'을 꼽았었죠. 이 책에서는 게으르지 못한 개발자를 '고객의 신발은 빈틈없이 고쳐주면서, 정작 자신의 아이들을 위한 신발 수선은 잊어버리는 구두 수선공'이라고 꼬집고 있던데 어쩐지 이 구절에 저자의 의도가 다 담겨 있는 듯하네요. 자, 게으르고자 하는 개발자를 위한 멋진 친구 하나를 소개합니다. 이 책으로 다른 멋진 책을 집필하는 여유 시간을 얻을 수 있는 개발자들이 늘어나길 기대하고... 음 그리고 혹시 앰비언트 오브를 제게 선물할(아니 구경시켜 줄) 이를 찾습니다.” —김형준, http://tzara.wordpress.com 3.3. 도입 전 고려사항 ¶
3.5.1. 대표적인 기존 팀 프로젝트 관리의 예 ¶
3.5.2. 체계적인 팀 프로젝트 관리로 개선 예 ¶
4. Subversion을 이용한 소스관리 ¶
4.2. 저장소 디렉토리 구조 ¶-- http://svn.samplerepository.org/svn/sample +--+---+- branches | +--+- dav-mirror | | |--- src | | |--- doc | | +--- Makefile | | | +--- svn-push | +--- svnserve-thread-pools | +---+- tags | +--- 0.10 | +--+- 0.10.1 | | |--- src | | |--- doc | | +--- Makefile | | | +--- 0.20 | +--- 0.30 | +--- 0.50 | +--- 1.01 | +---+- trunk |--- src |--- doc +--- Makefile 4.3. 용어설명 ¶
4.5. Subversion 설치 ¶
4.5.2. 설치 ¶
4.5.3. 저장소 설정 및 Apache 설정 ¶
4.5.4. 저장소 기본 디렉토리 구성 ¶
4.6.1. Import ¶맨 처음 프로젝트를 시작할 때 저장소에 소스들을 넣어야 합니다. 이럴 때 하는 것이 import 작업입니다. sampledir 이라는 디렉토리를 만든 뒤에 그 아래 다음과 같은 간단한 소스를 작성해 보십시오.
C:\Temp>mkdir sampledir C:\Temp>cd sampledir C:\Temp\sampledir>edit sample.c #include <stdio.h> int main() { printf("Sample Program Version 0.1\n"); return 0; } 이 소스를 저장소의 trunk 디렉토리에 import 하겠습니다. 아래 sampledir은 디렉토리입니다. 파일을 적으면 import되지 않습니다. 꼭 디렉토리를 만들고 그 디렉토리를 적어 주십시오. 저장소의 trunk 디렉토리에는 sampledir 디렉토리안의 sample.c 파일만 올라가게 되고 sampledir은 올라가지 않습니다. sampledir 아래 디렉토리를 만들었다면 그 디렉토리는 저장소의 trunk 디렉토리 아래에 올라가게 됩니다.
C:\Temp\sampledir>cd .. C:\Temp>svn import sampledir http://localhost/svn/sample/trunk -m "sample.c import" --username <사용자아이디> --password <패스워드> 추가 sampledir\sample.c 커밋된 리비전 4. 이제 import가 제대로 되었는지 확인해 봅시다. list 명령을 이용해 trunk 디렉토리에 무엇이 있나 보겠습니다.
C:\Temp>svn list http://localhost/svn/sample/trunk sample.c 4.6.2. Checkout ¶이제 부터 Subversion을 이용해서 프로그램 소스를 관리 할 수 있습니다. checkout을 해서 어디서든 소스를 받아 볼 수 있습니다. 방금 import를 하기위해 만들었던 sampledir은 지워도 됩니다.
svn checkout은 svn co로 줄일 수 있습니다. "svn checkout 저장소주소 로컬디렉토리" 의 형식 입니다.
C:\Temp>svn checkout http://localhost/svn/sample/trunk sample A sample\sample.c 체크아웃된 리비전 4. checkout을 한 디렉토리 안에는 .svn 이라는 디렉토리가 있습니다. 이 디렉토리는 Subversion 저장소 정보가 들어 있기 때문에 지우면 안 됩니다.
4.6.3. Blame ¶Blame은 한 소스파일을 대상으로 각 리비전 대해서 어떤 행을 누가 수정했는지 알아보기 위한 명령입니다.
리비전, 커밋한 사용자의 ID, 소스 순서입니다.
sample# svn blame sample.c 4 sampleuser #include <stdio.h> 4 sampleuser 4 sampleuser int main() 4 sampleuser { 5 sampleuser printf("Sample Program Version 0.2\n"); 5 sampleuser printf("Hello Subversion\n"); 4 sampleuser 4 sampleuser return 0; 4 sampleuser } 4 sampleuser 여기서는 커밋한 사용자가 한명 밖에 없으므로 전부 똑같이 나옵니다.
한 예로 여러사람이 커밋했을 경우 아래처럼 나옵니다.
4 sampleuser #include <stdio.h> 4 sampleuser 4 sampleuser int main() 4 sampleuser { 7 epifanes printf("Sample Program Version 0.3\n"); 6 pyrasis printf("Hello Subversion\n"); 4 sampleuser 4 sampleuser return 0; 4 sampleuser } 4 sampleuser 특정 리비전만 지정해서 볼 수도 있습니다. 리비전을 지정하지 않으면 현재 리비전을 대상으로 합니다.
sample# svn blame -r 4 sample.c
5.2.1. 다운로드 목록 ¶1. Python
2. Trac
5.2.2. Trac 설치 ¶
5.2.3. Trac Plugin 설치 ¶
c:\python24\python.exe ez_setup.py setuptools==dev
c:\python24\scripts\easy_install.exe http://svn.edgewall.com/repos/trac/sandbox/webadmin
[components] webadmin.* = enabled
c:\python24\scripts\easy_install.exe http://trac-hacks.org/svn/accountmanagerplugin/0.10
[components] acct_mgr.admin.accountmanageradminpage = enabled acct_mgr.api.accountmanager = enabled acct_mgr.db.sessionstore = enabled acct_mgr.htfile.abstractpasswordfilestore = enabled acct_mgr.htfile.htdigeststore = enabled acct_mgr.htfile.htpasswdstore = enabled acct_mgr.http.httpauthstore = enabled acct_mgr.pwhash.htdigesthashmethod = enabled acct_mgr.pwhash.htpasswdhashmethod = enabled acct_mgr.web_ui.accountmodule = enabled trac.web.auth.LoginModule = disabled acct_mgr.web_ui.LoginModule = enabled acct_mgr.web_ui.RegistrationModule = disabled
acct_mgr.web_ui.registrationmodule = disabled
5.2.4. Trac 프로젝트 생성 ¶
subversion 폴더 백업 or bulk 뜨는 과정 기술
mkdir D:/repos/trac/test/
c:\Python24\Scripts>python trac-admin D:/repos/trac/test/trac.db Trac [D:\repos\trac\test\trac.db]> initenv 엔터 project Name [My Project]> test 엔터 Database connection string [sqlite:db/trac.db]> 엔터 Repository type [svn]> 엔터 Path to repository [/path/to/repos]> D:/repos/svn/test 엔터 Templates directory [C:\Python23\share\trac\templates]> 엔터 Creating and Initializing Project -> 프로젝트 생성 시작
permission remove anonymous TICKET_CREATE permission remove anonymous TICKET_MODIFY permission remove anonymous WIKI_CREATE permission remove anonymous WIKI_MODIFY
permission add administrator TRAC_ADMIN
5.2.5. Trac 서비스 아파치 웹서버에 등록 ¶
copy c:\python24\share\trac\cgi-bin\trac.cgi "c:\Program Files\Apache Group\Apache2\cgi-bin"
# module 추가 LoadModule python_module modules/mod_python.so # httpd.conf 맨 하단에 Trac 서비스 설정 추가 Alias /trac "C:/Python24/share/trac/htdocs" <Location /> SetHandler mod_python PythonHandler trac.web.modpython_frontend PythonOption TracUriRoot / PythonOption TracEnv "D:/repos/trac/test/trac.db" PythonOption TracLocale "English_KOREA" </Location> <Directory "C:/Python24/share/trac/htdocs"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> 5.2.6. Trac 환경설정 ¶
# -*- coding: utf-8 -*- [account-manager] password_file = d:/repos/trac/test/.htaccess password_format = htpasswd password_store = HtPasswdStore [attachment] max_size = 1048576 render_unsafe_content = false [browser] downloadable_paths = /trunk, /branches/*, /tags/* hide_properties = svk:merge render_unsafe_content = false [changeset] max_diff_bytes = 10000000 max_diff_files = 0 wiki_format_messages = true [components] acct_mgr.admin.accountmanageradminpage = enabled acct_mgr.api.accountmanager = enabled acct_mgr.db.sessionstore = enabled acct_mgr.htfile.abstractpasswordfilestore = enabled acct_mgr.htfile.htdigeststore = enabled acct_mgr.htfile.htpasswdstore = enabled acct_mgr.http.httpauthstore = enabled acct_mgr.pwhash.htdigesthashmethod = enabled acct_mgr.pwhash.htpasswdhashmethod = enabled acct_mgr.web_ui.accountmodule = enabled acct_mgr.web_ui.loginmodule = enabled acct_mgr.web_ui.registrationmodule = enabled addcomment.macro.* = enabled macropost.web_ui.* = enabled trac.web.auth.loginmodule = disabled trac.wiki.web_ui.wikimodule = disabled tracnav.tracnav.* = enabled tractags.* = enabled webadmin.* = enabled [header_logo] alt = height = -1 link = src = width = -1 [logging] log_file = trac.log log_level = DEBUG log_type = none [mimeviewer] enscript_modes = text/x-dylan:dylan:4 enscript_path = enscript max_preview_size = 262144 mime_map = text/x-dylan:dylan,text/x-idl:ice,text/x-ada:ads:adb php_path = php silvercity_modes = tab_width = 8 [notification] always_notify_owner = false always_notify_reporter = false always_notify_updater = true mime_encoding = base64 smtp_always_bcc = smtp_always_cc = smtp_default_domain = smtp_enabled = true smtp_from = smtp_password = smtp_port = 25 smtp_replyto = smtp_server = smtp_subject_prefix = __default__ smtp_user = administrator use_public_cc = false use_short_addr = false use_tls = false [project] descr = Test Project Management System - Trac footer = Visit the Trac open source project at<br /><a href="http://trac.edgewall.org/">http://trac.edgewall.org/</a> icon = common/trac.ico name = Test Project Management System url = http://example.org/ [search] min_query_length = 3 [ticket] default_component = default_milestone = 검색로그 기능베타 default_priority = major default_type = defect default_version = restrict_owner = false [timeline] changeset_long_messages = false changeset_show_files = 0 default_daysback = 15 ticket_show_details = false [trac] authz_file = authz_module_name = base_url = check_auth_ip = true database = sqlite:db/trac.db default_charset = EUC-KR default_handler = TagsWikiModule htdocs_location = ignore_auth_case = false mainnav = wiki,timeline,roadmap,browser,tickets,newticket,search metanav = login,logout,settings,help,about permission_store = DefaultPermissionStore repository_dir = D:/repos/svn/test repository_type = svn timeout = 20 [wiki] ignore_missing_pages = false render_unsafe_content = false split_page_names = false 6.1. 통합 빌드 머신 ¶
6.2. 지속적인 통합이 요구하는 컴포넌트 ¶
6.3. 통합 머신 피드백 장치 ¶
8. 세미나의 목적과 방향성 ¶
13.1. 도입 방안 ¶현재까지 가장 효과적인 도입 방법(단, 혼자서 특정 솔루션이나 웹사이트를 맡고 있는경우 유용)
13.2. InfoQ ¶Kenny군이 소개해 준 사이트인데 Tracking change and innovation in the enterprise software development community를 표방
13.3.1. Install for windows ¶
Internet Explorer에서 웹 페이지를 표시할 수 없습니다. 가능성이 높은 원인: 인터넷에 연결되어 있지 않습니다. 웹 사이트에 문제가 발생했습니다. 주소에 오타가 있을 수 있습니다. 가능한 해결 방법: 연결 문제 진단 추가 정보
|
Love is in the offing. Be affectionate to one who adores you. |