SlideShare uma empresa Scribd logo
1 de 87
실용주의 프로그래머를 위한
     개발 환경 만들기




         http://surpreem.com
Track 1. 실용주의 개발 환경
Session 1. 실용주의 개발 환경?

S/W 개발에 필요한 것은 무엇일까요? 컴퓨터는 기본으로 있어야 할 것이고 그 외 프로그램
제작에 사용하는 각종 컴파일러와 도구 등도 필요할 겁니다. 어쩌면 커피와 인터넷을 필수
로 꼽는 분도 있을지 모릅니다. 하지만 의외로 개발 환경이 필요하다는 것에 대해서는 여전
히 잘 모르는 분이 많은 것 같습니다. 아니 개발 환경 자체에 대해 잘 모르는 분이 많다고
하는 게 오히려 더 맞을지도 모르겠습니다.


개발에 필요한 시스템 역시 개발자에 따라 매우 다양한 요구가 있을 수 있습니다. 하지만
그 중에서도 가장 기본이 되는 것이 있습니다. 바로 버전 관리, 이슈 또는 프로젝트 관리,
빌드 시스템, 심볼 서버 등입니다.


 ‘그럼 기본이 되는 시스템만 적당히 있으면 되는 거 아닌가요? 실용주의 개발 환경이란 또
 뭔가요?’


‘실용주의’란 말을 붙이고 보니 뭔가 세련되어 보입니다. 그런데 실용적인 개발 환경과 그렇
지 못한 것을 구분하는 차이는 뭘까요? 버전 관리 시스템에 대해 속속들이 알지는 못하지만
지금까지 많은 시스템을 접해 봤습니다. 구입 비용은 들지 않지만 설치부터 관리까지 모든
것을 직접 해야 하는 오픈 소스 제품부터 많은 비용을 들여 구입하고 구축해야 하는 고가의
외산 제품, 국내에서 개발한 제품 등 종류도 많습니다. 하지만 무엇보다 중요한 것은 사용
할 환경에 그 제품이 잘 맞으며 쉽게 이해하고 쓸 수 있느냐 하는 겁니다. 고가의 제품을
도입해 시스템을 구축했으나 사용하기도 복잡하고 환경에 맞지 않으면 그 제품 자체의 성능
이 아무리 뛰어난들 실용적이지 못합니다. 반대로 구입 비용은 없었지만 구축하고 관리하기
가 너무 복잡하고 힘들다면 그 역시도 실용적이라고 하긴 어려울 겁니다. 즉 비용도 적게
들고 관리도 되도록 쉬우며 짧은 시간에 쉽게 배워 쓸 수 있는 시스템이 무엇보다 가장 실
용적인 시스템이라고 생각합니다.


 ‘그런데 그런 거 꼭 써야 하나요? 없어도 나름 잘 해 왔는데.’


시스템이라는 말 자체에 거부감을 느끼는 분도 의외로 많습니다. 사실 시스템이란 게 대체
로 관리를 위한 것이니까요. 하지만 앞에서 얘기한, S/W 개발에서 가장 기본이 되는 시스템
은 누군가를 감시하기 위한 것이 아니라 자신과 팀을 위한 것입니다. 언제 어디를 무슨 이
유로 고쳤는지 몰라 답답했던 적은 없었나요? 현재 진행 중인 프로젝트에서 뭘 얼마나 해야
하는지 궁금한 적은 없었나요? 밀려드는 요청으로 동시에 여러 일을 진행하며 좀 더 쉽게
코드를 관리할 방법이 없는지 답답했던 적은요? 또는 배포할 코드나 실행 파일을 종종 잘못
전달해 문제가 생긴 적은요?


지금도 S/W 개발 과정에서 흔히 겪는 이런 문제를 앞에서 얘기한 시스템을 사용하지 않고
각자 여러 방법을 사용해 잘 해결하고 있을지도 모릅니다. 하지만 이런 시스템을 사용하면
그렇지 않은 것보다 훨씬 적은 노력으로 더욱 큰 효과를 볼 수 있다는 것은 분명합니다. 특
히 팀이 아닌 혼자라도 마찬가지입니다.
Session 2. 시스템 구성

이 책에서는 여러 오픈 소스 제품을 사용해 시스템을 구성합니다. 그런데 오픈 소스 제품에
도 비슷한 역할을 하는 것이 많으므로 무엇을 선택하면 좋을지 쉽게 결정하기 어려울 때가
많습니다. 또한 윈도 환경에서 쓸 것이므로 이를 고려해 각 부문별로 간단히 살펴보고 앞으
로 무엇을 사용할지도 알아보겠습니다.


버전 관리
버전 관리 시스템의 가장 큰 역할은 이력 관리입니다. 누가 언제 무엇을 어떻게 바꿨는지
언제든 확인할 수 있고 필요하면 언제든 과거 내용으로 되돌리거나 가져올 수 있습니다. 이
런 시스템을 갖추지 않았을 때 팀 내에서 쓰는 가장 기본적인 방법은 공유 디렉터리를 만들
어 각자 변경한 내용을 모으는 겁니다. 하지만 이런 경우 이력 추적은 말할 것도 없고 잘못
덮어쓰면 힘들게 개발한 내용이 한 순간에 사라지는 경우도 생깁니다. 정말 아찔한 일이죠.


또한 각 개발자 입장에서는 혹시라도 문제가 생길 것에 대비해 항상 백업을 만드는데 가장
일반적인 방법은 압축 파일로 보관하는 겁니다. 가장 간편한 방법이니 실수도 없을 것 같지
만 의외로 문제가 많습니다. 예를 들면, 코드를 보다 수정할 부분이 생기면 백업 만드는 걸
잊고 이미 수정하고 있는 경우가 많습니다. 게다가 백업을 만들어 보관은 열심히 했는데 그
많은 것 중 필요한 내용이 어디에 있는지 찾기가 무척 어려우며 각 백업 사이에 차이점을
찾는 것도 그리 쉬운 일은 아닙니다.


사실 이 모든 일을 대신 해 주는 것이 바로 버전 관리 시스템입니다. 그저 맡기면 간단히
해결될 일이죠. 그런데 버전 관리 시스템 역시 각각 특징이 있습니다. 크게는 중앙 집중형
과 분산형으로 나눌 수 있으며 간단히 살펴 보겠습니다.


중앙 집중형
클라이언트와 서버 형태의 버전 관리 시스템입니다. 코드를 저장하는 저장소는 서버에 있고
각 개발자는 클라이언트를 사용해 서버와 정보를 주고 받습니다. 직관적이므로 사용하기에
간편하지만 서버와 연결이 끊어지면 갖고 있는 코드를 수정하는 것 외에 할 수 있는 일이
거의 없습니다. 심지어는 이력 조회도 할 수 없습니다. CVS, Subversion, ClearCase 등 많
은 제품이 여기에 속합니다.


분산형
서버가 따로 없이 모든 개발자가 각자의 저장소를 가질 수 있으며 이 저장소를 서로 동기화
합니다. 각자 저장소를 가지므로 네트워크에 연결하지 않더라도 다른 저장소와 동기화하는
것 외에는 버전 관리에 아무런 문제가 없습니다. 다만 병렬 개발이 기본이므로 처음 접하면
중앙 집중형에 비해 혼란스러울 수 있습니다. Git, Mercurial, Bazaar 등이 이에 속합니다.


버전 관리 시스템에서는 중앙 집중형인 Subversion을 여전히 가장 많이 사용하고 있으나
최근에는 분산형에 대한 관심도 상당히 높아졌습니다. 이는 GitHub, BitBucket과 같은 소셜
코딩의 영향이 큰 것도 있으나 무엇보다 분산형 시스템만의 장점도 매우 크기 때문입니다.
앞에서 얘기했듯이 중앙 집중형 시스템에서는 서버와 연결이 끊어지면 아무것도 할 수 없지
만, 분산형은 각자 저장소를 마음껏 만들 수 있어 코드를 이리저리 바꿔가며 시험하고 맘에
들면 반영하고, 그렇지 않으면 버리는 것도 쉽습니다. 또한 오프라인에서 작업하더라도 지
금껏 진행한 이력을 모두 살펴볼 수 있는 것도 매우 큰 장점입니다.


여기서는 분산형 시스템의 장점과 더불어 Subversion만큼이나 쉽고 간편한 Mercurial을 사
용합니다. 무엇보다 윈도에서는 TortoiseHg라는 멋진 GUI S/W를 사용할 수 있습니다.
Track 2. 개발 환경 만들기
Session 1. 인증 시스템

앞에서 소개한 전체 시스템 모습에서 가장 밑바탕이 되는 것은 인증 시스템입니다. 공개적으
로 누구나 접근하고 사용할 시스템이라면 굳이 인증 시스템을 구성할 필요는 없지만 대부분
공개할 것과 그렇지 않은 것을 구분해 한 시스템 내에서 운영하므로 인증은 반드시 필요합니
다. 또한 앞으로 구성할 여러 시스템에서는 각각 인증 방법을 제공하는데 각 시스템별로 인증
을 달리 사용하면 여러 시스템에 계정을 각각 등록해야 하고 관리도 시스템별로 따로 해야 하
므로 매우 불편합니다. 그러므로 여기서는 가능한 많은 시스템에서 같이 쓸 수 있도록
OpenLDAP을 사용해 통합 인증 시스템을 먼저 구성합니다.


미리 준비해야 하는 것들
    OpenLDAP
        윈도용 OpenLDAP은 아래 URL에서 받을 수 있습니다. 하지만 현재 배포 중인 2.4.26 버전
         은 인증 처리에 문제가 있어 사용할 수 없으므로 여기서는 2.4.30 버전을 사용합니다.
        다운로드: http://www.userbooster.de/en/download/openldap-for-windows.aspx
        CD 경로: server programsopenldapopenldap-for-windows.msi
    LDAP Admin
        LDAP 디렉터리 관리 툴이며 여기서는 1.2 버전을 사용합니다.
        다운로드: http://sourceforge.net/projects/ldapadmin/
        CD 경로: server programsopenldapLdapAdmin.exe



OpenLDAP 설치

1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Next를 선택해 다음으로 진행합니다.




  OpenLDAP 설치 마법사

2. 라이선스 동의 화면에서는 I accept the terms in the License Agreement를 선택하고
Next를 누릅니다.




 라이선스 동의 화면

3. 설치 디렉터리는 기본 설정을 그대로 사용하면 됩니다. Next를 선택합니다.




 설치 디렉터리 지정

4. 설치 항목은 기본 설정을 그대로 사용하면 됩니다. Next를 선택해 다음으로 진행합니다.
설치 항목 지정

5. 추가 설정 화면에서는 OpenLDAP에 접속하는 데 사용할 서버 이름 또는 IP 주소와 포트를
 설정할 수 있습니다. 기본 설정을 그대로 사용하면 됩니다. 서버 정보를 직접 설정하려면
 Listen on all interfaces 설정을 해제하고 Servername / IP-Address 란에 plab.net과 같
 이 사용할 서버 이름을 적으면 됩니다.




 추가 설정
여기서 잠깐!

 서버 이름을 지정하는 것은 숫자로 된 IP 주소보다 의미 있는 이름이 기억하기 좋기 때문인데, 네트워크에서
 는 DNS 서버를 사용하지 않으면 이 이름을 IP 주소로 변환해 인식할 수 없습니다. 이 문제를 해결하기 위해
 서버에 접속하는 각 개발자 PC의 C:WindowsSystem32driversetchosts 파일에 IP와 서버 이름을 입력해
 줍니다. 여기서는 192.168.195.128로 접속할 것이므로 다음처럼 입력했습니다.


 192.168.195.128 plab.net




6. LDAP 정보를 저장하는데 사용할 백엔드(backend) 엔진을 선택합니다. 여기서는 BDB를 사
  용하겠습니다. 선택 후 Next를 누릅니다.




  백엔드 엔진 선택

7. BDB를 선택하면 관리자 계정에 대한 암호를 지정할 수 있습니다. 여기서는 기본 설정을 그대
  로 사용하고 뒤에서 다시 설정하는 법을 함께 보도록 하겠습니다.
BDB 루트 계정 암호 설정

8. 이제 설치 준비가 됐습니다. 선택한 내용을 다시 보여주는데 이상 없으면 Install을 선택해 설
 치합니다.




 설치 준비 화면

9. 설치 중입니다. 마칠 때까지 기다립니다.
파일 설치 화면

10. 설치를 마치면 완료 화면이 나타납니다. Finish를 눌러 설치 마법사를 마칩니다.




  설치 완료 화면



OpenLDAP 설정
먼저 관리자 암호를 만듭니다. OpenLDAP을 설치한 디렉터리에 있는 slappasswd.exe를 명
령 창(command prompt)에서 실행한 후 사용할 암호를 입력하면 그 내용을 암호화해 출력
합니다.
slappasswd.exe 실행 화면


OpenLDAP 설치 디렉터리에서 설정 파일인 slapd.conf를 열고 다음 내용처럼 고칩니다.
suffix와 rootdn에는 OpenLDAP을 설치할 때 지정한 서버 이름을 사용하면 되고 rootpw에
는 slappasswd.exe를 실행해 얻은 암호를 사용합니다. 그 외 굵은 글씨로 표시한 부분에 주
의해서 고치면 됩니다.


    파일 경로: C:Program FilesOpenLDAPslapd.conf
    CD 경로: server programsopenldapconfigslapd.conf


 # BDB Backend configuration file
 # See slapd.conf(5) for details on configuration options.
 # This file should NOT be world readable.
 ucdata-path ./ucdata
 include     ./schema/core.schema
 include     ./schema/cosine.schema
 include     ./schema/nis.schema
 include     ./schema/inetorgperson.schema
 include     ./schema/openldap.schema
 include     ./schema/dyngroup.schema



 pidfile     ./run/slapd.pid
 argsfile    ./run/slapd.args



 # Enable TLS if port is defined for ldaps



 TLSVerifyClient never
 TLSCipherSuite HIGH:MEDIUM:-SSLv2
 TLSCertificateFile ./secure/certs/server.pem
 TLSCertificateKeyFile ./secure/certs/server.pem
 TLSCACertificateFile ./secure/certs/server.pem




 #######################################################################
 # bdb database definitions
 #######################################################################
database     monitor



 database     bdb
 suffix       "dc=plab,dc=net"
 rootdn       "cn=Manager,dc=plab,dc=net"
 # Cleartext passwords, especially for the rootdn, should
 # be avoid.        See slappasswd(8) and slapd.conf(5) for details.
 # Use of strong authentication encouraged.
 rootpw       {SSHA}ybKrchakJBfi5CjxHTq4RGim7iba2LiN


 # The database directory MUST exist prior to running slapd AND
 # should only be accessible by the slapd and slap tools.
 # Mode 700 recommended.
 directory ./data
 dirtyread
 searchstack 20
 # Indices to maintain
 index objectClass                                eq,pres
 index ou,cn,mail,surname,givenname               eq,pres,sub
 index uidNumber,gidNumber,loginShell             eq,pres
 index uid,memberUid                              eq,pres,sub
 index nisMapName,nisMapEntry                     eq,pres,sub


 # Users can authenticate and change their password
 access to attrs=userPassword
          by dn="cn=Manager,dc=plab,dc=net" write
          by self write
          by anonymous auth
          by * none
 # All other attributes are readable to everybody
 access to *
          by dn="cn=Manager,dc=plab,dc=net" write
          by self write
          by * read



LDAP에 정보를 추가하려면 기본 구조부터 만들어야 하는데 계정과 그룹만 관리할 것이므로
ou=People, ou=Groups 두 가지로 구성합니다. 텍스트 파일을 만들고 아래 내용을 추가합니
다. 파일 이름은 무엇이든 괜찮으나 여기서는 OpenLDAP 설치 디렉터리에 base.ldif로 만듭
니다.


    파일 경로: C:Program FilesOpenLDAPbase.ldif
    CD 경로: server programsopenldapconfigbase.ldif


 dn: dc=plab,dc=net
 dc: plab
 objectClass: top
objectClass: domain


 dn:ou=People,dc=plab,dc=net
 objectClass: top
 objectClass: organizationalUnit
 ou: People


 dn:ou=Groups,dc=plab,dc=net
 objectClass: top
 objectClass: organizationalUnit
 ou: Groups



계속 진행하기 전에 먼저 OpenLDAP 서비스를 중지한 후, 명령 창을 열고 OpenLDAP 디렉
터리로 이동한 다음 아래 내용을 입력합니다.


 여기서 잠깐!

 서비스 목록 창을 열려면, 윈도 7에서는 시작 메뉴 → 제어판 → 시스템 및 보안 → 관리 도구 → 서비스를 선택
 하거나 시작 메뉴를 선택한 후 프로그램 및 파일 검색란에 ‘서비스’를 입력하면 검색 결과에 나오므로 간단히 선
 택할 수 있습니다. 윈도 XP에서는 시작 메뉴 → 제어판 → 관리 도구 → 서비스를 선택하면 됩니다. 서비스 창이
 뜨면 OpenLDAP Service 항목을 찾아 중지하면 됩니다.




   slapadd -f slapd.conf –l base.ldif
LDAP 기본 구조 추가


이제 OpenLDAP 서비스를 다시 시작합니다.


OpenLDAP 계정 추가
LDAP 설정을 마쳤으므로 계정 정보를 추가합니다. 계정 정보 관리는 윈도용 LDAP 클라이언
트인 LDAP Admin을 사용하면 간편하게 처리할 수 있습니다.

1. LDAP Admin을 실행합니다. 처음 실행하면 기본 LDAP 브라우저로 설정할 것인지 묻는 창
  이 뜨는데 Do not perform this check in the future을 선택한 후 Yes 또는 No로 선택합
  니다.




  기본 LDAP 브라우저 선택 창

2. LDAP 서버로 연결 설정을 만들기 위해 메뉴에서 Start → Connect를 선택하거나 툴바에서
  Connect 아이콘을 선택합니다.




  Connect 메뉴

3. Connections 창이 열리면 New connection을 더블 클릭하거나 마우스 오른쪽 버튼으로 선
  택한 후 메뉴에서 New를 선택합니다.
새 연결 메뉴

4. Connection properties 창에서는 연결 정보를 설정합니다. 현재는 관리자 계정만 있으므로
 이에 대해 설정합니다.




 Connection properties 창


     Connection name: 설정에 대한 이름으로 적절히 설정합니다. 여기서는 plab.net으로 합니다.
     Host: LDAP 서버 주소입니다. 이전에 설정한 대로 plab.net으로 합니다.
     Port: LDAP 서비스 포트입니다. LDAP 서버 설정과 마찬가지로 기본값 그대로 사용하면 됩니다.
     Base: 기본 DN을 적습니다. 오른쪽에 있는 ‘Fetch DNs’를 선택하면 자동으로 가져 옵니다. 여
      기서는 dc=plab,dc=net 입니다.
     인증 방법: Simple authentication을 선택합니다.
     Username: LDAP 계정입니다. 관리자는 LDAP 설정에서 rootdn 내용을 그대로 적으면 되며 여
      기서는 cn=Manager,dc=plab,dc=net을 적습니다.
     Password: 관리자 계정에 대한 암호입니다.



  설정을 마친 후 Test connection을 선택해 내용이 맞는지 접속 시험으로 확인할 수 있습니
  다. 연결이 정상이면 ‘Connection is successful.’을 표시하는 창을 표시하나 실패하면
  LDAP error 창을 표시합니다. 연결까지 확인했으면 OK를 선택해 저장합니다.
여기서 잠깐!

   LDAP 연결 설정 중 ‘Fetch DNs’이나 Test connection을 선택했을 때 아래와 같은 메시지 창이 뜨며 연결되지
   않는다면 먼저 서비스가 동작 중인지 확인합니다.




   서비스가 정상 동작 중이라면 서버 방화벽 설정(Inbound 규칙)에 OpenLDAP 서비스인 slapd.exe를 추가해 포트
   를 열어 줍니다. 만약 서버가 아닌 다른 PC에서 원격으로 접근한다면 앞에서 이미 설명했듯이 사용하는 PC의
   C:WindowsSystem32driversetchosts 파일에 서버 IP와 서버 이름을 입력해 줍니다.



5. Connections 창에는 방금 설정한 plab.net 접속 설정이 있습니다. 이를 더블 클릭하거나 선
 택 후 OK를 누르면 LDAP 서버에 접속합니다.




 plab.net 접속 설정

6. ou=People을 마우스 오른쪽 버튼으로 선택하고 New → User 메뉴를 선택하면 일반 사용자
 계정을 추가할 수 있습니다.
사용자 계정 추가 메뉴

7. 사용자 생성 창이 뜨면 내용을 추가한 후 OK를 선택해 저장합니다. 여기서는 예로 sandbox
 계정을 만들어 보겠습니다.




 사용자 생성 창


    First name, Initials, Second name: 사용자 이름을 적습니다. 여기서는 first와 second name
     부분에 sand, box로 적습니다.
    Display name: 표시할 이름이며 여기서는 sandbox로 적습니다.
    Username: 계정 이름이며 sandbox로 적습니다.
    Home Directory: 사용자 홈 디렉터리인데 여기서는 별 의미가 없으며 C:로 적습니다.
    Shadow Account: 실제 계정을 만드는 게 아니므로 이 항목을 꼭 선택합니다.
Account 탭에 있는 위 내용만으로 충분하며 나머지 Business, Personal, Membership 탭
 내용은 필요하면 적절히 적으면 됩니다. 단, Business 탭에서 E-Mail Addresses 내용은 이
 후에 설치하는 빌드 서버에서 사용하므로 꼭 적어 줍니다.

8. 계정에 암호를 설정하려면 해당 계정을 마우스 오른쪽 버튼으로 선택하고 Set Password 메
 뉴를 선택하면 됩니다.




 암호 설정 메뉴

9. 암호를 입력하고 암호화 방법은 기본 설정인 SHA1을 그대로 사용하면 됩니다.




 암호 설정 화면

10. 방금 만든 sandbox 계정으로 접속해 보겠습니다. 일반 계정으로 접속할 때는 관리자 계정
  에 대해 설정한 연결 정보에서 Username과 Password만 다릅니다.
일반 계정 연결 설정


    Username:   앞에서     만든     sandbox   계정은       ou=People   아래에   만들었으므로
     uid=sandbox,ou=People,dc=plab,dc=net으로 적습니다.
    Password: sandbox 계정에 대해 설정한 암호를 적습니다.
Session 2. 웹 서버와 데이터베이스

많은 시스템이 전통적인 클라이언트/서버 환경에서 벗어나 웹 환경으로 바뀌었습니다. 별도
클라이언트 프로그램 없이 웹 브라우저만 있으면 어디서든 같은 환경을 간편하게 사용할 수
있고, S/W 업그레이드 역시 개개인이 모두 해야 하는 게 아니라 서버에서만 하면 모든 사용
자가 같은 환경을 쓸 수 있으므로 배포 역시 간편한 웹의 장점 때문입니다.


앞으로 사용할 대부분의 시스템 역시 웹으로 사용합니다. 즉 웹 환경에서 여러 시스템을 운영
할 수 있는 기반이 되는 서버가 필요합니다. 이미 웹 호스팅 서비스를 받고 있거나 웹 서비스
를 운영 중인 서버가 있다면 괜찮지만 그렇지 않으면 직접 서버를 설치해야 합니다. 또한 일
부 시스템에서는 정보를 저장할 데이터베이스도 필요합니다. 여기서는 웹 서버로 Apache, 데
이터베이스로 MySQL을 사용해 직접 설치해 보겠습니다.


미리 준비해야 하는 것들
   Apache
        Apache 웹 서버는 Apache 소트프웨어 재단에서 진행하는 프로젝트 중 하나로 매우 인기 있는
         오픈 소스 웹 서버입니다. 아래 URL에서 받을 수 있으며 여기서는 OpenSSL을 포함한 2.2.21
         버전을 사용합니다.
        다운로드: http://httpd.apache.org/download.cgi
        CD 경로: server programsamhttpd-2.2.21-win32-x86-openssl-0.9.8r.msi
   MySQL
        아래 URL에서 받을 수 있습니다. 여기서는 5.5.19 버전을 사용합니다.
        다운로드: http://www.mysql.com/downloads/mysql/
        CD 경로: server programsammysql-5.5.19-win32.msi



Apache 설치

여기서 잠깐!

윈도 기본 웹 서버인 IIS(Internet Information Services, 인터넷 정보 서비스)를 사용하고 있다면 Apache를 설
치하기 전에 IIS를 중지해야 합니다. 웹 서비스에서 사용하는 포트는 80번이 기본이므로 모든 웹 서버에서 이 포
트를 기본으로 사용합니다. 하지만 같은 포트를 여러 프로그램에서 동시에 사용하면 충돌이 생기므로 함께 사용
할 수 없습니다. 윈도 7에서 IIS는 기본적으로 설치되어 있지 않기 때문에 사용하지 않고 있으면 넘어가도 됩니
다. 하지만 사용한다면 다음과 같이 중지할 수 있습니다.


IIS를 중지하려면, 윈도 7에서는 시작 메뉴 → 제어판 → 시스템 및 보안 → 관리 도구 → IIS(인터넷 정보 서비
스) 관리자 → Default Web Site 선택 후 중지합니다. 또는 시작 메뉴를 선택한 후 프로그램 및 파일 검색란에
‘iis’를 입력하면 검색 결과에 ‘IIS(인터넷 정보 서비스) 관리자’가 나오므로 간단히 선택해 중지할 수 있습니다.
XP에서는 시작 메뉴 → 제어판 → 관리 도구 → 인터넷 정보 서비스 → 로컬 컴퓨터 → 웹 사이트 → 기본 웹
사이트 선택 후 중지하면 됩니다.



1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Next를 선택해 다음으로 진행합니다.
Apache 설치 마법사

2. 라이선스 동의 화면에서는 I accept the terms in the License Agreement를 선택하고
  Next를 누릅니다.




  라이선스 동의 화면

3. Apache 웹 서버에 대한 안내문입니다. 필요하면 읽어 본 후 Next를 선택합니다.
Apache 웹 서버 안내문

4. 서버 정보를 설정합니다. 이전에 OpenLDAP을 설정할 때 사용한 서버 정보를 사용하면 됩니
 다. 여기서는 모두 plab.net으로 입력하겠습니다. 관리자 이메일 역시 사용하는 것으로 바꾸
 면 됩니다. 마지막으로 Apache에서 80번 포트를 사용하도록 for All Users, on Port 80,
 as a Service — Recommended를 선택하고 Next를 누릅니다.




 서버 정보 설정 화면

5. 설치 형태는 Typical로 선택하고 Next를 누릅니다.
설치 형태 선택

6. 설치 디렉터리는 기본 설정을 그대로 사용하면 됩니다.




 설치 디렉터리 지정

7. 설치 준비가 됐습니다. 바꿀 내용이 없으면 Install을 선택해 설치합니다.
설치 준비 화면

8. 설치 중입니다. 마칠 때까지 기다립니다.




 파일 설치 화면

9. 설치를 마치면 완료 화면이 나타납니다. Finish를 눌러 설치 마법사를 마칩니다.
설치 완료 화면



설치를 마치면 트레이에 Apache Service Monitor 아이콘(          )이 생기는데 더블 클릭하면 창
을 열 수 있습니다. 여기서 Apache 웹 서버 서비스 상태를 확인하고 시작, 중지, 재시작할
수도 있습니다.




Apache Service Monitor


웹 브라우저를 실행한 후 http://plab.net으로 접속해 ‘It works!’라고 표시한 화면을 볼 수
있으면 정상입니다.


 여기서 잠깐!

 Apache를 설치한 서버가 아닌 다른 PC에서 서버로 접속할 때 ‘It works!’라고 표시한 화면을 보지 못하면 서
 버 방화벽 설정(Inbound 규칙)에 Apache 서비스인 httpd.exe를 추가해 포트를 열어 줍니다.
마지막으로, httpd.conf 파일에서 다음 내용을 찾아 굵은 글씨로 표시한 내용에 주의해 수정
한 후 Apache 서비스를 다시 시작합니다.


    파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
    CD 경로: server programsamconfighttpd.conf

 ...
 # Supplemental configuration
 #
 # The configuration files in the conf/extra/ directory can be
 # included to add extra features or to modify the default configuration of
 # the server, or you may simply copy their contents here and change as
 # necessary.


 # Server-pool management (MPM specific)
 Include conf/extra/httpd-mpm.conf


 ...


 # Virtual hosts
 Include conf/extra/httpd-vhosts.conf


 ...




Apache와 IIS 함께 쓰기

 여기서 잠깐!

 Apache와 IIS를 함께 쓰지 않으면 다음으로 넘어 가도 됩니다.




Apache와 IIS를 IP 하나로 함께 쓰려면 한 가지 작업을 해야 합니다. 먼저 XP를 사용할 때
부터 설명합니다.


      Windows XP Service Pack 2 Support Tools
           다운로드: http://go.microsoft.com/fwlink/?LinkID=84085


위 URL에서 Windows XP Service Pack 2 Support Tools를 받습니다. 설치 후 시작 메뉴
→ Windows Support Tools → Command Prompt를 선택하고 다음 내용을 입력해 실행합
니다. 여기서 192.168.195.128은 해당 서버 IP입니다.


     httpcfg set iplisten –i 192.168.195.128
윈도 Vista 이상 즉 윈도 Vista, 7, 2008에는 httpcfg.exe를 사용할 수 없으며 대신
netsh.exe를 사용하면 되는데 따로 설치하지 않아도 됩니다. 명령 창에서 다음을 실행합니다.


   netsh http add iplisten ipaddress=20.1.2.110


앞에서 설명한 것처럼 Apache와 IIS는 같은 포트를 사용할 수 없으므로 IIS에서 웹 서비스용
포트를 8000 또는 8080 등으로 바꾸고 다시 실행합니다.


MySQL 설치

1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Next를 선택해 다음으로 진행합니다.




  MySQL 설치 마법사

2. 라이선스 동의 화면에서는 I accept the terms in the License Agreement를 선택하고
  Next를 누릅니다.




  라이선스 동의 화면
3. 설치 형태는 Typical로 선택하고 Next를 누릅니다.




 설치 형태 선택

4. 설치 준비가 됐습니다. 바꿀 내용이 없으면 Install을 선택해 설치합니다.




 설치 준비 화면

5. 설치 중입니다. 마칠 때까지 기다립니다.
파일 설치 화면

6. 설치 마지막 단계에서는 MySQL Enterprise 제품에 대한 안내문이 뜹니다. Next로 넘어가면
  됩니다.




  MySQL Enterprise 안내문

7. 설치를 마치면 완료 화면이 나타납니다. Launch the MySQL Instance Configure Wizard
  를 선택한 상태에서 Finish를 눌러 설치 마법사를 종료하고 MySQL 설정 마법사를 실행합니
  다.
설치 완료 화면

8. 설정 마법사가 나타나면 Next를 눌러 다음으로 진행합니다.




  MySQL 설정 마법사

9. 설정 방법을 선택합니다. 여기서는 Detailed Configuration을 선택하겠습니다.
설정 방법 선택

10. 서버 형태를 선택합니다. 여러 서비스를 사용할 것이므로 Server Machine을 선택합니다.




   서버 형태 선택

11. 데이터베이스는 Multifunctional Database를 선택합니다.
데이터베이스 선택

12. InnoDB 데이터 파일을 둘 위치를 지정합니다. 기본 설정을 사용해도 되지만 여기서는 목록
  에서 MySQL InnoDB Datafiles를 선택했습니다. 필요하면 다른 위치를 지정해도 됩니
  다.




  InnoDB 데이터 파일 위치 지정

13. 데이터베이스에 동시 접속 수를 지정합니다. 많이 지정할수록 서버 성능에 영향을 주므로
  적절히 지정합니다. 여기서는 기본 설정을 그대로 사용합니다.
동시 접속 수 지정

14. 포트 등은 기본 설정을 그대로 사용하면 됩니다. 윈격 PC에서 데이터베이스에 접근하려면
   Add firewall exception for the port를 선택합니다.




   네트워크 설정

15. 기본 문자 집합(character set)은 Best Support For Multilingualism을 선택해 UTF-8로
   지정합니다.
기본 문자 집합 지정

16. 윈도 옵션에서는 기본 설정을 그대로 사용하고 Include Bin Directory in Windows PATH
  를 추가 선택해 실행 경로에 추가합니다.




  윈도 옵션 지정

17. 보안 옵션에서는 관리자 계정(root)에 대한 암호를 설정합니다. Enable root access from
  remote machines를 선택하면 관리자 계정으로 원격 PC에서도 데이터베이스에 접속할 수
  있어 관리하기 편하지만 보안에 주의해야 합니다.
보안 옵션 지정

18. 데이터베이스를 실행할 준비가 됐습니다. Execute를 선택합니다.




  실행 준비 화면

19. 정상적으로 실행됐습니다. Finish를 눌러 설정 마법사를 마칩니다.
실행 완료 화면
Session 3. Mercurial 설치

Mercurial은 분산형 버전 관리 시스템이므로 중앙 집중형 버전 관리 시스템인 Subversion이
나 CVS처럼 중앙 저장소가 따로 없으며 모든 저장소가 독립적이고 동등합니다. 하지만 많은
개발자가 각자 저장소를 만들고 서로 변경 내용을 동기화하며 사용할 때 저장소가 많으면 많
을수록 동기화한 것과 하지 않은 것을 파악하기가 쉽지 않다는 게 문제입니다. 어떤 규칙을
만들지 않으면 변경 내용을 모든 개발자에게 전파하기란 쉽지 않습니다. 이런 이유로
Mercurial과 같은 분산형 버전 관리 시스템이 중앙 집중형 버전 관리 시스템에 비해 관리하
기가 어렵거나 복잡하다고 느낄 수도 있습니다. 하지만 이를 간단히 해결할 수 있는 방법이
있습니다. Subversoin처럼 중앙 저장소로 쓸 저장소를 만들고 모든 개발자가 이 저장소와 동
기화 하도록 하는 겁니다. 그러자면 누구나 손쉽게 접근할 수 있어야 하고 필요에 따라 접근
을 제한할 수도 있어야 할 겁니다. 여기서는 웹 서버를 통해 Mercurial 중앙 저장소를 공유
하는 방법에 대해 살펴보겠습니다.


미리 준비해야 하는 것들
   Python
        Mercurial Python 패키지가 2.7 버전에 맞춰 나와 있으므로 Python 역시 2.7.x 버전을 사용
         해야 합니다. 아래 URL에서 2.7.3 버전 윈도용 x86 MSI 설치 파일을 받으면 됩니다.
        다운로드: http://www.python.org/download/
        CD 경로: server programsmercurialpython-2.7.3.msi
   Mercurial
        웹 서버를 통해 사용할 것이므로 x86 윈도용 Python 2.7 패키지로 받습니다. 여기서는 2.2.3
         버전을 사용합니다.
        다운로드: http://mercurial.selenic.com/downloads/
        CD 경로: server programsmercurialmercurial-2.2.3.win32-py2.7.exe
   mod_wsgi
        Python 웹 프로그램을 웹 서버에서 구동하는데 필요한 것이 wsgi 모듈입니다. mod_wsgi는
         Apache에서 Python 웹 프로그램을 구동할 때 성능을 높일 목적으로 개발한 모듈입니다. 여
         기서는 Apache 2.2, Python 2.7에 대응하는 3.3 버전을 사용합니다.
        다운로드: http://code.google.com/p/modwsgi/wiki/DownloadTheSoftware?tm=2
        CD 경로: server programsmercurialmod_wsgi-win32-ap22py27-3.3.so
   hgweb.cgi
        Mercurial 저장소를 웹으로 공유할 때 필요한 설정 정보입니다.
        다운로드: http://www.selenic.com/hg/file/default/hgweb.cgi
        CD 경로: server programsmercurialconfighgweb.cgi



Python 설치

1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Install for all users를 선택하고 Next를
  누릅니다.
Python 설치 마법사

2. 설치 디렉터리는 기본 설정을 사용합니다. 만약 다른 위치로 바꾼다면 설치 경로에 빈 칸이
 있으면 안 되니 주의합니다.




 설치 디렉터리 지정

3. 설치 항목은 기본 설정을 그대로 사용하면 됩니다. Next를 선택합니다.
설치 항목 지정

4. 설치 중입니다. 마칠 때까지 기다립니다.




 파일 설치 화면

5. 설치를 마치면 완료 화면이 나타납니다. Finish를 눌러 설치 마법사를 마칩니다.
설치 완료 화면



Mercurial Python 패키지 설치

1. 설치 파일을 실행하면 설치 마법사가 나타납니다. 다음을 선택합니다.




 Mercurial Python 패키지 설치 마법사

2. 설치하는데 필요한 Python 버전을 확인하고 설치 위치를 보여 줍니다. 다음을 선택합니다.
Python 설치 확인과 설치 위치 표시 화면

3. 설치 준비가 됐습니다. 다음을 선택해 설치합니다.




 설치 준비 화면

4. 설치 중입니다. 마칠 때까지 기다립니다.
파일 설치 화면

5. 설치를 마치면 완료 화면이 나타납니다. 마침을 선택해 설치 마법사를 마칩니다.




 설치 완료 화면



Mercurial 설정
먼저 시스템 환경 변수 중 Path 정보에 다음 내용을 추가합니다. 추가할 때는 이전 내용 뒤
에 세미콜론(;)을 붙여 내용을 구분합니다.


  C:Python27;C:Python27Scripts
여기서 잠깐!

 환경 변수를 편집하려면, 윈도 7에서는 시작 메뉴 → 프로그램 및 파일 검색에서 ‘환경 변수’를 입력한 후 검
 색 내용에서 ‘계정의 환경 변수 편집’을 선택하면 환경 변수 창이 뜹니다. 또는 제어판 → 시스템 및 보안 →
 시스템 → 고급 시스템 설정 → 환경 변수를 선택합니다. 윈도 XP에서는 내 컴퓨터 아이콘을 마우스 오른쪽
 버튼으로 선택 후 메뉴가 나오면 속성 선택 → 시스템 등록 정보 창에서 고급 탭 선택 → 환경 변수를 선택하
 면 환경 변수 창이 뜹니다. 여기서 시스템 변수 내용 중 Path 정보를 선택하고 편집 버튼을 누르면 됩니다.




Mercurial에서 가장 기본으로 설정해야 할 내용은 사용자 정보입니다. 이 내용은 Mercurial
설정을 저장하는 .hgrc 파일에 적으면 되는데 윈도 탐색기에서는 점(.)으로 시작하는 파일은
만들 수 없으므로 명령 창에서 다음 명령을 입력해 만듭니다. 참고로 사각 괄호([]) 안에 적은
내용은 키보드 입력을 뜻합니다.


   cd %userprofile%
   copy con .hgrc
   [ctrl+z]
   [enter]


위 내용을 입력하면 사용자 홈 디렉터리(윈도 7에서는 C:Users<username>, XP에서는
C:Documents and Settings<username>)에 .hgrc 파일이 생기는데 이 파일을 메모장 등
텍스트 편집기로 열어 다음 내용을 입력한 후 저장하고 닫습니다. 사용자 정보는 쉽게 알아
볼 수 있도록 ‘이름 <이메일>’ 형식으로 적으면 되는데, 여기서는 Mercurial 중앙 저장소를
설정하는 중이므로 관리자 정보를 넣었습니다.


   [ui]
   username = Hg Admin <hg.admin@plab.net>



 여기서 잠깐!

 버전 관리 시스템에서는 무엇을 어떻게 변경했는지 관리하는 것도 중요하지만 누가 바꿨는지도 중요합니다.
 흔히 해당 시스템에 로그인한 계정 정보로 표시하기도 하지만 Mercurial과 같은 분산형 버전 관리 시스템에서
 는 로그인 계정이 중요하지 않습니다. 왜냐하면 자신의 PC에서 만든 저장소에는 로그인 절차가 없으므로 사용
 할 수 없을 뿐더러, 변경한 내용을 다른 저장소로 보낼 수도 있기 때문입니다. 그러므로 변경 내용을 기록할
 때는 로그인 계정 대신 사용자 정보를 사용합니다.




명령 창에서 다음 명령을 실행하고 결과가 No problems detected라고 나오면 정상입니다.
hg debuginstall




Mercurial 설치 확인


저장소를 웹으로 접근할 수 있도록 하려면 몇 가지 설정을 추가로 해야 합니다. 여기서는
C:hgweb 디렉터리를 만들어 관련 설정 파일을 따로 보관하고, 이 디렉터리에 hgweb.cgi
파일을 옮긴 후 굵은 글씨로 표시한 내용에 주의해 다음처럼 바꿉니다.


    파일 경로: C:hgwebhgweb.cgi
    CD 경로: server programsmercurialconfighgweb.cgi



 #!C:/Python27/python.exe
 #
 # An example hgweb CGI script, edit as necessary
 # See also http://mercurial.selenic.com/wiki/PublishingRepositories


 # Path to repo or hgweb config to serve (see 'hg help hgweb')
 config = "C:/hgweb/hgweb.config"


 # Uncomment and adjust if Mercurial is not installed system-wide
 # (consult "installed modules" path from 'hg debuginstall'):
 #import sys; sys.path.insert(0, "/path/to/python/lib")


 # Uncomment to send python tracebacks to the browser if an error occurs:
 #import cgitb; cgitb.enable()


 from mercurial import demandimport; demandimport.enable()
 from mercurial.hgweb import hgweb, wsgicgi
 application = hgweb(config)
 wsgicgi.launch(application)




위 내용 중 config에서 지정한 것처럼 C:hgwebhgweb.config 파일을 만들고 다음처럼 설
정합니다.
       파일 경로: C:hgwebhgweb.config
        CD 경로: server programsmercurialconfighgweb.config

 [web]
 logourl = http://plab.net/hg/
 baseurl = http://plab.net/hg/
 encoding = EUC-KR
 allow_push = *
 push_ssl = false
 style = default
 allow_archive = bz2 gz zip


 [paths]
 / = C:/Repos/hg/*


          logourl: 로고를 선택했을 때 이동할 URL입니다.
          baseurl: 저장소를 접근하는데 사용하는 기본 URL입니다.
          encoding: 웹 브라우저에서 사용하는 문자 인코딩 설정입니다. 기본 설정이 UTF-8이므로 소
           스 코드 파일 인코딩이 UTF-8이면 이 설정은 없어도 됩니다.
          allow_push: 저장소에 변경 내용을 넣을 수 있게 허용할 사용자를 지정합니다. *를 사용하면 누
           구나 넣을 수 있습니다.
          push_ssl: 기본 설정이 true이므로 SSL을 사용하면 이 설정은 없어도 됩니다.
          style: 저장소에 웹 브라우저로 접근할 때 사용할 템플릿을 지정합니다. <Python 설치 디렉터
           리>Libsite-packagesmercurialtemplates 에 있는 디렉터리 이름을 지정하면 됩니다.
          allow_archive: 소스를 압축 파일로 받을 때 허용할 파일 형식을 지정합니다.


[paths]에는         저장소 경로를 지정하는데 다음과 같이 이해할 수 있습니다.


         <baseurl 이후 경로> = <저장소 위치>


위        설정에서는          C:Reposhg       디렉터리에          만든     모든   저장소에   대한   기본   URL이
http://plab.net/hg/가 됩니다. 그러므로 저장소를 C:Reposhgsandbox에 만들면 이 저
장소에 대한 URL은 http://plab.net/hg/sandbox가 됩니다. 이 외 여러 설정에 대한 내용은
아래에서 살펴보시길 바랍니다.


          Mercurial 설정 파일 설명
               URL: http://www.selenic.com/mercurial/hgrc.5.html


그럼 실제 저장소를 만들어 보겠습니다. 설정에서 지정한 것처럼 C:Reposhg 디렉터리를
만들고 명령 창을 열어 이 디렉터리로 이동합니다. 그런 다음 아래 명령을 실행해 sandbox라
는 저장소를 만듭니다.


         hg init sandbox
Apache 설정
Mercurial 저장소는 웹으로 접근할 수 있도록 설정했지만 웹 서비스를 운영할 수 있도록 해
주는 웹 서버에서 접근을 허용하지 않으면 아무런 쓸모가 없습니다. 지금부터는 Mercurial
을 웹 환경에서 쓸 수 있도록 설정합니다.


먼저 wsgi 모듈을 설정합니다. mod_wsgi-win32-ap22py27-3.3.so 파일을 Apache 설치
디렉터리 아래 modules 디렉터리에 복사합니다. 설치 경로를 바꾸지 않았으면 C:Program
FilesApache Software FoundationApache2.2modules입니다. 그런 다음 httpd.conf 파일을
메모장 등 텍스트 편집기로 열고 다음 내용 중 굵은 글씨로 표시한 내용을 추가합니다.


    파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
    CD 경로: server programsamconfighttpd.conf

 #
 # Dynamic Shared Object (DSO) Support
 #
 ...
 #LoadModule version_module modules/mod_version.so
 #LoadModule vhost_alias_module modules/mod_vhost_alias.so
 LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so




이번에는 Mercurial 저장소에 접근할 수 있게 httpd-vhosts.conf 파일을 열고 다음 내용 중
굵은 글씨로 표시한 내용을 추가합니다.


    파일 경로: C:Program FilesApache Software FoundationApache2.2confextrahttpd-vhosts.conf
    CD 경로: server programsamconfighttpd-vhosts.conf

 ...
 #
 # VirtualHost example:
 # Almost any Apache directive may go into a VirtualHost container.
 # The first VirtualHost section is used for all requests that do not
 # match a ServerName or ServerAlias in any <VirtualHost> block.
 #
 <VirtualHost *:80>
       ScriptAlias /hg "C:/hgweb/hgweb.cgi"
       <Directory "C:/hgweb">
           Order allow,deny
           Allow from all
           AllowOverride All
           Options ExecCGI
           AddHandler cgi-script .cgi
</Directory>
 </VirtualHost>
 ...



이제 웹으로 접속 확인을 해보겠습니다. 먼저 Apache 서비스를 다시 실행해 변경 내용을 적
용한 다음 웹 브라우저로 http://plab.net/hg에 접속합니다. 저장소 목록에 sandbox가 나오
면 정상입니다.




Mercurial 저장소


현재는 인증 절차가 없어 누구나 접속해 내용을 보거나 변경 내용을 서버에 반영할 수 있으므
로 처음 설치한 OpenLDAP을 사용해 인증하도록 바꿉니다. httpd.conf 파일에서 다음 내용
처럼 두 모듈을 찾아 주석을 해제합니다.


    파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
    CD 경로: server programsamconfighttpd.conf

 ...
 LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
 ...
 LoadModule ldap_module modules/mod_ldap.so
 ...



httpd-vhosts.conf 파일에 인증 과정을 거치도록 굵은 글씨로 표시한 내용을 추가합니다.


    파일 경로: C:Program FilesApache Software FoundationApache2.2confextrahttpd-vhosts.conf
    CD 경로: server programsamconfighttpd-vhosts.conf


 ...
 #
 # VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
 # The first VirtualHost section is used for all requests that do not
 # match a ServerName or ServerAlias in any <VirtualHost> block.
 #
 <VirtualHost *:80>
       ScriptAlias /hg "C:/hgweb/hgweb.cgi"
       <Directory "C:/hgweb">
          Order allow,deny
          Allow from all
          AllowOverride All
          Options ExecCGI
          AddHandler cgi-script .cgi
       </Directory>


       <Location "/hg">
          AuthName "PLAB Hg Repositories"
          AuthType Basic
          AuthBasicProvider ldap
          AuthzLDAPAuthoritative off
          AuthLDAPURL "ldap://localhost/ou=People,dc=plab,dc=net?uid?sub?(objectClass=*)"
          Require valid-user
       </Location>
 </VirtualHost>
 ...




Apache 서비스를 재실행한 후 다시 http://plab.net/hg에 접속하면 다음처럼 인증 확인 창
이 뜹니다.




인증 확인 창


OpenLDAP 계정 생성 과정에서 미리 만든 sandbox 계정을 입력해 봅니다. 정상적으로 인
증을 마치면 이전과 마찬가지로 Mercurial 저장소 목록을 볼 수 있습니다.
Session 4. Redmine 설치

이전 세션에서는 Mercurial 중앙 저장소를 웹으로 공유할 수 있도록 설정을 마쳤습니다. 지
금부터는 버전 관리 시스템과 함께 단짝처럼 사용할 프로젝트 관리 시스템을 설치해 보겠습
니다.


미리 준비해야 하는 것들
   Ruby
         프로젝트 관리 시스템으로 사용하는 Redmine을 사용하려면 Ruby를 설치해야 합니다. 현재
          Redmine 최신 버전인 2.0.3에서는 Ruby 1.8.7 버전 이상을 사용해야 합니다. 현재 Ruby 최
          신 버전인 1.9.3-p194에는 thin 서버와 함께 쓰는데 문제가 있으므로 1.9.3-p125 버전을
          사용합니다. 아래 다운로드 링크에서 Archives를 선택하면 찾을 수 있습니다.
         다운로드: http://rubyinstaller.org/downloads/
         CD 경로: server programsredminerubyinstaller-1.9.3-p125.exe
   DevKit
         Ruby에서 사용하는 여러 확장 모듈 중 일부는 윈도용 바이너리 파일이 없으므로 소스 코드
          를 사용해 직접 바이너리 파일을 만들어야 합니다. 이를 도와주는 개발 툴입니다.
         다운로드: http://rubyinstaller.org/downloads/
         CD 경로: server programsredmineDevKit-tdm-32-4.5.2-20111229-1559-sfx.exe
   ImageMagick
         Redmine에서 Gantt 차트를 png 파일로 저장할 때 필요합니다. 필수는 아니므로 사용하지 않
          으면 설치하지 않아도 됩니다.
         다운로드: http://www.imagemagick.org/script/binary-releases.php#windows
         CD 경로: server programsredmineImageMagick-6.7.7-6-Q16-windows-dll.exe
   Redmine
         현재 최신 버전인 2.0.3을 사용합니다.
         다운로드: http://rubyforge.org/frs/?group_id=1850
         CD 경로: server programsredmineredmine-2.0.3.zip
   MySQL
         Redmine에서 사용할 DB이며 5.0 이상을 권장합니다. 아직 설치하지 않았으면 ‘Session 2.
          웹 서버와 데이터베이스’ 내용을 참고해 다음 내용을 진행하기 전에 설치합니다.
   MySQL Connector
         Redmine에서 MySQL DB를 사용할 때 필요합니다.
         다운로드: http://www.mysql.com/downloads/connector/c/
         CD 경로: server programsredminemysql-connector-c-noinstall-6.0.2-win32.zip
   WinServ
         Redmine을 윈도 서비스로 등록해 사용하는데 필요합니다.
         CD 경로: server programsredminewinserv_1.11.zip



Ruby 설치
1. 설치 파일을 실행하면 라이선스 동의 화면이 나타납니다. I accept the License를 선택하고
 Next를 누릅니다.




 라이선스 동의 화면

2. 설치 디렉터리를 기본 설정을 그대로 사용합니다. 바꾸더라도 경로에 빈 칸을 포함하지 않도
 록 주의해야 합니다. 선택 내용을 모두 선택한 후 Install을 누릅니다.




 설치 디렉터리 지정

3. 설치 중입니다. 마칠 때까지 기다립니다.
파일 설치 화면

4. 설치를 마치면 설치 완료 화면이 나타납니다. Finish를 선택해 설치 마법사를 마칩니다.




 설치 완료 화면



DevKit 설치

1. 파일을 실행하면 압축을 풀어 줄 디렉터리를 묻습니다. 여기서는 C:DevKit으로 합니다.

2. 명령 창에서 파일을 설치한 곳으로 이동한 후 다음 명령을 실행합니다. 설치한 Ruby를 아래
 처럼 인식하면 정상입니다

  ruby dk.rb init
DevKit 초기화

3. 명령 창에서 다음 명령을 실행해 설치합니다.

   ruby dk.rb install




   DevKit 설치



ImageMagick 설치

1. 설치 파일을 실행한 후 Next 버튼을 눌러 다음으로 계속 진행하며 설치 디렉터리 역시 기본
  설정을 사용하면 됩니다.

2. 추가 항목 설정에서 ‘Add application directory to your system path’와 ‘Install
  development headers and libraries for C and C++’ 항목을 반드시 선택합니다.
ImageMagick 추가 항목 설정

3. 이후 과정은 Install 버튼을 눌러 설치를 한 후 다음으로 진행해 설치를 마치면 됩니다.


Redmine 설치
Redmine을 설치할 곳에 압축 파일을 풀어 줍니다. 여기서는 C:redmine에 설치합니다.
1.4.0 버전부터는 Ruby 확장 모듈 사이에 의존성을 관리하기 위해 Bundler를 사용하므로
먼저 설치해야 합니다(Ruby를 새로 설치할 때마다 다시 설치해야 합니다). 명령 창을 열고
C:redmine으로 디렉터리를 옮긴 후 다음 명령을 실행합니다(Redmine 설치 중 명령 창에서
실행하는 명령은 redmine 루트인 C:redmine에서 합니다).


  gem install bundler


ImageMagick을 사용한다면 명령 창에서 다음을 실행해 ImageMagick을 설치한 경로 정보
를 설정합니다.


  set CPATH=C:Program FilesImageMagick-6.7.7-Q16include
  set LIBRARY_PATH=C:Program FilesImageMagick-6.7.7-Q16lib


명령 창에서 다음을 실행해 redmine을 설치합니다.


  bundle install --without development test postgresql sqlite


설치 결과는 다음과 같습니다.
Redmine 설치 결과


Redmine과 함께 사용할 웹 서버인 thin을 설치합니다. 명령 창에서 다음을 실행합니다.


   gem install eventmachine --pre
   gem install thin


명령 창에서 다음 명령을 실행해 DB를 만듭니다.                      mysql>   부분은 첫 번째 명령을 실행해
MySQL에    로그인하면        나타나는         프롬프트이므로      입력하지      않습니다.        실행하면   이름이
redmine인 DB와 이름이 redmine인 계정을 만들고 해당 DB에 대한 사용 권한을 이 계정에
부여합니다. 입력할 때          my_password   부분은 계정에 대한 암호이므로 적절히 바꿉니다.


   mysql –u root –p
   mysql> create database redmine character set utf8;
   mysql> create user ‘redmine’@‘localhost’ identified by ‘my_password’;
   mysql> grant all privileges on redmine.* to ‘redmine’@‘localhost’;
여기서 잠깐!

 만약 MySQL 버전이 여기서 사용한 것과 달리 5.0.2 이전이면 create database 내용까지만 실행하고 이후 내
 용 대신 다음 명령을 실행합니다.


 mysql> grant all privileges on redmine.* to ‘redmine’@’localhost’ identified by ‘my_password’;




방금 만든 DB에 접속할 수 있도록 정보를 설정합니다. C:redmineconfig 디렉터리에 있는
database.yml.example 파일을 복사해 database.yml 파일을 만들고 production 부분을 찾아
다음처럼 수정합니다. Ruby 1.9를 사용하므로 adapter 내용이 mysql2인 것에 주의하고,
username과 password에는 redmine DB에 대해 사용 권한을 부여한 계정 정보를 적습니다.


    파일 경로: C:redmineconfigdatabase.yml
    CD 경로: server programsredmineconfigdatabase.yml

 production:
     adapter: mysql2
     database: redmine
     host: localhost
     username: redmine
     password: my_password
     encoding: utf8




 여기서 잠깐!

 만약 MySQL 포트 정보를 기본인 3306 대신 다른 것으로 사용한다면 위 DB 설정에 port: 5678 과 같이 설
 정을 추가하면 됩니다.




명령     창에서       다음을       실행해       Session     store    secret    정보를       만듭니다.         실행    후에는
C:redmineconfiginitializerssecret_token.rb 파일이 만들어 진 것을 확인합니다.


     rake generate_secret_token


앞에서 만든 DB에는 아직 아무런 내용도 없으므로 명령 창에서 다음을 실행해 DB에 테이
블과 관리자 계정 정보를 추가합니다.


     set RAILS_ENV=production
     rake db:migrate
여기서 잠깐!

 위 명령을 실행하기 전에 mysql-connector-c-noinstall-6.0.2-win32.zip 파일 압축을 풀고 liblibmysql.dll
 파일을 C:Ruby193bin 디렉터리에 넣습니다. 그렇지 않으면 아래와 같은 오류 창이 뜹니다.




이번에는 DB에 기본 정보를 추가합니다. 하지 않아도 쓰는데 문제는 없지만 대신 필요한 기
본 정보를 모두 직접 입력해야 하므로 꼭 하길 권합니다. 명령 창을 닫지 않고 이어서 실행하
는 중이면 RAILS_ENV 부분은 다시 실행하지 않아도 됩니다.


   set RAILS_ENV=production
   rake redmine:load_default_data


명령을 실행하면 다음과 같이 추가할 기본 정보에 대한 언어를 묻습니다. 쉽게 설명하면 이슈
상태, 우선 순위 등 기본으로 추가하는 정보를 어느 나라 말로 번역한 것으로 사용할지 선택
하는 겁니다. 한국어로 번역한 내용을 사용하려면 ko를 입력한 후 엔터를 누르면 됩니다. 주
의할 점은 메뉴를 한글화하는 것과는 관계없습니다. 메뉴에 대해 표시할 언어는 Redmine
설정 메뉴에서 합니다. 여기서는 기본 설정인 영문 내용을 그대로 사용하겠습니다. 엔터를
누릅니다.




추가할 기본 정보 언어 선택


이제 기본 설치는 모두 마쳤으므로 접속 확인을 해 보겠습니다. 명령 창에서 다음 내용을
실행한 후 웹 브라우저로 접속해 봅니다. 기본 포트는 3000번이므로 http://plab.net:3000으
로 접속하면 됩니다. 관리자 계정은 이름 admin, 암호도 admin이 기본 설정입니다. 만약 접
속할 수 없으면 방화벽 설정을 확인합니다.


   ruby script/rails server webrick –e production


다음과 같은 첫 화면이 나오면 정상입니다. 접속을 확인한 후에는 명령 창에서 ctrl+c 키를
눌러 서비스를 중지합니다.
Redmine 초기 화면


Webrick은 시험용으로 적당할 뿐 실제 서비스를 하기엔 성능이 좋지 않으므로 웹 서버를
사용해야 합니다. 여기서는 앞에서 설치한 thin을 윈도 서비스로 등록해 사용합니다. 계속하
기 전에 먼저 C:redmineconfigenvironment.rb 파일 아래에 다음 내용을 추가합니다. 이
내용을 빠뜨리면 CSS, 자바 스크립트 등이 제대로 동작하지 않습니다.


   Redmine::Utils::relative_url_root = "/redmine"


Winserv_1.11.zip에는 winserv.exe가 있습니다. 이 프로그램을 C:Ruby193bin에 복사하고
명령 창에서 다음을 입력합니다(winserv에서 /redmine까지가 한 줄입니다.).


   "C:Ruby193binwinserv.exe"        install         "redmine1"          -start        auto
   "C:Ruby193binruby.exe"   "C:Ruby193binthin"   start   -p   3001   -e   production   -c
   "C:redmine" --prefix /redmine


   "C:Ruby193binwinserv.exe"        install         "redmine2"          -start        auto
   "C:Ruby193binruby.exe"   "C:Ruby193binthin"   start   -p   3002   -e   production   -c
   "C:redmine" --prefix /redmine


   net start redmine1
   net start redmine2



 여기서 잠깐!

 등록한 서비스를 삭제하려면 "C:Ruby193binwinserv.exe" uninstall "redmine1" 처럼 입력하면 됩니다.




포트는 3001과 3002를 각각 사용하고 접두어로 redmine을 사용하므로 접속 주소는
http://plab.net:3001/redmine, http://plab.net:3002/redmine이 됩니다. 매번 접속 주소에 포
트 번호를 넣어야 하면 꽤 불편하므로 접속 주소를 좀 더 간편하게 만들어 보겠습니다.
httpd.conf 파일에서 다음 내용처럼 해당 모듈 정보를 찾아 주석을 해제합니다.
    파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
     CD 경로: server programsamconfighttpd.conf

 ...
 LoadModule proxy_module modules/mod_proxy.so
 ...
 LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
 ...
 LoadModule proxy_http_module modules/mod_proxy_http.so
 ...



그런 다음 httpd.conf 파일 아래에 다음 내용을 추가합니다.


     파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
     CD 경로: server programsamconfighttpd.conf

 <IfModule proxy_balancer_module>
     ProxyPass /redmine balancer://redmine_cluster
     ProxyPassReverse /redmine balancer://redmine_cluster


     <Proxy balancer://redmine_cluster>
        BalancerMember http://127.0.0.1:3001/redmine
        BalancerMember http://127.0.0.1:3002/redmine
     </Proxy>
 </IfModule>



이제 Apache 서비스를 다시 실행하면 http://plab.net/redmine으로 접속할 수 있습니다.


Redmine 인증 설정
설치를 마친 현재 상태 상태에서는 Redmine 자체 인증을 사용하므로 OpenLDAP으로 인증
을 사용하도록 바꾸겠습니다. Redmine에 접속한 후 관리자 계정으로 로그인합니다. 이전에
언급한 대로 관리자 계정 이름은 admin, 암호도 admin이 기본 설정입니다.


1. 로그인 후 첫 화면에서 Administration → LDAP authentication 메뉴를 선택합니다.




     Administration 메뉴
2. Authentication modes 화면이 나오면 New authentication mode를 선택합니다.




  New authentication mode 메뉴

3. 각 항목은 다음처럼 설정한 후 Create를 누릅니다.




  LDAP 설정


     Name: LDAP 인증 설정에 대한 이름을 적절히 지정합니다. 여기서는 LDAP으로 했습니다.
     Host: LDAP 서버 주소입니다. 여기서는 같은 서버에 있으므로 localhost로 합니다.
     Port: 여기서는 기본 포트인 389를 사용하며 LDAPS는 선택하지 않습니다.
     Base DN: 기본 DN입니다. 여기서는 dc=plab,dc=net을 적습니다.
     Login: 로그인에 사용할 정보입니다. 여기서는 uid를 적습니다.

4. Administration → Settings 메뉴를 선택한 후 Authentication 탭을 선택합니다. 각 내용을
  다음처럼 설정한 후 Save를 누릅니다.
Authentication 탭 설정


         Authentication required: Redmine에 기록한 여러 내용을 로그인해야 볼 수 있게 하려면 선택
          합니다. 여기서는 선택합니다.
         Autologin: 자동 로그인 기능입니다. 여기서는 disabled로 선택합니다.
         Self-registration: 사용자 계정을 관리자 인증 없이 자동으로 등록할 것인지 설정합니다. 여기
          서는 LDAP 인증을 사용하므로 manual account activation을 선택합니다.
         Lost password: 암호 찾기 기능입니다. 여기서는 LDAP 인증을 사용하므로 해제합니다.
         Allow OpenID login and registration: OpenID 인증을 사용할 수 있습니다. 여기서는 사용하지
          않으므로 해제합니다.


5. 사용자가 계정을 등록하거나 관리자가 승인했을 때 서로에게 이메일로 통보할 수 있도록
    설정합니다. C:redmineconfig 디렉터리에 있는 configuration.yml.example을 복사해
    configuration.yml 파일을 만들고 다음 부분을 찾아 굵은 글씨로 표시한 부분을 적절히
    고칩니다.


       파일 경로: C:redmineconfigconfiguration.yml

# default configuration options for all environments
default:
    # Outgoing emails configuration (see examples above)
    email_delivery:
         delivery_method: :smtp
         smtp_settings:
            address: smtp.example.net
            port: 25
            domain: plab.net
            authentication: :login
            user_name: account
            password: password



         address: smtp 서버 주소입니다.
     port: smtp 서버 포트입니다.
          user_name: smtp 서버 메일 계정입니다.
          password: smtp 서버 메일 계정에 대한 암호입니다.
          domain: 메일 계정에 대한 도메인 정보입니다.



     여기서는 smtp 서버를 gmail로 설정하겠습니다. 아래 내용에서 user_name과 password만
     각자 계정 정보로 고치면 됩니다. 설정을 바꾼 후에는 Redmine 서비스를 모두 중지 후 다
     시 시작해야 합니다.

        파일 경로: C:redmineconfigconfiguration.yml
        CD 경로: server programsredmineconfigconfiguration.yml

 # default configuration options for all environments
 default:
     # Outgoing emails configuration (see examples above)
     email_delivery:
          delivery_method: :smtp
          smtp_settings:
             enable_starttls_auto: true
             address: smtp.gmail.com
             port: 587
             domain: smtp.gmail.com
             authentication: :plain
             user_name: account@gmail.com
             password: password




6. 메일 설정을 마친 후에는 Administration → Settings 메뉴를 선택한 후 Email notification
     탭을 선택해 메일 발송에 대한 추가 설정을 합니다.
          Emission email address: 메일을 보낼 때 표시할 주소입니다.
          Plain text mail (no HTML): 메일을 HTML이 아닌 일반 텍스트로 보내려면 선택합니다.
          Default notification option: 언제 메일을 보낼지 선택합니다.
          Select actions for which email notification should be sent: Default notification option에
           대한 세부 내용입니다. 어떤 부분이 바뀔 때 메일을 보낼지 선택합니다.
          Emails header, footer: 메일 내용에 머리말과 꼬리말을 추가할 수 있습니다.


7. 마지막으로 관리자가 메일 수신을 할 수 있도록 계정 정보를 수정합니다. Redmine 화면
     오른쪽 위에서 My account 메뉴를 선택하면 현재 로그인한 자기 계정 정보를 수정할 수
     있습니다. Information 내용에서 Email 정보를 정확히 입력하고 그 외 정보도 필요하면
     적절히 바꿉니다.
My account 메뉴



계정 추가
인증 설정 과정을 모두 마쳤으므로 이제 계정을 추가하는 방법에 대해 알아보겠습니다.


1. 사용자는 항상 Redmine 시스템에 접속해 계정을 추가합니다. http://plab.net/redmine에
  접속한 후 화면 오른쪽 위에 있는 등록을 선택합니다.




  Redmine 계정 등록 화면


     로그인: 로그인 계정 이름을 적습니다. 여기서는 sandbox로 계정을 만들겠습니다.
     비밀번호, 비밀번호 확인: Redmine 자체 인증을 사용할 때 이 암호를 사용합니다. 여기서는
      LDAP 인증을 하므로 실제 사용하지 않지만 계정을 등록하기 위해 형식적으로 적습니다.
     이름, 성: 사용자 성과 이름을 나눠 적습니다. 여기서는 sand, box로 나눠 적겠습니다.
     메일: 사용자 이메일 정보를 적습니다. 이 메일 계정으로 메일 수신을 하므로 정확히 적습니다.
     언어: 메뉴를 표시할 언어입니다. 여기서는 English를 쓰겠습니다.
2. 사용자가 계정을 등록하면 관리자 승인을 기다리는 상태가 되며, 관리자는 사용자가 계정을
 등록했다는 내용으로 메일을 받게 됩니다. 관리자는 Redmine에 로그인 후 Administration
 → Users 메뉴를 선택하고 Filters에서 Status를 registered로 선택하면 현재 등록 후 승인
 을 기다리는 계정을 볼 수 있습니다.




 계정 목록

3. Users 메뉴에서 등록 대기 중인 계정 이름을 선택하면 상세 내용을 볼 수 있습니다. 이전에
 인증 시스템을 구성하면서 LDAP 계정을 추가한 것을 참고해, 등록한 정보대로 LDAP에 실제
 계정을 추가합니다. LDAP 계정을 추가할 때 암호는 임의로 설정하고, 사용자가 다시 변경하
 도록 계정을 승인한 후에 알려주면 됩니다. 여기서는 이전에 추가해 둔 sandbox 계정을 사
 용하므로 다시 추가하지 않아도 됩니다.

4. LDAP에 계정을 추가했으면 이제 계정을 사용할 수 있도록 승인합니다. 승인 대기 중인 계정
 정보를 살펴보면 Authentication mode가 있는데 기본 설정은 Internal입니다. 하지만
 Redmine 자체 인증이 아닌 LDAP 인증을 사용하므로 Authentication mode를 Internal이
 아닌, 앞에서 LDAP 인증 설정을 추가하면서 지정한 이름을 선택하면 됩니다. 여기서는
 LDAP이 됩니다.




 계정 정보

5. 인증 설정 후에는 Save를 선택해 저장하고 화면 오른쪽 위에 있는 Activate 메뉴를 선택해
 승인하면 됩니다. 다시 Administration → Users 메뉴를 선택해 보면 sandbox 계정이 활성
 화된 것을 볼 수 있습니다.
활성화 계정 목록


이 상태에서 현재 로그인한 관리자 계정을 로그오프하고 방금 만든 sandbox 계정으로 로그
인하면 정상적으로 동작하는 것을 확인할 수 있습니다.




sandbox 계정 로그인 화면
Session 5. CI 서버 설치

저장소에 추가한 변경 내용을 항상 자동으로 통합해 빌드해 주는 CI 서버를 설치해 보겠습니
다.


미리 준비해야 하는 것들
      NAnt
             C++, C#용 빌드 스크립트를 만드는 툴입니다. 여기서는 0.92 버전을 사용하며 미리 빌드해
              둔 실행 파일 패키지인 nant-0.92-bin.zip 파일을 받으면 됩니다.
             다운로드: http://sourceforge.net/projects/nant/files/nant/0.92/
             CD 경로: server programsjenkinsnant-0.92-bin.zip
      Visual Studio
             여기서는 Visual Studio 2010을 사용해 빌드하므로 미리 설치해 둬야 합니다만 과정은 따로 설
              명하지 않습니다.
      Jenkins
             CI 서버입니다. 여기서는 현재 최신 버전인 1.472, 윈도용 패키지를 사용합니다.
             다운로드: http://jenkins-ci.org/
             CD 경로: server programsjenkinsjenkins-1.472.zip



NAnt 설치
별도 설치 과정 없이 압축 파일 내용만 풀어 주면 됩니다. 다만 모든 환경을 공통으로 맞추기
위해 C:nant에 내용을 풀어 줍니다. 그런 후 명령 창에서도 쉽게 실행할 수 있도록 시스템
환경 변수 Path에 C:nantbin을 추가합니다.


Jenkins 설치

1. zip 파일 압축을 푼 뒤 setup.exe를 실행하면 설치 마법사가 나타납니다. Next를 선택합니
     다.
Jenkins 설치 마법사
설치 디렉터리는 기본 설정을 사용하고 Next를 선택합니다.




설치 디렉터리 지정
설치 디렉터리 지정

2. 설치 준비가 되면 Install을 선택합니다.




 설치 준비 화면

3. 설치 중입니다. 완료될 때까지 기다립니다.
파일 설치 화면

4. 설치를 마치면 설치 완료 화면이 나타납니다. Finish를 선택해 닫습니다.




 설치 완료 화면




 설치를 마치면 윈도 서비스까지 자동으로 등록해 실행합니다. 기본 포트는 8080을 사용하므
 로 http://plab.net:8080으로 접속해 첫 화면이 나타나면 정상입니다.
Jenkins 첫 화면

5. Apache 웹 서버를 통해 접속하도록 http.conf 파일에서 다음 내용을 찾아 주석을 해제 합니
     다. 이전에 Redmine 설치 과정을 진행했으면 이미 해제한 상태입니다.

     파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
     CD 경로: server programsamconfighttpd.conf

 ...
 LoadModule proxy_module modules/mod_proxy.so
 ...
 LoadModule proxy_http_module modules/mod_proxy_http.so
 ...




     httpd.conf 파일에 다음 내용을 추가합니다.

     파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf
     CD 경로: server programsamconfighttpd.conf

 ProxyRequests Off
 <Proxy http://127.0.0.1:8080/jenkins*>
     Order deny,allow
     Allow from all
 </Proxy>
 ProxyPass /jenkins http://127.0.0.1:8080/jenkins
 ProxyPassReverse /jenkins http://127.0.0.1:8080/jenkins




6. Jenkins 설치 디렉터리에 있는 jenkins.xml 파일 내용 중 <arguments> 항목을 찾아 다음처
     럼 --prefix=/jenkins를 추가합니다.

     파일 경로: C:Program FilesJenkinsjenkins.xml
     CD 경로: server programsjenkinsconfigjenkins.xml
<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle
 -jar "%BASE%jenkins.war" --httpPort=8080 --prefix=/jenkins</arguments>




7. Jenkins와 Apache 웹 서버를 모두 중지했다 새로 시작하면 http://plab.net/jenkins로 접
  속할 수 있습니다.


Jenkins 설정
웹 브라우저로 Jenkins에 접속 후 Jenkins 관리 → 시스템 설정 메뉴에 접속합니다. 기본적인
설정은 모두 이 메뉴에서 할 수 있습니다.


먼저 빌드 결과를 메일로 받을 수 있도록 설정해 보겠습니다. 시스템 설정 메뉴 내용 중 가장
아래에 E-mail로 알려줌 항목을 설정하면 됩니다. SMTP 서버를 사용할 때 인증이 필요하
면 고급 버튼을 눌러 나오는 Use SMTP Authentication을 선택해 추가 정보를 입력하면 됩
니다. 만약 gmail을 사용한다면 다음처럼 설정 후 저장 버튼을 누르면 됩니다.




메일 알림 설정


     SMTP 서버: smtp.gmail.com
     Sender E-mail Address: @gmail.com을 포함한 gmail 계정
     Use SMTP Authentication: 선택
     사용자명: @gmail.com을 포함한 gmail 계정
     SSL 사용: 선택
     SMTP Port: 465


Jenkins 설치를 마치면 접근 권한 설정이 전혀 안 되어 있어 누구나 설정 내용을 쉽게 바꿀
수 있으므로 권한 설정을 합니다. 계정 관리에는 다른 시스템과 마찬가지로 LDAP을 사용합
니다. 그런데 각 계정에 대해 Jenkins에서 일일이 권한을 설정하려면 상당히 번거롭습니다.
하지만 Jenkins에서는 LDAP에 있는 그룹 정보를 사용해 매우 간편하게 처리할 수 있습니
다.


1. LDAP Admin을 실행해 이전에 만든 plab.net으로 접속합니다.




     LDAP Admin 접속 화면

2. 앞서 sandbox 계정을 만들 때처럼 시스템 관리자로 쓸 계정을 만듭니다. 여기서는 admin으
     로 만들겠습니다.




     admin 계정 추가

3. 관리자 계정과 일반 개발자 계정을 관리할 그룹을 만듭니다. 여기서는 관리자 그룹을
jenkinsadmins, 일반 개발자 그룹을 jenkinsdevs로 만듭니다. LDAP에 그룹을 만들려면
 LADP Admin 화면 왼쪽 목록에서 ou=Groups를 선택하고 마우스 오른쪽 버튼을 눌러 New
 → Group을 선택합니다.




 LDAP 그룹 만들기


 Create Group 창이 뜨면 Group name에 그룹 이름, Description에 설명을 적고 Add 버튼
 으로 그룹에 포함할 계정을 추가합니다. 그룹을 만든 후에 추가하려면 해당 그룹을 선택한 후
 Propreties 메뉴를 실행해 계정을 추가하면 됩니다.




 jenkinsadmins 그룹 추가

4. 일반 개발자 그룹도 마찬가지 과정으로 만듭니다. 여기서는 멤버로 sandbox 계정을 추가했
습니다.




  jenkinsdevs 그룹 추가

5. 웹 브라우저로 Jenkins에 접속 후 Jenkins 관리 → 시스템 설정 메뉴에서 Enable security
  를 선택하면 보안 설정이 나타납니다.




  Jenkins 보안 설정 활성화

6. Access Control – Security Realm에서 LDAP을 선택하고 고급 버튼을 눌러 다음처럼 설정
  합니다.
LDAP 설정



     서버: localhost
     root DN: dc=plab,dc=net
     User search filter: uid={0}

7. Access Control – Authorization에서 Matrix-based security나 Project-based Matrix
  Authorization Strategy를 선택합니다. 둘 모두 그룹, 계정별 권한을 설정할 수 있지만
  Project-based는 여기서 하는 기본 설정을 바탕으로 프로젝트별로 권한을 더 추가할 수 있
  습니다(기본으로 설정한 권한을 해제하지는 못합니다). 여기서는 Project-based Matrix
  Authorization Strategy를 선택합니다만 모든 프로젝트에 대해 동일한 권한을 설정한다면
  Matrix-based security가 더 간편합니다.




  Authorization 설정

8. User/group to add에 앞에서 만든 LDAP 그룹을 적습니다. ROLE_을 접두어로 붙이고 그
  룹 이름을 모두 대문자로 쓰면 됩니다. 그룹을 추가한 후에는 각 그룹과 계정에 대한 권한을
  설정합니다. 여기서는 관리자 그룹에 모든 권한을 주고, 개발자 그룹은 시스템에 접속해 내용
  만 볼 수 있지만 빌드 설정을 생성, 변경, 삭제는 못하며 빌드를 직접 실행하는 것도 못 하도
  록 했습니다.
Authorization 설정


   Anonymous: 모든 권한 해제
   ROLE_JENKINSADMINS: 모든 권한 설정
   ROLE_JENKINSDEVS: Overall Read, Job Read, View Read 설정
Track 3. 파워업 유틸리티 맛보기
Session 1. 버전 관리 시스템


기본 개념
Mercurial은 분산형 버전 관리 시스템으로 중앙 집중형 버전 관리 시스템과 구조가 다르므
로 기본적으로 알고 있어야 할 개념만 간단히 설명합니다. 더 자세한 내용은 해당 부분에서
추가로 더 설명합니다.




버전 관리 시스템에서는 변경 내용을 추적하고 관리하기 위해 특별한 영역을 사용하는데 이
를 저장소(repository)라고 합니다. 즉 버전 관리를 시작하려면 항상 저장소를 먼저 만들어
야 합니다. 위 그림을 보면 각 저장소가 두 부분으로 나뉘어 있는데 working directory는
개발자가 코드 등을 변경하며 작업을 하는 공간이고, 이런 변경 내용을 기록해 Mercurial에
서 관리하기 위해 사용하는 공간이 바로 .hg입니다. 그러므로 잘 모른다면 .hg 안에 있는
내용을 함부로 고쳐서는 안 됩니다. 각 저장소는 모두 독립적으로 이력을 관리할 수 있고
변경 내용을 서로 주고 받으며 동기화할 수 있습니다.
원래 Mercurial은 명령 창에서 명령을 직접 실행해야 하지만 여기서는 윈도용 Mercurial
GUI 클라이언트인 TortoiseHg를 사용해 설명합니다. TortoiseHg는 다음에서 받을 수 있으
며 현재 최신 버전은 2.4.2입니다.


    TortoiseHg 다운로드
         URL: http://tortoisehg.bitbucket.org/


설치 과정은 특별한 것이 없으므로 생략합니다. 설치를 마친 후 가장 먼저 할 것은 사용자
정보를 설정하는 겁니다. 바탕화면에서 마우스 오른쪽 버튼을 누르고 컨텍스트 메뉴가 나오
면 TortoiseHg → Global Settings를 선택합니다.




TortoiseHg 컨텍스트 메뉴


Global settings 창에서 Commit을 선택한 후 Username을 다음 형식으로 설정합니다.


   full name <account@email.com>
Global Settings 창 내용


진행하기에 앞서 한 가지 기억해야 할 것은 앞으로 설명하는 모든 내용은 컨텍스트 메뉴에
서 TortoiseHg를 선택해 펼쳐지는 메뉴에서 모두 동일하게 할 수 있습니다. 하지만
TortoiseHg에는      윈도 탐색기를   열지 않고도 모든 기능을 실행할 수 있는 워크벤치
(workbench)라는 매우 편리한 환경을 제공하므로 이를 이용해 설명합니다. 바탕화면 또는
윈도 탐색기에서 마우스 오른쪽 버튼을 누른 후 Hg Workbench를 선택하면 됩니다.
TortoiseHg Workbench



저장소 만들기
앞에서도 얘기했듯 버전 관리를 하려면 가장 먼저 해야 하는 것이 저장소를 만드는 일입니
다. 워크벤치를 실행한 후 File → New Repository를 선택하면 다음처럼 Init 창이 뜹니다.
Destination path에 저장소를 만들 위치를 지정한 후 Create 버튼을 누르면 됩니다.




저장소 만들기


저장소를 만들면 워크벤치에도 등록되는데 아직 변경 내용은 없으므로 Working Directory
만 표시하고 있습니다. 워크벤치 구성은 다음과 같습니다.
이력 표시

        저장소 목록



                                       커밋 로그

                        변경 파일 표시



                                        변경 내용 표시




워크벤치 구성




파일 추가
이전에 만든 저장소에 hello.txt 파일을 만들고 다음 내용을 추가합니다.


    Hello, Mercurial!




hello.txt 파일 추가



워크벤치에서 변경 파일을 표시하는 창 위, 또는 툴바에 있는        버튼을 누르면 변경 파일
목록에 hello.txt 파일이 나타납니다. 아직은 Mercurial에서 관리하지 않는 파일이므로 ?로
표시하는데 이 파일을 마우스 오른쪽 버튼으로 선택한 후 Add를 누릅니다.
hello.txt 파일 추가


워크벤치에서는 해당 파일을 녹색으로 표시하고 상태는 ?에서 A로 바뀝니다. 하지만 아직
저장소에 추가한 것은 아니며 추가 예정이라고 표시만 해 둔 상태입니다. 변경 파일 표시창
에는 .hgignore 파일도 있는데 자세한 설명은 나중에 하기로 하고 이 파일도 마찬가지로
Add로 추가합니다. 이때 윈도 탐색기로 해당 파일을 보면 다음과 같습니다.




파일 추가 상태


이제 기록으로 남길 내용을 워크벤치 커밋 로그 창에 적습니다.


    Hello, Mercurial!
커밋 로그 기록


파일 목록에서 hello.txt와 .hgignore 앞에 있는 체크 박스를 모두 선택해 체크 표시를 하고
Commit 버튼을 누릅니다. 커밋(commit)은 저장소에 파일을 추가하는 것을 뜻합니다. 이력
표시창에는 방금 커밋한 내용이 나타납니다.




첫 커밋 후 이력


윈도 탐색기에서 파일 상태는 다음과 같습니다.




파일 커밋 후 상태


이제부터 이 두 파일은 버전 관리를 할 수 있는 상태입니다.


파일 변경
hello.txt 파일을 열고 다음 내용을 추가하고 저장합니다.
Hi, TotoriesHg!


윈도 탐색기에서 파일 상태는 다음처럼 바뀌어 어떤 파일이 바뀌었는지 표시합니다.




파일 변경 후 상태


워크벤치 이력 표시 창에서 Working Directory를 선택하면 현재 작업 영역 상태를 표시하
는데 hello.txt 파일이 변경됐다는 표시로 M을 붙이고 파란색으로 나타냅니다. M은 변경
(Modified)을 뜻합니다.




파일 변경 후 워크벤치 상태


워크벤치 파일 목록에서 hello.txt를 선택하면 오른쪽 아래에 있는 변경 내용 표시 창에서
변경 내용을 간단히 볼 수 있습니다. 현재 hello.txt 파일은 버전 관리 중이므로 add를 다시
할 필요가 없으며 로그를 적은 후 바로 커밋하면 됩니다.

Mais conteúdo relacionado

Semelhante a 실용주의 프로그래머를 위한 개발환경 만들기

Circulus user guide
Circulus user guideCirculus user guide
Circulus user guideYeonah Ki
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability흥배 최
 
Circulus user guide
Circulus user guideCirculus user guide
Circulus user guideYeonah Ki
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화Jaehoon Choi
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2성일 한
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)YoungSu Son
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기YoungSu Son
 
Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)team air @ Dimigo
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서ServerDevCamp
 
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&CJavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&Csys4u
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치Aiden Seonghak Hong
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환
 
오렌지6.0 교육자료
오렌지6.0 교육자료오렌지6.0 교육자료
오렌지6.0 교육자료Seok-joon Yun
 

Semelhante a 실용주의 프로그래머를 위한 개발환경 만들기 (20)

Circulus user guide
Circulus user guideCirculus user guide
Circulus user guide
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
Tdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalabilityTdc2013 선배들에게 배우는 server scalability
Tdc2013 선배들에게 배우는 server scalability
 
Circulus user guide
Circulus user guideCirculus user guide
Circulus user guide
 
레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화레가시 프로젝트의 빌드 자동화
레가시 프로젝트의 빌드 자동화
 
Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2Laravel 로 배우는 서버사이드 #2
Laravel 로 배우는 서버사이드 #2
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
[NEXT] Android 개발 경험 프로젝트 4일차 (Networking)
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기클라우드 환경에서 알아야할 성능 이야기
클라우드 환경에서 알아야할 성능 이야기
 
Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)Web_06_Ruby On Rails (임시)
Web_06_Ruby On Rails (임시)
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
 
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&CJavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
RHive tutorial supplement 1: RHive 튜토리얼 부록 1 - Hadoop 설치
 
이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf이정환_구름에듀_특강.pdf
이정환_구름에듀_특강.pdf
 
오렌지6.0 교육자료
오렌지6.0 교육자료오렌지6.0 교육자료
오렌지6.0 교육자료
 
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
(스프링프레임워크 강좌)스프링부트개요 및 HelloWorld 따라하기
 

Mais de Mickey SJ Lee

풀리퀘를 부탁해!
풀리퀘를 부탁해!풀리퀘를 부탁해!
풀리퀘를 부탁해!Mickey SJ Lee
 
초간단 SW 개발 방법 for dummies
초간단 SW 개발 방법 for dummies초간단 SW 개발 방법 for dummies
초간단 SW 개발 방법 for dummiesMickey SJ Lee
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체Mickey SJ Lee
 
5. hg init – a mercurial tutorial by tortoise hg repository architecture
5. hg init – a mercurial tutorial by tortoise hg   repository architecture5. hg init – a mercurial tutorial by tortoise hg   repository architecture
5. hg init – a mercurial tutorial by tortoise hg repository architectureMickey SJ Lee
 
4. hg init – a mercurial tutorial by tortoise hg merging
4. hg init – a mercurial tutorial by tortoise hg   merging4. hg init – a mercurial tutorial by tortoise hg   merging
4. hg init – a mercurial tutorial by tortoise hg mergingMickey SJ Lee
 
3. hg init – a mercurial tutorial by tortoies hg fixing goofs
3. hg init – a mercurial tutorial by tortoies hg   fixing goofs3. hg init – a mercurial tutorial by tortoies hg   fixing goofs
3. hg init – a mercurial tutorial by tortoies hg fixing goofsMickey SJ Lee
 
2. hg init – a mercurial tutorial by tortoies hg setting up for a team
2. hg init – a mercurial tutorial by tortoies hg   setting up for a team2. hg init – a mercurial tutorial by tortoies hg   setting up for a team
2. hg init – a mercurial tutorial by tortoies hg setting up for a teamMickey SJ Lee
 
1. hg init – a mercurial tutorial by tortoies hg ground up mercurial
1. hg init – a mercurial tutorial by tortoies hg   ground up mercurial1. hg init – a mercurial tutorial by tortoies hg   ground up mercurial
1. hg init – a mercurial tutorial by tortoies hg ground up mercurialMickey SJ Lee
 

Mais de Mickey SJ Lee (8)

풀리퀘를 부탁해!
풀리퀘를 부탁해!풀리퀘를 부탁해!
풀리퀘를 부탁해!
 
초간단 SW 개발 방법 for dummies
초간단 SW 개발 방법 for dummies초간단 SW 개발 방법 for dummies
초간단 SW 개발 방법 for dummies
 
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체테스트 주도 개발 By googletest   1장 다중 통화를 지원하는 money 객체
테스트 주도 개발 By googletest 1장 다중 통화를 지원하는 money 객체
 
5. hg init – a mercurial tutorial by tortoise hg repository architecture
5. hg init – a mercurial tutorial by tortoise hg   repository architecture5. hg init – a mercurial tutorial by tortoise hg   repository architecture
5. hg init – a mercurial tutorial by tortoise hg repository architecture
 
4. hg init – a mercurial tutorial by tortoise hg merging
4. hg init – a mercurial tutorial by tortoise hg   merging4. hg init – a mercurial tutorial by tortoise hg   merging
4. hg init – a mercurial tutorial by tortoise hg merging
 
3. hg init – a mercurial tutorial by tortoies hg fixing goofs
3. hg init – a mercurial tutorial by tortoies hg   fixing goofs3. hg init – a mercurial tutorial by tortoies hg   fixing goofs
3. hg init – a mercurial tutorial by tortoies hg fixing goofs
 
2. hg init – a mercurial tutorial by tortoies hg setting up for a team
2. hg init – a mercurial tutorial by tortoies hg   setting up for a team2. hg init – a mercurial tutorial by tortoies hg   setting up for a team
2. hg init – a mercurial tutorial by tortoies hg setting up for a team
 
1. hg init – a mercurial tutorial by tortoies hg ground up mercurial
1. hg init – a mercurial tutorial by tortoies hg   ground up mercurial1. hg init – a mercurial tutorial by tortoies hg   ground up mercurial
1. hg init – a mercurial tutorial by tortoies hg ground up mercurial
 

실용주의 프로그래머를 위한 개발환경 만들기

  • 1. 실용주의 프로그래머를 위한 개발 환경 만들기 http://surpreem.com
  • 2. Track 1. 실용주의 개발 환경
  • 3. Session 1. 실용주의 개발 환경? S/W 개발에 필요한 것은 무엇일까요? 컴퓨터는 기본으로 있어야 할 것이고 그 외 프로그램 제작에 사용하는 각종 컴파일러와 도구 등도 필요할 겁니다. 어쩌면 커피와 인터넷을 필수 로 꼽는 분도 있을지 모릅니다. 하지만 의외로 개발 환경이 필요하다는 것에 대해서는 여전 히 잘 모르는 분이 많은 것 같습니다. 아니 개발 환경 자체에 대해 잘 모르는 분이 많다고 하는 게 오히려 더 맞을지도 모르겠습니다. 개발에 필요한 시스템 역시 개발자에 따라 매우 다양한 요구가 있을 수 있습니다. 하지만 그 중에서도 가장 기본이 되는 것이 있습니다. 바로 버전 관리, 이슈 또는 프로젝트 관리, 빌드 시스템, 심볼 서버 등입니다. ‘그럼 기본이 되는 시스템만 적당히 있으면 되는 거 아닌가요? 실용주의 개발 환경이란 또 뭔가요?’ ‘실용주의’란 말을 붙이고 보니 뭔가 세련되어 보입니다. 그런데 실용적인 개발 환경과 그렇 지 못한 것을 구분하는 차이는 뭘까요? 버전 관리 시스템에 대해 속속들이 알지는 못하지만 지금까지 많은 시스템을 접해 봤습니다. 구입 비용은 들지 않지만 설치부터 관리까지 모든 것을 직접 해야 하는 오픈 소스 제품부터 많은 비용을 들여 구입하고 구축해야 하는 고가의 외산 제품, 국내에서 개발한 제품 등 종류도 많습니다. 하지만 무엇보다 중요한 것은 사용 할 환경에 그 제품이 잘 맞으며 쉽게 이해하고 쓸 수 있느냐 하는 겁니다. 고가의 제품을 도입해 시스템을 구축했으나 사용하기도 복잡하고 환경에 맞지 않으면 그 제품 자체의 성능 이 아무리 뛰어난들 실용적이지 못합니다. 반대로 구입 비용은 없었지만 구축하고 관리하기 가 너무 복잡하고 힘들다면 그 역시도 실용적이라고 하긴 어려울 겁니다. 즉 비용도 적게 들고 관리도 되도록 쉬우며 짧은 시간에 쉽게 배워 쓸 수 있는 시스템이 무엇보다 가장 실 용적인 시스템이라고 생각합니다. ‘그런데 그런 거 꼭 써야 하나요? 없어도 나름 잘 해 왔는데.’ 시스템이라는 말 자체에 거부감을 느끼는 분도 의외로 많습니다. 사실 시스템이란 게 대체 로 관리를 위한 것이니까요. 하지만 앞에서 얘기한, S/W 개발에서 가장 기본이 되는 시스템 은 누군가를 감시하기 위한 것이 아니라 자신과 팀을 위한 것입니다. 언제 어디를 무슨 이 유로 고쳤는지 몰라 답답했던 적은 없었나요? 현재 진행 중인 프로젝트에서 뭘 얼마나 해야 하는지 궁금한 적은 없었나요? 밀려드는 요청으로 동시에 여러 일을 진행하며 좀 더 쉽게 코드를 관리할 방법이 없는지 답답했던 적은요? 또는 배포할 코드나 실행 파일을 종종 잘못 전달해 문제가 생긴 적은요? 지금도 S/W 개발 과정에서 흔히 겪는 이런 문제를 앞에서 얘기한 시스템을 사용하지 않고 각자 여러 방법을 사용해 잘 해결하고 있을지도 모릅니다. 하지만 이런 시스템을 사용하면
  • 4. 그렇지 않은 것보다 훨씬 적은 노력으로 더욱 큰 효과를 볼 수 있다는 것은 분명합니다. 특 히 팀이 아닌 혼자라도 마찬가지입니다.
  • 5. Session 2. 시스템 구성 이 책에서는 여러 오픈 소스 제품을 사용해 시스템을 구성합니다. 그런데 오픈 소스 제품에 도 비슷한 역할을 하는 것이 많으므로 무엇을 선택하면 좋을지 쉽게 결정하기 어려울 때가 많습니다. 또한 윈도 환경에서 쓸 것이므로 이를 고려해 각 부문별로 간단히 살펴보고 앞으 로 무엇을 사용할지도 알아보겠습니다. 버전 관리 버전 관리 시스템의 가장 큰 역할은 이력 관리입니다. 누가 언제 무엇을 어떻게 바꿨는지 언제든 확인할 수 있고 필요하면 언제든 과거 내용으로 되돌리거나 가져올 수 있습니다. 이 런 시스템을 갖추지 않았을 때 팀 내에서 쓰는 가장 기본적인 방법은 공유 디렉터리를 만들 어 각자 변경한 내용을 모으는 겁니다. 하지만 이런 경우 이력 추적은 말할 것도 없고 잘못 덮어쓰면 힘들게 개발한 내용이 한 순간에 사라지는 경우도 생깁니다. 정말 아찔한 일이죠. 또한 각 개발자 입장에서는 혹시라도 문제가 생길 것에 대비해 항상 백업을 만드는데 가장 일반적인 방법은 압축 파일로 보관하는 겁니다. 가장 간편한 방법이니 실수도 없을 것 같지 만 의외로 문제가 많습니다. 예를 들면, 코드를 보다 수정할 부분이 생기면 백업 만드는 걸 잊고 이미 수정하고 있는 경우가 많습니다. 게다가 백업을 만들어 보관은 열심히 했는데 그 많은 것 중 필요한 내용이 어디에 있는지 찾기가 무척 어려우며 각 백업 사이에 차이점을 찾는 것도 그리 쉬운 일은 아닙니다. 사실 이 모든 일을 대신 해 주는 것이 바로 버전 관리 시스템입니다. 그저 맡기면 간단히 해결될 일이죠. 그런데 버전 관리 시스템 역시 각각 특징이 있습니다. 크게는 중앙 집중형 과 분산형으로 나눌 수 있으며 간단히 살펴 보겠습니다. 중앙 집중형 클라이언트와 서버 형태의 버전 관리 시스템입니다. 코드를 저장하는 저장소는 서버에 있고 각 개발자는 클라이언트를 사용해 서버와 정보를 주고 받습니다. 직관적이므로 사용하기에 간편하지만 서버와 연결이 끊어지면 갖고 있는 코드를 수정하는 것 외에 할 수 있는 일이 거의 없습니다. 심지어는 이력 조회도 할 수 없습니다. CVS, Subversion, ClearCase 등 많 은 제품이 여기에 속합니다. 분산형 서버가 따로 없이 모든 개발자가 각자의 저장소를 가질 수 있으며 이 저장소를 서로 동기화 합니다. 각자 저장소를 가지므로 네트워크에 연결하지 않더라도 다른 저장소와 동기화하는 것 외에는 버전 관리에 아무런 문제가 없습니다. 다만 병렬 개발이 기본이므로 처음 접하면 중앙 집중형에 비해 혼란스러울 수 있습니다. Git, Mercurial, Bazaar 등이 이에 속합니다. 버전 관리 시스템에서는 중앙 집중형인 Subversion을 여전히 가장 많이 사용하고 있으나
  • 6. 최근에는 분산형에 대한 관심도 상당히 높아졌습니다. 이는 GitHub, BitBucket과 같은 소셜 코딩의 영향이 큰 것도 있으나 무엇보다 분산형 시스템만의 장점도 매우 크기 때문입니다. 앞에서 얘기했듯이 중앙 집중형 시스템에서는 서버와 연결이 끊어지면 아무것도 할 수 없지 만, 분산형은 각자 저장소를 마음껏 만들 수 있어 코드를 이리저리 바꿔가며 시험하고 맘에 들면 반영하고, 그렇지 않으면 버리는 것도 쉽습니다. 또한 오프라인에서 작업하더라도 지 금껏 진행한 이력을 모두 살펴볼 수 있는 것도 매우 큰 장점입니다. 여기서는 분산형 시스템의 장점과 더불어 Subversion만큼이나 쉽고 간편한 Mercurial을 사 용합니다. 무엇보다 윈도에서는 TortoiseHg라는 멋진 GUI S/W를 사용할 수 있습니다.
  • 7. Track 2. 개발 환경 만들기
  • 8. Session 1. 인증 시스템 앞에서 소개한 전체 시스템 모습에서 가장 밑바탕이 되는 것은 인증 시스템입니다. 공개적으 로 누구나 접근하고 사용할 시스템이라면 굳이 인증 시스템을 구성할 필요는 없지만 대부분 공개할 것과 그렇지 않은 것을 구분해 한 시스템 내에서 운영하므로 인증은 반드시 필요합니 다. 또한 앞으로 구성할 여러 시스템에서는 각각 인증 방법을 제공하는데 각 시스템별로 인증 을 달리 사용하면 여러 시스템에 계정을 각각 등록해야 하고 관리도 시스템별로 따로 해야 하 므로 매우 불편합니다. 그러므로 여기서는 가능한 많은 시스템에서 같이 쓸 수 있도록 OpenLDAP을 사용해 통합 인증 시스템을 먼저 구성합니다. 미리 준비해야 하는 것들  OpenLDAP  윈도용 OpenLDAP은 아래 URL에서 받을 수 있습니다. 하지만 현재 배포 중인 2.4.26 버전 은 인증 처리에 문제가 있어 사용할 수 없으므로 여기서는 2.4.30 버전을 사용합니다.  다운로드: http://www.userbooster.de/en/download/openldap-for-windows.aspx  CD 경로: server programsopenldapopenldap-for-windows.msi  LDAP Admin  LDAP 디렉터리 관리 툴이며 여기서는 1.2 버전을 사용합니다.  다운로드: http://sourceforge.net/projects/ldapadmin/  CD 경로: server programsopenldapLdapAdmin.exe OpenLDAP 설치 1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Next를 선택해 다음으로 진행합니다. OpenLDAP 설치 마법사 2. 라이선스 동의 화면에서는 I accept the terms in the License Agreement를 선택하고
  • 9. Next를 누릅니다. 라이선스 동의 화면 3. 설치 디렉터리는 기본 설정을 그대로 사용하면 됩니다. Next를 선택합니다. 설치 디렉터리 지정 4. 설치 항목은 기본 설정을 그대로 사용하면 됩니다. Next를 선택해 다음으로 진행합니다.
  • 10. 설치 항목 지정 5. 추가 설정 화면에서는 OpenLDAP에 접속하는 데 사용할 서버 이름 또는 IP 주소와 포트를 설정할 수 있습니다. 기본 설정을 그대로 사용하면 됩니다. 서버 정보를 직접 설정하려면 Listen on all interfaces 설정을 해제하고 Servername / IP-Address 란에 plab.net과 같 이 사용할 서버 이름을 적으면 됩니다. 추가 설정
  • 11. 여기서 잠깐! 서버 이름을 지정하는 것은 숫자로 된 IP 주소보다 의미 있는 이름이 기억하기 좋기 때문인데, 네트워크에서 는 DNS 서버를 사용하지 않으면 이 이름을 IP 주소로 변환해 인식할 수 없습니다. 이 문제를 해결하기 위해 서버에 접속하는 각 개발자 PC의 C:WindowsSystem32driversetchosts 파일에 IP와 서버 이름을 입력해 줍니다. 여기서는 192.168.195.128로 접속할 것이므로 다음처럼 입력했습니다. 192.168.195.128 plab.net 6. LDAP 정보를 저장하는데 사용할 백엔드(backend) 엔진을 선택합니다. 여기서는 BDB를 사 용하겠습니다. 선택 후 Next를 누릅니다. 백엔드 엔진 선택 7. BDB를 선택하면 관리자 계정에 대한 암호를 지정할 수 있습니다. 여기서는 기본 설정을 그대 로 사용하고 뒤에서 다시 설정하는 법을 함께 보도록 하겠습니다.
  • 12. BDB 루트 계정 암호 설정 8. 이제 설치 준비가 됐습니다. 선택한 내용을 다시 보여주는데 이상 없으면 Install을 선택해 설 치합니다. 설치 준비 화면 9. 설치 중입니다. 마칠 때까지 기다립니다.
  • 13. 파일 설치 화면 10. 설치를 마치면 완료 화면이 나타납니다. Finish를 눌러 설치 마법사를 마칩니다. 설치 완료 화면 OpenLDAP 설정 먼저 관리자 암호를 만듭니다. OpenLDAP을 설치한 디렉터리에 있는 slappasswd.exe를 명 령 창(command prompt)에서 실행한 후 사용할 암호를 입력하면 그 내용을 암호화해 출력 합니다.
  • 14. slappasswd.exe 실행 화면 OpenLDAP 설치 디렉터리에서 설정 파일인 slapd.conf를 열고 다음 내용처럼 고칩니다. suffix와 rootdn에는 OpenLDAP을 설치할 때 지정한 서버 이름을 사용하면 되고 rootpw에 는 slappasswd.exe를 실행해 얻은 암호를 사용합니다. 그 외 굵은 글씨로 표시한 부분에 주 의해서 고치면 됩니다.  파일 경로: C:Program FilesOpenLDAPslapd.conf  CD 경로: server programsopenldapconfigslapd.conf # BDB Backend configuration file # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. ucdata-path ./ucdata include ./schema/core.schema include ./schema/cosine.schema include ./schema/nis.schema include ./schema/inetorgperson.schema include ./schema/openldap.schema include ./schema/dyngroup.schema pidfile ./run/slapd.pid argsfile ./run/slapd.args # Enable TLS if port is defined for ldaps TLSVerifyClient never TLSCipherSuite HIGH:MEDIUM:-SSLv2 TLSCertificateFile ./secure/certs/server.pem TLSCertificateKeyFile ./secure/certs/server.pem TLSCACertificateFile ./secure/certs/server.pem ####################################################################### # bdb database definitions #######################################################################
  • 15. database monitor database bdb suffix "dc=plab,dc=net" rootdn "cn=Manager,dc=plab,dc=net" # Cleartext passwords, especially for the rootdn, should # be avoid. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. rootpw {SSHA}ybKrchakJBfi5CjxHTq4RGim7iba2LiN # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory ./data dirtyread searchstack 20 # Indices to maintain index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub # Users can authenticate and change their password access to attrs=userPassword by dn="cn=Manager,dc=plab,dc=net" write by self write by anonymous auth by * none # All other attributes are readable to everybody access to * by dn="cn=Manager,dc=plab,dc=net" write by self write by * read LDAP에 정보를 추가하려면 기본 구조부터 만들어야 하는데 계정과 그룹만 관리할 것이므로 ou=People, ou=Groups 두 가지로 구성합니다. 텍스트 파일을 만들고 아래 내용을 추가합니 다. 파일 이름은 무엇이든 괜찮으나 여기서는 OpenLDAP 설치 디렉터리에 base.ldif로 만듭 니다.  파일 경로: C:Program FilesOpenLDAPbase.ldif  CD 경로: server programsopenldapconfigbase.ldif dn: dc=plab,dc=net dc: plab objectClass: top
  • 16. objectClass: domain dn:ou=People,dc=plab,dc=net objectClass: top objectClass: organizationalUnit ou: People dn:ou=Groups,dc=plab,dc=net objectClass: top objectClass: organizationalUnit ou: Groups 계속 진행하기 전에 먼저 OpenLDAP 서비스를 중지한 후, 명령 창을 열고 OpenLDAP 디렉 터리로 이동한 다음 아래 내용을 입력합니다. 여기서 잠깐! 서비스 목록 창을 열려면, 윈도 7에서는 시작 메뉴 → 제어판 → 시스템 및 보안 → 관리 도구 → 서비스를 선택 하거나 시작 메뉴를 선택한 후 프로그램 및 파일 검색란에 ‘서비스’를 입력하면 검색 결과에 나오므로 간단히 선 택할 수 있습니다. 윈도 XP에서는 시작 메뉴 → 제어판 → 관리 도구 → 서비스를 선택하면 됩니다. 서비스 창이 뜨면 OpenLDAP Service 항목을 찾아 중지하면 됩니다. slapadd -f slapd.conf –l base.ldif
  • 17. LDAP 기본 구조 추가 이제 OpenLDAP 서비스를 다시 시작합니다. OpenLDAP 계정 추가 LDAP 설정을 마쳤으므로 계정 정보를 추가합니다. 계정 정보 관리는 윈도용 LDAP 클라이언 트인 LDAP Admin을 사용하면 간편하게 처리할 수 있습니다. 1. LDAP Admin을 실행합니다. 처음 실행하면 기본 LDAP 브라우저로 설정할 것인지 묻는 창 이 뜨는데 Do not perform this check in the future을 선택한 후 Yes 또는 No로 선택합 니다. 기본 LDAP 브라우저 선택 창 2. LDAP 서버로 연결 설정을 만들기 위해 메뉴에서 Start → Connect를 선택하거나 툴바에서 Connect 아이콘을 선택합니다. Connect 메뉴 3. Connections 창이 열리면 New connection을 더블 클릭하거나 마우스 오른쪽 버튼으로 선 택한 후 메뉴에서 New를 선택합니다.
  • 18. 새 연결 메뉴 4. Connection properties 창에서는 연결 정보를 설정합니다. 현재는 관리자 계정만 있으므로 이에 대해 설정합니다. Connection properties 창  Connection name: 설정에 대한 이름으로 적절히 설정합니다. 여기서는 plab.net으로 합니다.  Host: LDAP 서버 주소입니다. 이전에 설정한 대로 plab.net으로 합니다.  Port: LDAP 서비스 포트입니다. LDAP 서버 설정과 마찬가지로 기본값 그대로 사용하면 됩니다.  Base: 기본 DN을 적습니다. 오른쪽에 있는 ‘Fetch DNs’를 선택하면 자동으로 가져 옵니다. 여 기서는 dc=plab,dc=net 입니다.  인증 방법: Simple authentication을 선택합니다.  Username: LDAP 계정입니다. 관리자는 LDAP 설정에서 rootdn 내용을 그대로 적으면 되며 여 기서는 cn=Manager,dc=plab,dc=net을 적습니다.  Password: 관리자 계정에 대한 암호입니다. 설정을 마친 후 Test connection을 선택해 내용이 맞는지 접속 시험으로 확인할 수 있습니 다. 연결이 정상이면 ‘Connection is successful.’을 표시하는 창을 표시하나 실패하면 LDAP error 창을 표시합니다. 연결까지 확인했으면 OK를 선택해 저장합니다.
  • 19. 여기서 잠깐! LDAP 연결 설정 중 ‘Fetch DNs’이나 Test connection을 선택했을 때 아래와 같은 메시지 창이 뜨며 연결되지 않는다면 먼저 서비스가 동작 중인지 확인합니다. 서비스가 정상 동작 중이라면 서버 방화벽 설정(Inbound 규칙)에 OpenLDAP 서비스인 slapd.exe를 추가해 포트 를 열어 줍니다. 만약 서버가 아닌 다른 PC에서 원격으로 접근한다면 앞에서 이미 설명했듯이 사용하는 PC의 C:WindowsSystem32driversetchosts 파일에 서버 IP와 서버 이름을 입력해 줍니다. 5. Connections 창에는 방금 설정한 plab.net 접속 설정이 있습니다. 이를 더블 클릭하거나 선 택 후 OK를 누르면 LDAP 서버에 접속합니다. plab.net 접속 설정 6. ou=People을 마우스 오른쪽 버튼으로 선택하고 New → User 메뉴를 선택하면 일반 사용자 계정을 추가할 수 있습니다.
  • 20. 사용자 계정 추가 메뉴 7. 사용자 생성 창이 뜨면 내용을 추가한 후 OK를 선택해 저장합니다. 여기서는 예로 sandbox 계정을 만들어 보겠습니다. 사용자 생성 창  First name, Initials, Second name: 사용자 이름을 적습니다. 여기서는 first와 second name 부분에 sand, box로 적습니다.  Display name: 표시할 이름이며 여기서는 sandbox로 적습니다.  Username: 계정 이름이며 sandbox로 적습니다.  Home Directory: 사용자 홈 디렉터리인데 여기서는 별 의미가 없으며 C:로 적습니다.  Shadow Account: 실제 계정을 만드는 게 아니므로 이 항목을 꼭 선택합니다.
  • 21. Account 탭에 있는 위 내용만으로 충분하며 나머지 Business, Personal, Membership 탭 내용은 필요하면 적절히 적으면 됩니다. 단, Business 탭에서 E-Mail Addresses 내용은 이 후에 설치하는 빌드 서버에서 사용하므로 꼭 적어 줍니다. 8. 계정에 암호를 설정하려면 해당 계정을 마우스 오른쪽 버튼으로 선택하고 Set Password 메 뉴를 선택하면 됩니다. 암호 설정 메뉴 9. 암호를 입력하고 암호화 방법은 기본 설정인 SHA1을 그대로 사용하면 됩니다. 암호 설정 화면 10. 방금 만든 sandbox 계정으로 접속해 보겠습니다. 일반 계정으로 접속할 때는 관리자 계정 에 대해 설정한 연결 정보에서 Username과 Password만 다릅니다.
  • 22. 일반 계정 연결 설정  Username: 앞에서 만든 sandbox 계정은 ou=People 아래에 만들었으므로 uid=sandbox,ou=People,dc=plab,dc=net으로 적습니다.  Password: sandbox 계정에 대해 설정한 암호를 적습니다.
  • 23. Session 2. 웹 서버와 데이터베이스 많은 시스템이 전통적인 클라이언트/서버 환경에서 벗어나 웹 환경으로 바뀌었습니다. 별도 클라이언트 프로그램 없이 웹 브라우저만 있으면 어디서든 같은 환경을 간편하게 사용할 수 있고, S/W 업그레이드 역시 개개인이 모두 해야 하는 게 아니라 서버에서만 하면 모든 사용 자가 같은 환경을 쓸 수 있으므로 배포 역시 간편한 웹의 장점 때문입니다. 앞으로 사용할 대부분의 시스템 역시 웹으로 사용합니다. 즉 웹 환경에서 여러 시스템을 운영 할 수 있는 기반이 되는 서버가 필요합니다. 이미 웹 호스팅 서비스를 받고 있거나 웹 서비스 를 운영 중인 서버가 있다면 괜찮지만 그렇지 않으면 직접 서버를 설치해야 합니다. 또한 일 부 시스템에서는 정보를 저장할 데이터베이스도 필요합니다. 여기서는 웹 서버로 Apache, 데 이터베이스로 MySQL을 사용해 직접 설치해 보겠습니다. 미리 준비해야 하는 것들  Apache  Apache 웹 서버는 Apache 소트프웨어 재단에서 진행하는 프로젝트 중 하나로 매우 인기 있는 오픈 소스 웹 서버입니다. 아래 URL에서 받을 수 있으며 여기서는 OpenSSL을 포함한 2.2.21 버전을 사용합니다.  다운로드: http://httpd.apache.org/download.cgi  CD 경로: server programsamhttpd-2.2.21-win32-x86-openssl-0.9.8r.msi  MySQL  아래 URL에서 받을 수 있습니다. 여기서는 5.5.19 버전을 사용합니다.  다운로드: http://www.mysql.com/downloads/mysql/  CD 경로: server programsammysql-5.5.19-win32.msi Apache 설치 여기서 잠깐! 윈도 기본 웹 서버인 IIS(Internet Information Services, 인터넷 정보 서비스)를 사용하고 있다면 Apache를 설 치하기 전에 IIS를 중지해야 합니다. 웹 서비스에서 사용하는 포트는 80번이 기본이므로 모든 웹 서버에서 이 포 트를 기본으로 사용합니다. 하지만 같은 포트를 여러 프로그램에서 동시에 사용하면 충돌이 생기므로 함께 사용 할 수 없습니다. 윈도 7에서 IIS는 기본적으로 설치되어 있지 않기 때문에 사용하지 않고 있으면 넘어가도 됩니 다. 하지만 사용한다면 다음과 같이 중지할 수 있습니다. IIS를 중지하려면, 윈도 7에서는 시작 메뉴 → 제어판 → 시스템 및 보안 → 관리 도구 → IIS(인터넷 정보 서비 스) 관리자 → Default Web Site 선택 후 중지합니다. 또는 시작 메뉴를 선택한 후 프로그램 및 파일 검색란에 ‘iis’를 입력하면 검색 결과에 ‘IIS(인터넷 정보 서비스) 관리자’가 나오므로 간단히 선택해 중지할 수 있습니다. XP에서는 시작 메뉴 → 제어판 → 관리 도구 → 인터넷 정보 서비스 → 로컬 컴퓨터 → 웹 사이트 → 기본 웹 사이트 선택 후 중지하면 됩니다. 1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Next를 선택해 다음으로 진행합니다.
  • 24. Apache 설치 마법사 2. 라이선스 동의 화면에서는 I accept the terms in the License Agreement를 선택하고 Next를 누릅니다. 라이선스 동의 화면 3. Apache 웹 서버에 대한 안내문입니다. 필요하면 읽어 본 후 Next를 선택합니다.
  • 25. Apache 웹 서버 안내문 4. 서버 정보를 설정합니다. 이전에 OpenLDAP을 설정할 때 사용한 서버 정보를 사용하면 됩니 다. 여기서는 모두 plab.net으로 입력하겠습니다. 관리자 이메일 역시 사용하는 것으로 바꾸 면 됩니다. 마지막으로 Apache에서 80번 포트를 사용하도록 for All Users, on Port 80, as a Service — Recommended를 선택하고 Next를 누릅니다. 서버 정보 설정 화면 5. 설치 형태는 Typical로 선택하고 Next를 누릅니다.
  • 26. 설치 형태 선택 6. 설치 디렉터리는 기본 설정을 그대로 사용하면 됩니다. 설치 디렉터리 지정 7. 설치 준비가 됐습니다. 바꿀 내용이 없으면 Install을 선택해 설치합니다.
  • 27. 설치 준비 화면 8. 설치 중입니다. 마칠 때까지 기다립니다. 파일 설치 화면 9. 설치를 마치면 완료 화면이 나타납니다. Finish를 눌러 설치 마법사를 마칩니다.
  • 28. 설치 완료 화면 설치를 마치면 트레이에 Apache Service Monitor 아이콘( )이 생기는데 더블 클릭하면 창 을 열 수 있습니다. 여기서 Apache 웹 서버 서비스 상태를 확인하고 시작, 중지, 재시작할 수도 있습니다. Apache Service Monitor 웹 브라우저를 실행한 후 http://plab.net으로 접속해 ‘It works!’라고 표시한 화면을 볼 수 있으면 정상입니다. 여기서 잠깐! Apache를 설치한 서버가 아닌 다른 PC에서 서버로 접속할 때 ‘It works!’라고 표시한 화면을 보지 못하면 서 버 방화벽 설정(Inbound 규칙)에 Apache 서비스인 httpd.exe를 추가해 포트를 열어 줍니다.
  • 29. 마지막으로, httpd.conf 파일에서 다음 내용을 찾아 굵은 글씨로 표시한 내용에 주의해 수정 한 후 Apache 서비스를 다시 시작합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf ... # Supplemental configuration # # The configuration files in the conf/extra/ directory can be # included to add extra features or to modify the default configuration of # the server, or you may simply copy their contents here and change as # necessary. # Server-pool management (MPM specific) Include conf/extra/httpd-mpm.conf ... # Virtual hosts Include conf/extra/httpd-vhosts.conf ... Apache와 IIS 함께 쓰기 여기서 잠깐! Apache와 IIS를 함께 쓰지 않으면 다음으로 넘어 가도 됩니다. Apache와 IIS를 IP 하나로 함께 쓰려면 한 가지 작업을 해야 합니다. 먼저 XP를 사용할 때 부터 설명합니다.  Windows XP Service Pack 2 Support Tools  다운로드: http://go.microsoft.com/fwlink/?LinkID=84085 위 URL에서 Windows XP Service Pack 2 Support Tools를 받습니다. 설치 후 시작 메뉴 → Windows Support Tools → Command Prompt를 선택하고 다음 내용을 입력해 실행합 니다. 여기서 192.168.195.128은 해당 서버 IP입니다. httpcfg set iplisten –i 192.168.195.128
  • 30. 윈도 Vista 이상 즉 윈도 Vista, 7, 2008에는 httpcfg.exe를 사용할 수 없으며 대신 netsh.exe를 사용하면 되는데 따로 설치하지 않아도 됩니다. 명령 창에서 다음을 실행합니다. netsh http add iplisten ipaddress=20.1.2.110 앞에서 설명한 것처럼 Apache와 IIS는 같은 포트를 사용할 수 없으므로 IIS에서 웹 서비스용 포트를 8000 또는 8080 등으로 바꾸고 다시 실행합니다. MySQL 설치 1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Next를 선택해 다음으로 진행합니다. MySQL 설치 마법사 2. 라이선스 동의 화면에서는 I accept the terms in the License Agreement를 선택하고 Next를 누릅니다. 라이선스 동의 화면
  • 31. 3. 설치 형태는 Typical로 선택하고 Next를 누릅니다. 설치 형태 선택 4. 설치 준비가 됐습니다. 바꿀 내용이 없으면 Install을 선택해 설치합니다. 설치 준비 화면 5. 설치 중입니다. 마칠 때까지 기다립니다.
  • 32. 파일 설치 화면 6. 설치 마지막 단계에서는 MySQL Enterprise 제품에 대한 안내문이 뜹니다. Next로 넘어가면 됩니다. MySQL Enterprise 안내문 7. 설치를 마치면 완료 화면이 나타납니다. Launch the MySQL Instance Configure Wizard 를 선택한 상태에서 Finish를 눌러 설치 마법사를 종료하고 MySQL 설정 마법사를 실행합니 다.
  • 33. 설치 완료 화면 8. 설정 마법사가 나타나면 Next를 눌러 다음으로 진행합니다. MySQL 설정 마법사 9. 설정 방법을 선택합니다. 여기서는 Detailed Configuration을 선택하겠습니다.
  • 34. 설정 방법 선택 10. 서버 형태를 선택합니다. 여러 서비스를 사용할 것이므로 Server Machine을 선택합니다. 서버 형태 선택 11. 데이터베이스는 Multifunctional Database를 선택합니다.
  • 35. 데이터베이스 선택 12. InnoDB 데이터 파일을 둘 위치를 지정합니다. 기본 설정을 사용해도 되지만 여기서는 목록 에서 MySQL InnoDB Datafiles를 선택했습니다. 필요하면 다른 위치를 지정해도 됩니 다. InnoDB 데이터 파일 위치 지정 13. 데이터베이스에 동시 접속 수를 지정합니다. 많이 지정할수록 서버 성능에 영향을 주므로 적절히 지정합니다. 여기서는 기본 설정을 그대로 사용합니다.
  • 36. 동시 접속 수 지정 14. 포트 등은 기본 설정을 그대로 사용하면 됩니다. 윈격 PC에서 데이터베이스에 접근하려면 Add firewall exception for the port를 선택합니다. 네트워크 설정 15. 기본 문자 집합(character set)은 Best Support For Multilingualism을 선택해 UTF-8로 지정합니다.
  • 37. 기본 문자 집합 지정 16. 윈도 옵션에서는 기본 설정을 그대로 사용하고 Include Bin Directory in Windows PATH 를 추가 선택해 실행 경로에 추가합니다. 윈도 옵션 지정 17. 보안 옵션에서는 관리자 계정(root)에 대한 암호를 설정합니다. Enable root access from remote machines를 선택하면 관리자 계정으로 원격 PC에서도 데이터베이스에 접속할 수 있어 관리하기 편하지만 보안에 주의해야 합니다.
  • 38. 보안 옵션 지정 18. 데이터베이스를 실행할 준비가 됐습니다. Execute를 선택합니다. 실행 준비 화면 19. 정상적으로 실행됐습니다. Finish를 눌러 설정 마법사를 마칩니다.
  • 40. Session 3. Mercurial 설치 Mercurial은 분산형 버전 관리 시스템이므로 중앙 집중형 버전 관리 시스템인 Subversion이 나 CVS처럼 중앙 저장소가 따로 없으며 모든 저장소가 독립적이고 동등합니다. 하지만 많은 개발자가 각자 저장소를 만들고 서로 변경 내용을 동기화하며 사용할 때 저장소가 많으면 많 을수록 동기화한 것과 하지 않은 것을 파악하기가 쉽지 않다는 게 문제입니다. 어떤 규칙을 만들지 않으면 변경 내용을 모든 개발자에게 전파하기란 쉽지 않습니다. 이런 이유로 Mercurial과 같은 분산형 버전 관리 시스템이 중앙 집중형 버전 관리 시스템에 비해 관리하 기가 어렵거나 복잡하다고 느낄 수도 있습니다. 하지만 이를 간단히 해결할 수 있는 방법이 있습니다. Subversoin처럼 중앙 저장소로 쓸 저장소를 만들고 모든 개발자가 이 저장소와 동 기화 하도록 하는 겁니다. 그러자면 누구나 손쉽게 접근할 수 있어야 하고 필요에 따라 접근 을 제한할 수도 있어야 할 겁니다. 여기서는 웹 서버를 통해 Mercurial 중앙 저장소를 공유 하는 방법에 대해 살펴보겠습니다. 미리 준비해야 하는 것들  Python  Mercurial Python 패키지가 2.7 버전에 맞춰 나와 있으므로 Python 역시 2.7.x 버전을 사용 해야 합니다. 아래 URL에서 2.7.3 버전 윈도용 x86 MSI 설치 파일을 받으면 됩니다.  다운로드: http://www.python.org/download/  CD 경로: server programsmercurialpython-2.7.3.msi  Mercurial  웹 서버를 통해 사용할 것이므로 x86 윈도용 Python 2.7 패키지로 받습니다. 여기서는 2.2.3 버전을 사용합니다.  다운로드: http://mercurial.selenic.com/downloads/  CD 경로: server programsmercurialmercurial-2.2.3.win32-py2.7.exe  mod_wsgi  Python 웹 프로그램을 웹 서버에서 구동하는데 필요한 것이 wsgi 모듈입니다. mod_wsgi는 Apache에서 Python 웹 프로그램을 구동할 때 성능을 높일 목적으로 개발한 모듈입니다. 여 기서는 Apache 2.2, Python 2.7에 대응하는 3.3 버전을 사용합니다.  다운로드: http://code.google.com/p/modwsgi/wiki/DownloadTheSoftware?tm=2  CD 경로: server programsmercurialmod_wsgi-win32-ap22py27-3.3.so  hgweb.cgi  Mercurial 저장소를 웹으로 공유할 때 필요한 설정 정보입니다.  다운로드: http://www.selenic.com/hg/file/default/hgweb.cgi  CD 경로: server programsmercurialconfighgweb.cgi Python 설치 1. 설치 파일을 실행하면 설치 마법사가 나타납니다. Install for all users를 선택하고 Next를 누릅니다.
  • 41. Python 설치 마법사 2. 설치 디렉터리는 기본 설정을 사용합니다. 만약 다른 위치로 바꾼다면 설치 경로에 빈 칸이 있으면 안 되니 주의합니다. 설치 디렉터리 지정 3. 설치 항목은 기본 설정을 그대로 사용하면 됩니다. Next를 선택합니다.
  • 42. 설치 항목 지정 4. 설치 중입니다. 마칠 때까지 기다립니다. 파일 설치 화면 5. 설치를 마치면 완료 화면이 나타납니다. Finish를 눌러 설치 마법사를 마칩니다.
  • 43. 설치 완료 화면 Mercurial Python 패키지 설치 1. 설치 파일을 실행하면 설치 마법사가 나타납니다. 다음을 선택합니다. Mercurial Python 패키지 설치 마법사 2. 설치하는데 필요한 Python 버전을 확인하고 설치 위치를 보여 줍니다. 다음을 선택합니다.
  • 44. Python 설치 확인과 설치 위치 표시 화면 3. 설치 준비가 됐습니다. 다음을 선택해 설치합니다. 설치 준비 화면 4. 설치 중입니다. 마칠 때까지 기다립니다.
  • 45. 파일 설치 화면 5. 설치를 마치면 완료 화면이 나타납니다. 마침을 선택해 설치 마법사를 마칩니다. 설치 완료 화면 Mercurial 설정 먼저 시스템 환경 변수 중 Path 정보에 다음 내용을 추가합니다. 추가할 때는 이전 내용 뒤 에 세미콜론(;)을 붙여 내용을 구분합니다. C:Python27;C:Python27Scripts
  • 46. 여기서 잠깐! 환경 변수를 편집하려면, 윈도 7에서는 시작 메뉴 → 프로그램 및 파일 검색에서 ‘환경 변수’를 입력한 후 검 색 내용에서 ‘계정의 환경 변수 편집’을 선택하면 환경 변수 창이 뜹니다. 또는 제어판 → 시스템 및 보안 → 시스템 → 고급 시스템 설정 → 환경 변수를 선택합니다. 윈도 XP에서는 내 컴퓨터 아이콘을 마우스 오른쪽 버튼으로 선택 후 메뉴가 나오면 속성 선택 → 시스템 등록 정보 창에서 고급 탭 선택 → 환경 변수를 선택하 면 환경 변수 창이 뜹니다. 여기서 시스템 변수 내용 중 Path 정보를 선택하고 편집 버튼을 누르면 됩니다. Mercurial에서 가장 기본으로 설정해야 할 내용은 사용자 정보입니다. 이 내용은 Mercurial 설정을 저장하는 .hgrc 파일에 적으면 되는데 윈도 탐색기에서는 점(.)으로 시작하는 파일은 만들 수 없으므로 명령 창에서 다음 명령을 입력해 만듭니다. 참고로 사각 괄호([]) 안에 적은 내용은 키보드 입력을 뜻합니다. cd %userprofile% copy con .hgrc [ctrl+z] [enter] 위 내용을 입력하면 사용자 홈 디렉터리(윈도 7에서는 C:Users<username>, XP에서는 C:Documents and Settings<username>)에 .hgrc 파일이 생기는데 이 파일을 메모장 등 텍스트 편집기로 열어 다음 내용을 입력한 후 저장하고 닫습니다. 사용자 정보는 쉽게 알아 볼 수 있도록 ‘이름 <이메일>’ 형식으로 적으면 되는데, 여기서는 Mercurial 중앙 저장소를 설정하는 중이므로 관리자 정보를 넣었습니다. [ui] username = Hg Admin <hg.admin@plab.net> 여기서 잠깐! 버전 관리 시스템에서는 무엇을 어떻게 변경했는지 관리하는 것도 중요하지만 누가 바꿨는지도 중요합니다. 흔히 해당 시스템에 로그인한 계정 정보로 표시하기도 하지만 Mercurial과 같은 분산형 버전 관리 시스템에서 는 로그인 계정이 중요하지 않습니다. 왜냐하면 자신의 PC에서 만든 저장소에는 로그인 절차가 없으므로 사용 할 수 없을 뿐더러, 변경한 내용을 다른 저장소로 보낼 수도 있기 때문입니다. 그러므로 변경 내용을 기록할 때는 로그인 계정 대신 사용자 정보를 사용합니다. 명령 창에서 다음 명령을 실행하고 결과가 No problems detected라고 나오면 정상입니다.
  • 47. hg debuginstall Mercurial 설치 확인 저장소를 웹으로 접근할 수 있도록 하려면 몇 가지 설정을 추가로 해야 합니다. 여기서는 C:hgweb 디렉터리를 만들어 관련 설정 파일을 따로 보관하고, 이 디렉터리에 hgweb.cgi 파일을 옮긴 후 굵은 글씨로 표시한 내용에 주의해 다음처럼 바꿉니다.  파일 경로: C:hgwebhgweb.cgi  CD 경로: server programsmercurialconfighgweb.cgi #!C:/Python27/python.exe # # An example hgweb CGI script, edit as necessary # See also http://mercurial.selenic.com/wiki/PublishingRepositories # Path to repo or hgweb config to serve (see 'hg help hgweb') config = "C:/hgweb/hgweb.config" # Uncomment and adjust if Mercurial is not installed system-wide # (consult "installed modules" path from 'hg debuginstall'): #import sys; sys.path.insert(0, "/path/to/python/lib") # Uncomment to send python tracebacks to the browser if an error occurs: #import cgitb; cgitb.enable() from mercurial import demandimport; demandimport.enable() from mercurial.hgweb import hgweb, wsgicgi application = hgweb(config) wsgicgi.launch(application) 위 내용 중 config에서 지정한 것처럼 C:hgwebhgweb.config 파일을 만들고 다음처럼 설 정합니다.
  • 48. 파일 경로: C:hgwebhgweb.config  CD 경로: server programsmercurialconfighgweb.config [web] logourl = http://plab.net/hg/ baseurl = http://plab.net/hg/ encoding = EUC-KR allow_push = * push_ssl = false style = default allow_archive = bz2 gz zip [paths] / = C:/Repos/hg/*  logourl: 로고를 선택했을 때 이동할 URL입니다.  baseurl: 저장소를 접근하는데 사용하는 기본 URL입니다.  encoding: 웹 브라우저에서 사용하는 문자 인코딩 설정입니다. 기본 설정이 UTF-8이므로 소 스 코드 파일 인코딩이 UTF-8이면 이 설정은 없어도 됩니다.  allow_push: 저장소에 변경 내용을 넣을 수 있게 허용할 사용자를 지정합니다. *를 사용하면 누 구나 넣을 수 있습니다.  push_ssl: 기본 설정이 true이므로 SSL을 사용하면 이 설정은 없어도 됩니다.  style: 저장소에 웹 브라우저로 접근할 때 사용할 템플릿을 지정합니다. <Python 설치 디렉터 리>Libsite-packagesmercurialtemplates 에 있는 디렉터리 이름을 지정하면 됩니다.  allow_archive: 소스를 압축 파일로 받을 때 허용할 파일 형식을 지정합니다. [paths]에는 저장소 경로를 지정하는데 다음과 같이 이해할 수 있습니다. <baseurl 이후 경로> = <저장소 위치> 위 설정에서는 C:Reposhg 디렉터리에 만든 모든 저장소에 대한 기본 URL이 http://plab.net/hg/가 됩니다. 그러므로 저장소를 C:Reposhgsandbox에 만들면 이 저 장소에 대한 URL은 http://plab.net/hg/sandbox가 됩니다. 이 외 여러 설정에 대한 내용은 아래에서 살펴보시길 바랍니다.  Mercurial 설정 파일 설명  URL: http://www.selenic.com/mercurial/hgrc.5.html 그럼 실제 저장소를 만들어 보겠습니다. 설정에서 지정한 것처럼 C:Reposhg 디렉터리를 만들고 명령 창을 열어 이 디렉터리로 이동합니다. 그런 다음 아래 명령을 실행해 sandbox라 는 저장소를 만듭니다. hg init sandbox
  • 49. Apache 설정 Mercurial 저장소는 웹으로 접근할 수 있도록 설정했지만 웹 서비스를 운영할 수 있도록 해 주는 웹 서버에서 접근을 허용하지 않으면 아무런 쓸모가 없습니다. 지금부터는 Mercurial 을 웹 환경에서 쓸 수 있도록 설정합니다. 먼저 wsgi 모듈을 설정합니다. mod_wsgi-win32-ap22py27-3.3.so 파일을 Apache 설치 디렉터리 아래 modules 디렉터리에 복사합니다. 설치 경로를 바꾸지 않았으면 C:Program FilesApache Software FoundationApache2.2modules입니다. 그런 다음 httpd.conf 파일을 메모장 등 텍스트 편집기로 열고 다음 내용 중 굵은 글씨로 표시한 내용을 추가합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf # # Dynamic Shared Object (DSO) Support # ... #LoadModule version_module modules/mod_version.so #LoadModule vhost_alias_module modules/mod_vhost_alias.so LoadModule wsgi_module modules/mod_wsgi-win32-ap22py27-3.3.so 이번에는 Mercurial 저장소에 접근할 수 있게 httpd-vhosts.conf 파일을 열고 다음 내용 중 굵은 글씨로 표시한 내용을 추가합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confextrahttpd-vhosts.conf  CD 경로: server programsamconfighttpd-vhosts.conf ... # # VirtualHost example: # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost *:80> ScriptAlias /hg "C:/hgweb/hgweb.cgi" <Directory "C:/hgweb"> Order allow,deny Allow from all AllowOverride All Options ExecCGI AddHandler cgi-script .cgi
  • 50. </Directory> </VirtualHost> ... 이제 웹으로 접속 확인을 해보겠습니다. 먼저 Apache 서비스를 다시 실행해 변경 내용을 적 용한 다음 웹 브라우저로 http://plab.net/hg에 접속합니다. 저장소 목록에 sandbox가 나오 면 정상입니다. Mercurial 저장소 현재는 인증 절차가 없어 누구나 접속해 내용을 보거나 변경 내용을 서버에 반영할 수 있으므 로 처음 설치한 OpenLDAP을 사용해 인증하도록 바꿉니다. httpd.conf 파일에서 다음 내용 처럼 두 모듈을 찾아 주석을 해제합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf ... LoadModule authnz_ldap_module modules/mod_authnz_ldap.so ... LoadModule ldap_module modules/mod_ldap.so ... httpd-vhosts.conf 파일에 인증 과정을 거치도록 굵은 글씨로 표시한 내용을 추가합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confextrahttpd-vhosts.conf  CD 경로: server programsamconfighttpd-vhosts.conf ... # # VirtualHost example:
  • 51. # Almost any Apache directive may go into a VirtualHost container. # The first VirtualHost section is used for all requests that do not # match a ServerName or ServerAlias in any <VirtualHost> block. # <VirtualHost *:80> ScriptAlias /hg "C:/hgweb/hgweb.cgi" <Directory "C:/hgweb"> Order allow,deny Allow from all AllowOverride All Options ExecCGI AddHandler cgi-script .cgi </Directory> <Location "/hg"> AuthName "PLAB Hg Repositories" AuthType Basic AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://localhost/ou=People,dc=plab,dc=net?uid?sub?(objectClass=*)" Require valid-user </Location> </VirtualHost> ... Apache 서비스를 재실행한 후 다시 http://plab.net/hg에 접속하면 다음처럼 인증 확인 창 이 뜹니다. 인증 확인 창 OpenLDAP 계정 생성 과정에서 미리 만든 sandbox 계정을 입력해 봅니다. 정상적으로 인 증을 마치면 이전과 마찬가지로 Mercurial 저장소 목록을 볼 수 있습니다.
  • 52. Session 4. Redmine 설치 이전 세션에서는 Mercurial 중앙 저장소를 웹으로 공유할 수 있도록 설정을 마쳤습니다. 지 금부터는 버전 관리 시스템과 함께 단짝처럼 사용할 프로젝트 관리 시스템을 설치해 보겠습 니다. 미리 준비해야 하는 것들  Ruby  프로젝트 관리 시스템으로 사용하는 Redmine을 사용하려면 Ruby를 설치해야 합니다. 현재 Redmine 최신 버전인 2.0.3에서는 Ruby 1.8.7 버전 이상을 사용해야 합니다. 현재 Ruby 최 신 버전인 1.9.3-p194에는 thin 서버와 함께 쓰는데 문제가 있으므로 1.9.3-p125 버전을 사용합니다. 아래 다운로드 링크에서 Archives를 선택하면 찾을 수 있습니다.  다운로드: http://rubyinstaller.org/downloads/  CD 경로: server programsredminerubyinstaller-1.9.3-p125.exe  DevKit  Ruby에서 사용하는 여러 확장 모듈 중 일부는 윈도용 바이너리 파일이 없으므로 소스 코드 를 사용해 직접 바이너리 파일을 만들어야 합니다. 이를 도와주는 개발 툴입니다.  다운로드: http://rubyinstaller.org/downloads/  CD 경로: server programsredmineDevKit-tdm-32-4.5.2-20111229-1559-sfx.exe  ImageMagick  Redmine에서 Gantt 차트를 png 파일로 저장할 때 필요합니다. 필수는 아니므로 사용하지 않 으면 설치하지 않아도 됩니다.  다운로드: http://www.imagemagick.org/script/binary-releases.php#windows  CD 경로: server programsredmineImageMagick-6.7.7-6-Q16-windows-dll.exe  Redmine  현재 최신 버전인 2.0.3을 사용합니다.  다운로드: http://rubyforge.org/frs/?group_id=1850  CD 경로: server programsredmineredmine-2.0.3.zip  MySQL  Redmine에서 사용할 DB이며 5.0 이상을 권장합니다. 아직 설치하지 않았으면 ‘Session 2. 웹 서버와 데이터베이스’ 내용을 참고해 다음 내용을 진행하기 전에 설치합니다.  MySQL Connector  Redmine에서 MySQL DB를 사용할 때 필요합니다.  다운로드: http://www.mysql.com/downloads/connector/c/  CD 경로: server programsredminemysql-connector-c-noinstall-6.0.2-win32.zip  WinServ  Redmine을 윈도 서비스로 등록해 사용하는데 필요합니다.  CD 경로: server programsredminewinserv_1.11.zip Ruby 설치
  • 53. 1. 설치 파일을 실행하면 라이선스 동의 화면이 나타납니다. I accept the License를 선택하고 Next를 누릅니다. 라이선스 동의 화면 2. 설치 디렉터리를 기본 설정을 그대로 사용합니다. 바꾸더라도 경로에 빈 칸을 포함하지 않도 록 주의해야 합니다. 선택 내용을 모두 선택한 후 Install을 누릅니다. 설치 디렉터리 지정 3. 설치 중입니다. 마칠 때까지 기다립니다.
  • 54. 파일 설치 화면 4. 설치를 마치면 설치 완료 화면이 나타납니다. Finish를 선택해 설치 마법사를 마칩니다. 설치 완료 화면 DevKit 설치 1. 파일을 실행하면 압축을 풀어 줄 디렉터리를 묻습니다. 여기서는 C:DevKit으로 합니다. 2. 명령 창에서 파일을 설치한 곳으로 이동한 후 다음 명령을 실행합니다. 설치한 Ruby를 아래 처럼 인식하면 정상입니다 ruby dk.rb init
  • 55. DevKit 초기화 3. 명령 창에서 다음 명령을 실행해 설치합니다. ruby dk.rb install DevKit 설치 ImageMagick 설치 1. 설치 파일을 실행한 후 Next 버튼을 눌러 다음으로 계속 진행하며 설치 디렉터리 역시 기본 설정을 사용하면 됩니다. 2. 추가 항목 설정에서 ‘Add application directory to your system path’와 ‘Install development headers and libraries for C and C++’ 항목을 반드시 선택합니다.
  • 56. ImageMagick 추가 항목 설정 3. 이후 과정은 Install 버튼을 눌러 설치를 한 후 다음으로 진행해 설치를 마치면 됩니다. Redmine 설치 Redmine을 설치할 곳에 압축 파일을 풀어 줍니다. 여기서는 C:redmine에 설치합니다. 1.4.0 버전부터는 Ruby 확장 모듈 사이에 의존성을 관리하기 위해 Bundler를 사용하므로 먼저 설치해야 합니다(Ruby를 새로 설치할 때마다 다시 설치해야 합니다). 명령 창을 열고 C:redmine으로 디렉터리를 옮긴 후 다음 명령을 실행합니다(Redmine 설치 중 명령 창에서 실행하는 명령은 redmine 루트인 C:redmine에서 합니다). gem install bundler ImageMagick을 사용한다면 명령 창에서 다음을 실행해 ImageMagick을 설치한 경로 정보 를 설정합니다. set CPATH=C:Program FilesImageMagick-6.7.7-Q16include set LIBRARY_PATH=C:Program FilesImageMagick-6.7.7-Q16lib 명령 창에서 다음을 실행해 redmine을 설치합니다. bundle install --without development test postgresql sqlite 설치 결과는 다음과 같습니다.
  • 57. Redmine 설치 결과 Redmine과 함께 사용할 웹 서버인 thin을 설치합니다. 명령 창에서 다음을 실행합니다. gem install eventmachine --pre gem install thin 명령 창에서 다음 명령을 실행해 DB를 만듭니다. mysql> 부분은 첫 번째 명령을 실행해 MySQL에 로그인하면 나타나는 프롬프트이므로 입력하지 않습니다. 실행하면 이름이 redmine인 DB와 이름이 redmine인 계정을 만들고 해당 DB에 대한 사용 권한을 이 계정에 부여합니다. 입력할 때 my_password 부분은 계정에 대한 암호이므로 적절히 바꿉니다. mysql –u root –p mysql> create database redmine character set utf8; mysql> create user ‘redmine’@‘localhost’ identified by ‘my_password’; mysql> grant all privileges on redmine.* to ‘redmine’@‘localhost’;
  • 58. 여기서 잠깐! 만약 MySQL 버전이 여기서 사용한 것과 달리 5.0.2 이전이면 create database 내용까지만 실행하고 이후 내 용 대신 다음 명령을 실행합니다. mysql> grant all privileges on redmine.* to ‘redmine’@’localhost’ identified by ‘my_password’; 방금 만든 DB에 접속할 수 있도록 정보를 설정합니다. C:redmineconfig 디렉터리에 있는 database.yml.example 파일을 복사해 database.yml 파일을 만들고 production 부분을 찾아 다음처럼 수정합니다. Ruby 1.9를 사용하므로 adapter 내용이 mysql2인 것에 주의하고, username과 password에는 redmine DB에 대해 사용 권한을 부여한 계정 정보를 적습니다.  파일 경로: C:redmineconfigdatabase.yml  CD 경로: server programsredmineconfigdatabase.yml production: adapter: mysql2 database: redmine host: localhost username: redmine password: my_password encoding: utf8 여기서 잠깐! 만약 MySQL 포트 정보를 기본인 3306 대신 다른 것으로 사용한다면 위 DB 설정에 port: 5678 과 같이 설 정을 추가하면 됩니다. 명령 창에서 다음을 실행해 Session store secret 정보를 만듭니다. 실행 후에는 C:redmineconfiginitializerssecret_token.rb 파일이 만들어 진 것을 확인합니다. rake generate_secret_token 앞에서 만든 DB에는 아직 아무런 내용도 없으므로 명령 창에서 다음을 실행해 DB에 테이 블과 관리자 계정 정보를 추가합니다. set RAILS_ENV=production rake db:migrate
  • 59. 여기서 잠깐! 위 명령을 실행하기 전에 mysql-connector-c-noinstall-6.0.2-win32.zip 파일 압축을 풀고 liblibmysql.dll 파일을 C:Ruby193bin 디렉터리에 넣습니다. 그렇지 않으면 아래와 같은 오류 창이 뜹니다. 이번에는 DB에 기본 정보를 추가합니다. 하지 않아도 쓰는데 문제는 없지만 대신 필요한 기 본 정보를 모두 직접 입력해야 하므로 꼭 하길 권합니다. 명령 창을 닫지 않고 이어서 실행하 는 중이면 RAILS_ENV 부분은 다시 실행하지 않아도 됩니다. set RAILS_ENV=production rake redmine:load_default_data 명령을 실행하면 다음과 같이 추가할 기본 정보에 대한 언어를 묻습니다. 쉽게 설명하면 이슈 상태, 우선 순위 등 기본으로 추가하는 정보를 어느 나라 말로 번역한 것으로 사용할지 선택 하는 겁니다. 한국어로 번역한 내용을 사용하려면 ko를 입력한 후 엔터를 누르면 됩니다. 주 의할 점은 메뉴를 한글화하는 것과는 관계없습니다. 메뉴에 대해 표시할 언어는 Redmine 설정 메뉴에서 합니다. 여기서는 기본 설정인 영문 내용을 그대로 사용하겠습니다. 엔터를 누릅니다. 추가할 기본 정보 언어 선택 이제 기본 설치는 모두 마쳤으므로 접속 확인을 해 보겠습니다. 명령 창에서 다음 내용을 실행한 후 웹 브라우저로 접속해 봅니다. 기본 포트는 3000번이므로 http://plab.net:3000으 로 접속하면 됩니다. 관리자 계정은 이름 admin, 암호도 admin이 기본 설정입니다. 만약 접 속할 수 없으면 방화벽 설정을 확인합니다. ruby script/rails server webrick –e production 다음과 같은 첫 화면이 나오면 정상입니다. 접속을 확인한 후에는 명령 창에서 ctrl+c 키를 눌러 서비스를 중지합니다.
  • 60. Redmine 초기 화면 Webrick은 시험용으로 적당할 뿐 실제 서비스를 하기엔 성능이 좋지 않으므로 웹 서버를 사용해야 합니다. 여기서는 앞에서 설치한 thin을 윈도 서비스로 등록해 사용합니다. 계속하 기 전에 먼저 C:redmineconfigenvironment.rb 파일 아래에 다음 내용을 추가합니다. 이 내용을 빠뜨리면 CSS, 자바 스크립트 등이 제대로 동작하지 않습니다. Redmine::Utils::relative_url_root = "/redmine" Winserv_1.11.zip에는 winserv.exe가 있습니다. 이 프로그램을 C:Ruby193bin에 복사하고 명령 창에서 다음을 입력합니다(winserv에서 /redmine까지가 한 줄입니다.). "C:Ruby193binwinserv.exe" install "redmine1" -start auto "C:Ruby193binruby.exe" "C:Ruby193binthin" start -p 3001 -e production -c "C:redmine" --prefix /redmine "C:Ruby193binwinserv.exe" install "redmine2" -start auto "C:Ruby193binruby.exe" "C:Ruby193binthin" start -p 3002 -e production -c "C:redmine" --prefix /redmine net start redmine1 net start redmine2 여기서 잠깐! 등록한 서비스를 삭제하려면 "C:Ruby193binwinserv.exe" uninstall "redmine1" 처럼 입력하면 됩니다. 포트는 3001과 3002를 각각 사용하고 접두어로 redmine을 사용하므로 접속 주소는 http://plab.net:3001/redmine, http://plab.net:3002/redmine이 됩니다. 매번 접속 주소에 포 트 번호를 넣어야 하면 꽤 불편하므로 접속 주소를 좀 더 간편하게 만들어 보겠습니다. httpd.conf 파일에서 다음 내용처럼 해당 모듈 정보를 찾아 주석을 해제합니다.
  • 61. 파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf ... LoadModule proxy_module modules/mod_proxy.so ... LoadModule proxy_balancer_module modules/mod_proxy_balancer.so ... LoadModule proxy_http_module modules/mod_proxy_http.so ... 그런 다음 httpd.conf 파일 아래에 다음 내용을 추가합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf <IfModule proxy_balancer_module> ProxyPass /redmine balancer://redmine_cluster ProxyPassReverse /redmine balancer://redmine_cluster <Proxy balancer://redmine_cluster> BalancerMember http://127.0.0.1:3001/redmine BalancerMember http://127.0.0.1:3002/redmine </Proxy> </IfModule> 이제 Apache 서비스를 다시 실행하면 http://plab.net/redmine으로 접속할 수 있습니다. Redmine 인증 설정 설치를 마친 현재 상태 상태에서는 Redmine 자체 인증을 사용하므로 OpenLDAP으로 인증 을 사용하도록 바꾸겠습니다. Redmine에 접속한 후 관리자 계정으로 로그인합니다. 이전에 언급한 대로 관리자 계정 이름은 admin, 암호도 admin이 기본 설정입니다. 1. 로그인 후 첫 화면에서 Administration → LDAP authentication 메뉴를 선택합니다. Administration 메뉴
  • 62. 2. Authentication modes 화면이 나오면 New authentication mode를 선택합니다. New authentication mode 메뉴 3. 각 항목은 다음처럼 설정한 후 Create를 누릅니다. LDAP 설정  Name: LDAP 인증 설정에 대한 이름을 적절히 지정합니다. 여기서는 LDAP으로 했습니다.  Host: LDAP 서버 주소입니다. 여기서는 같은 서버에 있으므로 localhost로 합니다.  Port: 여기서는 기본 포트인 389를 사용하며 LDAPS는 선택하지 않습니다.  Base DN: 기본 DN입니다. 여기서는 dc=plab,dc=net을 적습니다.  Login: 로그인에 사용할 정보입니다. 여기서는 uid를 적습니다. 4. Administration → Settings 메뉴를 선택한 후 Authentication 탭을 선택합니다. 각 내용을 다음처럼 설정한 후 Save를 누릅니다.
  • 63. Authentication 탭 설정  Authentication required: Redmine에 기록한 여러 내용을 로그인해야 볼 수 있게 하려면 선택 합니다. 여기서는 선택합니다.  Autologin: 자동 로그인 기능입니다. 여기서는 disabled로 선택합니다.  Self-registration: 사용자 계정을 관리자 인증 없이 자동으로 등록할 것인지 설정합니다. 여기 서는 LDAP 인증을 사용하므로 manual account activation을 선택합니다.  Lost password: 암호 찾기 기능입니다. 여기서는 LDAP 인증을 사용하므로 해제합니다.  Allow OpenID login and registration: OpenID 인증을 사용할 수 있습니다. 여기서는 사용하지 않으므로 해제합니다. 5. 사용자가 계정을 등록하거나 관리자가 승인했을 때 서로에게 이메일로 통보할 수 있도록 설정합니다. C:redmineconfig 디렉터리에 있는 configuration.yml.example을 복사해 configuration.yml 파일을 만들고 다음 부분을 찾아 굵은 글씨로 표시한 부분을 적절히 고칩니다.  파일 경로: C:redmineconfigconfiguration.yml # default configuration options for all environments default: # Outgoing emails configuration (see examples above) email_delivery: delivery_method: :smtp smtp_settings: address: smtp.example.net port: 25 domain: plab.net authentication: :login user_name: account password: password  address: smtp 서버 주소입니다.
  • 64. port: smtp 서버 포트입니다.  user_name: smtp 서버 메일 계정입니다.  password: smtp 서버 메일 계정에 대한 암호입니다.  domain: 메일 계정에 대한 도메인 정보입니다. 여기서는 smtp 서버를 gmail로 설정하겠습니다. 아래 내용에서 user_name과 password만 각자 계정 정보로 고치면 됩니다. 설정을 바꾼 후에는 Redmine 서비스를 모두 중지 후 다 시 시작해야 합니다.  파일 경로: C:redmineconfigconfiguration.yml  CD 경로: server programsredmineconfigconfiguration.yml # default configuration options for all environments default: # Outgoing emails configuration (see examples above) email_delivery: delivery_method: :smtp smtp_settings: enable_starttls_auto: true address: smtp.gmail.com port: 587 domain: smtp.gmail.com authentication: :plain user_name: account@gmail.com password: password 6. 메일 설정을 마친 후에는 Administration → Settings 메뉴를 선택한 후 Email notification 탭을 선택해 메일 발송에 대한 추가 설정을 합니다.  Emission email address: 메일을 보낼 때 표시할 주소입니다.  Plain text mail (no HTML): 메일을 HTML이 아닌 일반 텍스트로 보내려면 선택합니다.  Default notification option: 언제 메일을 보낼지 선택합니다.  Select actions for which email notification should be sent: Default notification option에 대한 세부 내용입니다. 어떤 부분이 바뀔 때 메일을 보낼지 선택합니다.  Emails header, footer: 메일 내용에 머리말과 꼬리말을 추가할 수 있습니다. 7. 마지막으로 관리자가 메일 수신을 할 수 있도록 계정 정보를 수정합니다. Redmine 화면 오른쪽 위에서 My account 메뉴를 선택하면 현재 로그인한 자기 계정 정보를 수정할 수 있습니다. Information 내용에서 Email 정보를 정확히 입력하고 그 외 정보도 필요하면 적절히 바꿉니다.
  • 65. My account 메뉴 계정 추가 인증 설정 과정을 모두 마쳤으므로 이제 계정을 추가하는 방법에 대해 알아보겠습니다. 1. 사용자는 항상 Redmine 시스템에 접속해 계정을 추가합니다. http://plab.net/redmine에 접속한 후 화면 오른쪽 위에 있는 등록을 선택합니다. Redmine 계정 등록 화면  로그인: 로그인 계정 이름을 적습니다. 여기서는 sandbox로 계정을 만들겠습니다.  비밀번호, 비밀번호 확인: Redmine 자체 인증을 사용할 때 이 암호를 사용합니다. 여기서는 LDAP 인증을 하므로 실제 사용하지 않지만 계정을 등록하기 위해 형식적으로 적습니다.  이름, 성: 사용자 성과 이름을 나눠 적습니다. 여기서는 sand, box로 나눠 적겠습니다.  메일: 사용자 이메일 정보를 적습니다. 이 메일 계정으로 메일 수신을 하므로 정확히 적습니다.  언어: 메뉴를 표시할 언어입니다. 여기서는 English를 쓰겠습니다.
  • 66. 2. 사용자가 계정을 등록하면 관리자 승인을 기다리는 상태가 되며, 관리자는 사용자가 계정을 등록했다는 내용으로 메일을 받게 됩니다. 관리자는 Redmine에 로그인 후 Administration → Users 메뉴를 선택하고 Filters에서 Status를 registered로 선택하면 현재 등록 후 승인 을 기다리는 계정을 볼 수 있습니다. 계정 목록 3. Users 메뉴에서 등록 대기 중인 계정 이름을 선택하면 상세 내용을 볼 수 있습니다. 이전에 인증 시스템을 구성하면서 LDAP 계정을 추가한 것을 참고해, 등록한 정보대로 LDAP에 실제 계정을 추가합니다. LDAP 계정을 추가할 때 암호는 임의로 설정하고, 사용자가 다시 변경하 도록 계정을 승인한 후에 알려주면 됩니다. 여기서는 이전에 추가해 둔 sandbox 계정을 사 용하므로 다시 추가하지 않아도 됩니다. 4. LDAP에 계정을 추가했으면 이제 계정을 사용할 수 있도록 승인합니다. 승인 대기 중인 계정 정보를 살펴보면 Authentication mode가 있는데 기본 설정은 Internal입니다. 하지만 Redmine 자체 인증이 아닌 LDAP 인증을 사용하므로 Authentication mode를 Internal이 아닌, 앞에서 LDAP 인증 설정을 추가하면서 지정한 이름을 선택하면 됩니다. 여기서는 LDAP이 됩니다. 계정 정보 5. 인증 설정 후에는 Save를 선택해 저장하고 화면 오른쪽 위에 있는 Activate 메뉴를 선택해 승인하면 됩니다. 다시 Administration → Users 메뉴를 선택해 보면 sandbox 계정이 활성 화된 것을 볼 수 있습니다.
  • 67. 활성화 계정 목록 이 상태에서 현재 로그인한 관리자 계정을 로그오프하고 방금 만든 sandbox 계정으로 로그 인하면 정상적으로 동작하는 것을 확인할 수 있습니다. sandbox 계정 로그인 화면
  • 68. Session 5. CI 서버 설치 저장소에 추가한 변경 내용을 항상 자동으로 통합해 빌드해 주는 CI 서버를 설치해 보겠습니 다. 미리 준비해야 하는 것들  NAnt  C++, C#용 빌드 스크립트를 만드는 툴입니다. 여기서는 0.92 버전을 사용하며 미리 빌드해 둔 실행 파일 패키지인 nant-0.92-bin.zip 파일을 받으면 됩니다.  다운로드: http://sourceforge.net/projects/nant/files/nant/0.92/  CD 경로: server programsjenkinsnant-0.92-bin.zip  Visual Studio  여기서는 Visual Studio 2010을 사용해 빌드하므로 미리 설치해 둬야 합니다만 과정은 따로 설 명하지 않습니다.  Jenkins  CI 서버입니다. 여기서는 현재 최신 버전인 1.472, 윈도용 패키지를 사용합니다.  다운로드: http://jenkins-ci.org/  CD 경로: server programsjenkinsjenkins-1.472.zip NAnt 설치 별도 설치 과정 없이 압축 파일 내용만 풀어 주면 됩니다. 다만 모든 환경을 공통으로 맞추기 위해 C:nant에 내용을 풀어 줍니다. 그런 후 명령 창에서도 쉽게 실행할 수 있도록 시스템 환경 변수 Path에 C:nantbin을 추가합니다. Jenkins 설치 1. zip 파일 압축을 푼 뒤 setup.exe를 실행하면 설치 마법사가 나타납니다. Next를 선택합니 다.
  • 69. Jenkins 설치 마법사 설치 디렉터리는 기본 설정을 사용하고 Next를 선택합니다. 설치 디렉터리 지정
  • 70. 설치 디렉터리 지정 2. 설치 준비가 되면 Install을 선택합니다. 설치 준비 화면 3. 설치 중입니다. 완료될 때까지 기다립니다.
  • 71. 파일 설치 화면 4. 설치를 마치면 설치 완료 화면이 나타납니다. Finish를 선택해 닫습니다. 설치 완료 화면 설치를 마치면 윈도 서비스까지 자동으로 등록해 실행합니다. 기본 포트는 8080을 사용하므 로 http://plab.net:8080으로 접속해 첫 화면이 나타나면 정상입니다.
  • 72. Jenkins 첫 화면 5. Apache 웹 서버를 통해 접속하도록 http.conf 파일에서 다음 내용을 찾아 주석을 해제 합니 다. 이전에 Redmine 설치 과정을 진행했으면 이미 해제한 상태입니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf ... LoadModule proxy_module modules/mod_proxy.so ... LoadModule proxy_http_module modules/mod_proxy_http.so ... httpd.conf 파일에 다음 내용을 추가합니다.  파일 경로: C:Program FilesApache Software FoundationApache2.2confhttpd.conf  CD 경로: server programsamconfighttpd.conf ProxyRequests Off <Proxy http://127.0.0.1:8080/jenkins*> Order deny,allow Allow from all </Proxy> ProxyPass /jenkins http://127.0.0.1:8080/jenkins ProxyPassReverse /jenkins http://127.0.0.1:8080/jenkins 6. Jenkins 설치 디렉터리에 있는 jenkins.xml 파일 내용 중 <arguments> 항목을 찾아 다음처 럼 --prefix=/jenkins를 추가합니다.  파일 경로: C:Program FilesJenkinsjenkins.xml  CD 경로: server programsjenkinsconfigjenkins.xml
  • 73. <arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -jar "%BASE%jenkins.war" --httpPort=8080 --prefix=/jenkins</arguments> 7. Jenkins와 Apache 웹 서버를 모두 중지했다 새로 시작하면 http://plab.net/jenkins로 접 속할 수 있습니다. Jenkins 설정 웹 브라우저로 Jenkins에 접속 후 Jenkins 관리 → 시스템 설정 메뉴에 접속합니다. 기본적인 설정은 모두 이 메뉴에서 할 수 있습니다. 먼저 빌드 결과를 메일로 받을 수 있도록 설정해 보겠습니다. 시스템 설정 메뉴 내용 중 가장 아래에 E-mail로 알려줌 항목을 설정하면 됩니다. SMTP 서버를 사용할 때 인증이 필요하 면 고급 버튼을 눌러 나오는 Use SMTP Authentication을 선택해 추가 정보를 입력하면 됩 니다. 만약 gmail을 사용한다면 다음처럼 설정 후 저장 버튼을 누르면 됩니다. 메일 알림 설정  SMTP 서버: smtp.gmail.com  Sender E-mail Address: @gmail.com을 포함한 gmail 계정  Use SMTP Authentication: 선택  사용자명: @gmail.com을 포함한 gmail 계정  SSL 사용: 선택  SMTP Port: 465 Jenkins 설치를 마치면 접근 권한 설정이 전혀 안 되어 있어 누구나 설정 내용을 쉽게 바꿀 수 있으므로 권한 설정을 합니다. 계정 관리에는 다른 시스템과 마찬가지로 LDAP을 사용합
  • 74. 니다. 그런데 각 계정에 대해 Jenkins에서 일일이 권한을 설정하려면 상당히 번거롭습니다. 하지만 Jenkins에서는 LDAP에 있는 그룹 정보를 사용해 매우 간편하게 처리할 수 있습니 다. 1. LDAP Admin을 실행해 이전에 만든 plab.net으로 접속합니다. LDAP Admin 접속 화면 2. 앞서 sandbox 계정을 만들 때처럼 시스템 관리자로 쓸 계정을 만듭니다. 여기서는 admin으 로 만들겠습니다. admin 계정 추가 3. 관리자 계정과 일반 개발자 계정을 관리할 그룹을 만듭니다. 여기서는 관리자 그룹을
  • 75. jenkinsadmins, 일반 개발자 그룹을 jenkinsdevs로 만듭니다. LDAP에 그룹을 만들려면 LADP Admin 화면 왼쪽 목록에서 ou=Groups를 선택하고 마우스 오른쪽 버튼을 눌러 New → Group을 선택합니다. LDAP 그룹 만들기 Create Group 창이 뜨면 Group name에 그룹 이름, Description에 설명을 적고 Add 버튼 으로 그룹에 포함할 계정을 추가합니다. 그룹을 만든 후에 추가하려면 해당 그룹을 선택한 후 Propreties 메뉴를 실행해 계정을 추가하면 됩니다. jenkinsadmins 그룹 추가 4. 일반 개발자 그룹도 마찬가지 과정으로 만듭니다. 여기서는 멤버로 sandbox 계정을 추가했
  • 76. 습니다. jenkinsdevs 그룹 추가 5. 웹 브라우저로 Jenkins에 접속 후 Jenkins 관리 → 시스템 설정 메뉴에서 Enable security 를 선택하면 보안 설정이 나타납니다. Jenkins 보안 설정 활성화 6. Access Control – Security Realm에서 LDAP을 선택하고 고급 버튼을 눌러 다음처럼 설정 합니다.
  • 77. LDAP 설정  서버: localhost  root DN: dc=plab,dc=net  User search filter: uid={0} 7. Access Control – Authorization에서 Matrix-based security나 Project-based Matrix Authorization Strategy를 선택합니다. 둘 모두 그룹, 계정별 권한을 설정할 수 있지만 Project-based는 여기서 하는 기본 설정을 바탕으로 프로젝트별로 권한을 더 추가할 수 있 습니다(기본으로 설정한 권한을 해제하지는 못합니다). 여기서는 Project-based Matrix Authorization Strategy를 선택합니다만 모든 프로젝트에 대해 동일한 권한을 설정한다면 Matrix-based security가 더 간편합니다. Authorization 설정 8. User/group to add에 앞에서 만든 LDAP 그룹을 적습니다. ROLE_을 접두어로 붙이고 그 룹 이름을 모두 대문자로 쓰면 됩니다. 그룹을 추가한 후에는 각 그룹과 계정에 대한 권한을 설정합니다. 여기서는 관리자 그룹에 모든 권한을 주고, 개발자 그룹은 시스템에 접속해 내용 만 볼 수 있지만 빌드 설정을 생성, 변경, 삭제는 못하며 빌드를 직접 실행하는 것도 못 하도 록 했습니다.
  • 78. Authorization 설정  Anonymous: 모든 권한 해제  ROLE_JENKINSADMINS: 모든 권한 설정  ROLE_JENKINSDEVS: Overall Read, Job Read, View Read 설정
  • 79. Track 3. 파워업 유틸리티 맛보기
  • 80. Session 1. 버전 관리 시스템 기본 개념 Mercurial은 분산형 버전 관리 시스템으로 중앙 집중형 버전 관리 시스템과 구조가 다르므 로 기본적으로 알고 있어야 할 개념만 간단히 설명합니다. 더 자세한 내용은 해당 부분에서 추가로 더 설명합니다. 버전 관리 시스템에서는 변경 내용을 추적하고 관리하기 위해 특별한 영역을 사용하는데 이 를 저장소(repository)라고 합니다. 즉 버전 관리를 시작하려면 항상 저장소를 먼저 만들어 야 합니다. 위 그림을 보면 각 저장소가 두 부분으로 나뉘어 있는데 working directory는 개발자가 코드 등을 변경하며 작업을 하는 공간이고, 이런 변경 내용을 기록해 Mercurial에 서 관리하기 위해 사용하는 공간이 바로 .hg입니다. 그러므로 잘 모른다면 .hg 안에 있는 내용을 함부로 고쳐서는 안 됩니다. 각 저장소는 모두 독립적으로 이력을 관리할 수 있고 변경 내용을 서로 주고 받으며 동기화할 수 있습니다.
  • 81. 원래 Mercurial은 명령 창에서 명령을 직접 실행해야 하지만 여기서는 윈도용 Mercurial GUI 클라이언트인 TortoiseHg를 사용해 설명합니다. TortoiseHg는 다음에서 받을 수 있으 며 현재 최신 버전은 2.4.2입니다.  TortoiseHg 다운로드  URL: http://tortoisehg.bitbucket.org/ 설치 과정은 특별한 것이 없으므로 생략합니다. 설치를 마친 후 가장 먼저 할 것은 사용자 정보를 설정하는 겁니다. 바탕화면에서 마우스 오른쪽 버튼을 누르고 컨텍스트 메뉴가 나오 면 TortoiseHg → Global Settings를 선택합니다. TortoiseHg 컨텍스트 메뉴 Global settings 창에서 Commit을 선택한 후 Username을 다음 형식으로 설정합니다. full name <account@email.com>
  • 82. Global Settings 창 내용 진행하기에 앞서 한 가지 기억해야 할 것은 앞으로 설명하는 모든 내용은 컨텍스트 메뉴에 서 TortoiseHg를 선택해 펼쳐지는 메뉴에서 모두 동일하게 할 수 있습니다. 하지만 TortoiseHg에는 윈도 탐색기를 열지 않고도 모든 기능을 실행할 수 있는 워크벤치 (workbench)라는 매우 편리한 환경을 제공하므로 이를 이용해 설명합니다. 바탕화면 또는 윈도 탐색기에서 마우스 오른쪽 버튼을 누른 후 Hg Workbench를 선택하면 됩니다.
  • 83. TortoiseHg Workbench 저장소 만들기 앞에서도 얘기했듯 버전 관리를 하려면 가장 먼저 해야 하는 것이 저장소를 만드는 일입니 다. 워크벤치를 실행한 후 File → New Repository를 선택하면 다음처럼 Init 창이 뜹니다. Destination path에 저장소를 만들 위치를 지정한 후 Create 버튼을 누르면 됩니다. 저장소 만들기 저장소를 만들면 워크벤치에도 등록되는데 아직 변경 내용은 없으므로 Working Directory 만 표시하고 있습니다. 워크벤치 구성은 다음과 같습니다.
  • 84. 이력 표시 저장소 목록 커밋 로그 변경 파일 표시 변경 내용 표시 워크벤치 구성 파일 추가 이전에 만든 저장소에 hello.txt 파일을 만들고 다음 내용을 추가합니다. Hello, Mercurial! hello.txt 파일 추가 워크벤치에서 변경 파일을 표시하는 창 위, 또는 툴바에 있는 버튼을 누르면 변경 파일 목록에 hello.txt 파일이 나타납니다. 아직은 Mercurial에서 관리하지 않는 파일이므로 ?로 표시하는데 이 파일을 마우스 오른쪽 버튼으로 선택한 후 Add를 누릅니다.
  • 85. hello.txt 파일 추가 워크벤치에서는 해당 파일을 녹색으로 표시하고 상태는 ?에서 A로 바뀝니다. 하지만 아직 저장소에 추가한 것은 아니며 추가 예정이라고 표시만 해 둔 상태입니다. 변경 파일 표시창 에는 .hgignore 파일도 있는데 자세한 설명은 나중에 하기로 하고 이 파일도 마찬가지로 Add로 추가합니다. 이때 윈도 탐색기로 해당 파일을 보면 다음과 같습니다. 파일 추가 상태 이제 기록으로 남길 내용을 워크벤치 커밋 로그 창에 적습니다. Hello, Mercurial!
  • 86. 커밋 로그 기록 파일 목록에서 hello.txt와 .hgignore 앞에 있는 체크 박스를 모두 선택해 체크 표시를 하고 Commit 버튼을 누릅니다. 커밋(commit)은 저장소에 파일을 추가하는 것을 뜻합니다. 이력 표시창에는 방금 커밋한 내용이 나타납니다. 첫 커밋 후 이력 윈도 탐색기에서 파일 상태는 다음과 같습니다. 파일 커밋 후 상태 이제부터 이 두 파일은 버전 관리를 할 수 있는 상태입니다. 파일 변경 hello.txt 파일을 열고 다음 내용을 추가하고 저장합니다.
  • 87. Hi, TotoriesHg! 윈도 탐색기에서 파일 상태는 다음처럼 바뀌어 어떤 파일이 바뀌었는지 표시합니다. 파일 변경 후 상태 워크벤치 이력 표시 창에서 Working Directory를 선택하면 현재 작업 영역 상태를 표시하 는데 hello.txt 파일이 변경됐다는 표시로 M을 붙이고 파란색으로 나타냅니다. M은 변경 (Modified)을 뜻합니다. 파일 변경 후 워크벤치 상태 워크벤치 파일 목록에서 hello.txt를 선택하면 오른쪽 아래에 있는 변경 내용 표시 창에서 변경 내용을 간단히 볼 수 있습니다. 현재 hello.txt 파일은 버전 관리 중이므로 add를 다시 할 필요가 없으며 로그를 적은 후 바로 커밋하면 됩니다.