레드마인(Redmine)

1인 프로젝트가 많은 관계로 이런 저런 프로젝트를 수행하는데, 문제가 혼자 하다보니 혼자 작업하는 내용에 대한 이력관리가 잘 안된다. 물론 협업이 아니다 보니, 스스로 이런 저런 사실들이 타인에 의한 직접 변경은 없으니, 스스로만 잘 단속하면 문제가 없을지는 모르겠다. 하지만, 필자의 경우 기억력이 그다지 좋은 편이 아니라, 내가 작업한 내용에 대한 정확한 정보를 모르는 경우가 많다.

이를 위해 버전 관리와 형상관리를 스스로 챙기는 편인데, 버전관리는 SVN을, 형상관리로는 Redmine을 사용한다.

지금껏 Redmine을 잘 사용하고는 있는데, 참 답답한 부분이 Web UI이다.

물론 Web UI가 나쁘다는 의미는 아니다. 의외로 심플하게 구성되어 가독성도 높고, 기능을 안쪽으로 잘 넣어서, 해당 기능을 찾아 열게 되면 그 기능이 나름 쏠쏠하다.

image

 

불편한점 - 작업 시간 입력

하지만 심플하고 직관적으로 디자인 했다고는 하지만, 실제 활용하기에는 불편한 점도 이곳 저곳 있다.

그 중에, 가장 쓰고 싶은 기능이였지만, 입력하기 귀찮아서 못쓰는 기능이 바로 "작업 시간 등록"이다. 해당 Issue를 처리하는데, 소요된 시간을 기록하는 방편인데, 이게 단계가 너무 깊다. 
필자의 경우 작업할 때는 보통 위와 같은 화면을 띄워놓고 작업을 하게 되는데, 지금 하고 있는 작업에 대해서 Time을 기록하려다 보면, 약 3단계의 단계를 거쳐 입력을 해야 한다. 단계별로 진행하는 방법은 다음과 같다.

먼저 해당 Issue를 선택한다.

image

그리고 "작업 시간 기록" 이라는 부분을 클릭한다.

image

그리고 나오는 입력 폼 안의 내용 중 작업시간/시간/작업종류 에 해당하는 값들을 반드시 넣어야 한다. 물론 가급적이면 설명도 같이 넣어주는게 좋다.

image

저장을 하면 아래와 같이 뜨는데, 다시 목록으로 들어가려면 "일감" 이라는 상위 메뉴를 클릭해야 한다.

image

물론 그 까이꺼 그냥 계속 하면 되지 않냐, 싶긴 한데, Issue의 종류가 수없이 많은데다가, 일일히 시간을 입력하다보면, 차츰 시간 입력이 저절로 꺼려지기 시작하는 것 같다.

프로젝트 진행 속도를 측정하기 위한 좋은 자료를 이렇게 날려 먹는 기분이 들었다.

그래서 그냥 짜봤다.

 

시간 입력기

현재 네이버 개발자 쪽에 하나 열었다. ( http://dev.naver.com/projects/redmineassist/ )
여긴 SVN을 통해서 접근이 간단하기 때문에, 의외로 사용하기 좋다. 어차피 회사 프로젝트야 여기다 올리긴 어렵지만, 개인적으로 만드는 프로그램 올리기는 괜찮은듯..

위의 작업을 단순화 하기 위해서 필요한 기능은 아래와 같았다.

  1. 자동으로 프로젝트, 이슈들을 읽어온다.
  2. 현재 작업 중인 작업을 바로 선택한다.
  3. 선택한 순간 부터의 시간을 계산해서 저장한다.
  4. 작업이 완료되면 완료 확인을 하는 순간, 작업 시간 등록이 된다.

이 4가지 작업을 위해 프로그램을 짰고, 그 결과물이다.

먼저 사용상의 편의를 위해 Tray Icon을 활용했다.

image

그 이유 중 하나가 작업 할 때 보통 Visual Studio를 화면 가득 채워서 작업을 하는데, 저 내용을 처리하기 위해 Form 기반의 App을 만들어 놓게 되면, 매번 화면 전환을 해야 했다. 그래서 차라리 접근하기 좋도록 Tray Icon 기반으로 구성했다.

Issue 처리를 두 가지 단계를 거친다.

첫번째 단계는 실제 작업을 진행 할 Issue 를 선택하는 것이다. 즉 실제 작업을 하는 것은 아니지만, 곧 시작하거나, 진행할 예정인 단계를 의미한다. 이 단계를 통해 수많은 Issue 중 지금 당장 작업할 Issue를 끄집어 내는 것이다.

image

다음 단계는 자신이 수행할 작업을 선택한다. 즉 이제 진짜 작업을 진행한다는 의미다.

Tray Icon 메뉴에서 자신이 수행할 작업을 클릭하면 그 순간 부터 시간을 자동으로 잰다. 물론 시간(HOUR) 단위니까, 정확하게 측정하는 것은 아니다. 하지만, 몇시에 시작했는지를 별도로 메모하거나 기억해 낼 필요는 없으니 괜찮은 것 같았다. 시작된 작업은 아래처럼 체크 표시가 되며, ToolTip으로 대략적인 시간을 표시해 준다.

image

세번째 단계는 이제 작업을 클릭해서 종료하는 작업이다. 이 작업을 수행하면, 작업시간을 등록하기 위한 Form을 제공한다.

image

저기서 작업일자와 소요시간을 자동으로 입력해준다. 물론 입력하기 전에 변경해줄 수 있다.

 

정리

위와 같은 컨셉으로 급조했고, 해당 소스와 실행 파일을 네이버 개발자 사이트에 등록했다.

아직은 미흡하고, 불편하고, 느리기 까지하긴 한데, 현재 회사내에서 작업중인 프로젝트 틈틈히 개선해 나갈 예정이다. 아직 Redmine에서 제공하는 REST API가 기능이 많이 약한 편이라, 의외로 작업하기가 쉽지 않다. 게다가, 필자가 가진 Redmine을 1.3 버전이다 보니, 2.x 대에 올라오면서 생긴 REST API는 동작하지 않고 있다.

의외로 까다롭긴 한데, 나름 쓸만한 도구가 될 거 같다는 생각은 든다.

시간을 잰다는게 어떻게 보면, 감시를 하는 도구 처럼 느낄 수 있다. 스톱워치 들고 생산라인을 돌면서 "1번 라인 10초 늦어 더 빨리 달려!" 이런 것들은 예전부터 들어왔고, 당해보기도 했으며, 상상도 그리 어렵지 않다.

하지만, 스스로의 작업 시간을 정확히 계산할 수 있는 자료가 있다면, 먼저 자신의 업무 수행 속도를 정확히 추출해 낼 수 있으며, 그 속도를 알게 되면 다음 작업 혹은 프로젝트를 할 때 정말 예측 가능한 레벨로 떨어진다. 그럼 WBS의 정확도는 더욱 확실해지고, 예측 가능하므로, 다음 업무를 진행하는데, 남고 모자름이 훨씬 덜해지지 않을까?
( 그래도 역시 감시레벨로 떨어진다면 아예 안하는게 나을 수 있다. )

728x90


gantt.zip

레드마인을 Bitnami 버전으로 설치해서 사용 중이다. Windows 기반의 서버에 설치해서 잘 사용 중인데, 애석하게도 Gantt 차트를 열어서 PNG로 내보내기를 하려는데, 한글이 깨져 나온다.

일단 Gantt 차트를 꺼내 보면 한글은 큰 이상 없이 나온다. ( Bitnami 버전의 레드마인 중, 1.1.2-1 버전 이상을 설치하면 무조건 UTF-8 형태로 지원된다. 지금(2012년 10월 23일 기준) 최신 버전은 2.1.2-0 이다. )


내보내기하는데, PDF의 경우에는 문제가 안되지만, PNG일 때 한글이 깨져 나오는 문제가 있다.
가끔 문서에 첨부해야 해서 PNG로 뽑아야 할 때 난감하다.

그래서 이런 저런 글들을 참고했는데, Redmine 사이트 내에서 해당 Issue가 나왔었고, 해당 Issue에 대해서 어떻게 대처하는지가 나왔다.
( http://www.redmine.org/issues/4787 )

레드마인 소스가 있는 위치를 먼저 알아야 한다. Bitnami로 설치했다면, 대개 Program Files 라든가, 기타 설치 시 결정한 경로에 설치가 되어 있는데, 그 위치를 %Bitnami% 라고 한다면...

%Bitnami%\apps\redmine\lib\redmine\helpers

라는 폴더 안에 gantt.rb 라는 파일이 있는데, 그 파일 안을 수정해야 한다.

해당 파일을 열고 아래의 소스가 있는 위치까지 이동한다.

imgl = Magick::ImageList.new
imgl.new_image(subject_width+g_width+1, height)
gc = Magick::Draw.new

# Subjects
gc.stroke('transparent')

그리고

gc = Magick::Draw.new
다음 줄에
gc.font = "C:\\Windows\\Fonts\\malgun.ttf" 
라는 코드를 넣는다.

결론 적으로 다음 코드같이 되어 있어야 한다.

imgl = Magick::ImageList.new
imgl.new_image(subject_width+g_width+1, height)
gc = Magick::Draw.new
gc.font = "C:\\Windows\\Fonts\\malgun.ttf"
		
# Subjects
gc.stroke('transparent')

즉 Draw 안에 Font 경로를 넣어 해당 TTF 폰트 파일을 읽어서 처리하도록 하는 것이다.(만일 맑은고딕이 아닌 굴림체인 경우 Gulim.ttf 라고 넣으면 된다.  )

자체적으로 컴파일 하기 때문에, gantt.rb 파일을 수정한 뒤, 다시 PNG로 내보내기를 해보면, 정상적으로 한글이 출력된 PNG를 받을 수 있다.
( 만일 내부 캐쉬가 있는 경우 새로운 PNG 파일을 안 만들고 기존에 만든 것을 자꾸 뿌려줘서 수정이 안된 것 처럼 느낄 수도 있지만, 웹 브라우저의 다시 읽기나, 완전 다시 읽기 - Ctrl + F5를 누르는 등- 의 재시도를 시도하면 정상적으로 출력되는 것을 확인할 수 있다. )

 일단 Gantt.rb 파일을 첨부하긴 했는데, 가급적 직접 소스를 손대는 것을 추천한다.
그 이유가 현재 필자가 가진 소스의 버전과 실제 적용할 소스의 버전이 틀려 오류가 발생할 수 있기 때문이다.
( 필자의 소스는 BitNami Redmine Stack 1.3.1-1 이다 )

728x90
USE MYDB; 
GO 
ALTER DATABASE MYDB SET RECOVERY SIMPLE; 
GO 
DBCC SHRINKFILE (MYDB_log, 130); 
GO 
ALTER DATABASE MYDB SET RECOVERY FULL;
728x90

전제사항

제일 먼저 서버군에 대한 지식을 어느 정도 알고 있어야 합니다. Active Directory가 무엇인지, Join 이란 무엇인지, IIS 설정은 어떻게 들어가야 하는지 등등. 이에 대한 배경 지식을 쌓기가 쉽지는 않겠지만, Windows Server 2008 R2에 대한 서적을 찾아보고, 직접 Windows Server 2008 R2를 설치해서 사용하다 보면 어느 정도 파악할 수 있을 것입니다. 일부 기본적으로 파악해야 된다고 생각되는 사항은 넘어갔습니다. 가급적이면 기본적인 서버 인프라에 대한 이해는 어느정도 하셔야 할 것 같습니다.

준비 사항.

먼저 환경을 구성하기 위한 서버 제품들을 확보해야 해야 합니다. 최소한 MSDN에 가입되어 있어야 여기서 제시하는 설치방법을 진행할 수 있습니다. (단독 제품으로 구매했다면, 제약이 많거나, 예제와 달라질 수 있습니다.)

필요한 서버 제품들은 다음과 같습니다.

  • Windows Server 2008 x64 이상
  • MS SQL 2008 이상.
  • Windows SharePoint Service 3.0 이상

물론 TFS 안에는 MS SQL Express 2008과 WSS 3.0 설치 파일을 가지고 있습니다. 그래서 Standalone으로 설치하면다면 자동으로 해당 제품들을 기준으로 자동 구성됩니다. 하지만 운영하는데 제약점이 될 수 있기 때문에, 가급적 Database와 SharePoint를 각기 설치하는 것이 좋습니다.

여기서 예제로 구성할 땐, Windows Server 2008 R2 Standard 1 Copy, Team Foundation Server 2010  1 Copy,  MS SQL 2008 Standard Edition, SharePoint Foudnation 2010 정도로 구성할 예정입니다.

그리고 인증 서버가 반드시 필요합니다. 여기서 사용되는 인증 서버는 Active Directory 라는 환경을 사용하게 됩니다.  서버간의 인증에서 부터, 사용자 관리, 권한 설정까지 모두 Active Directory를 이용하는 것입니다. 단, 주의할 점은 한 대의 서버에 모든 서비스를 담는다고 TFS가 설치될 서버에 ActiveDirectory를 얹어서는 안됩니다. 반드시 별도의 PC를 마련해 별도의 PC 내에 Active Directory 서버를 구축하고, TFS와 완전히 물리적으로 분리되어 있어야 합니다.

이 예제에서는 사내에서 사용되는 AD에 붙어서 작업할 예정입니다.

 

서버 설치

운영체제 설치

MS Windows Server 2008 R2를 설치합니다. 근래 MS에서의 서버 제품 군 대부분은 x64로 동작하다 보니, 자연스럽게 운영체제 역시 x64로 설치됩니다.. 2008 R2도 별다른 표기가 안되어 있지만, 실제로 설치해보면 x64 입니다. 운영체제 설치는 여기 범위에서 벗어나므로 일단 넘어갈 예정입니다. 기본적인 설치 과정에서 벗어나는 것이 없기 때문입니다. 다만, 설치한 후 몇 가지 추가적인 설정이 있습니다.

  1. 컴퓨터 이름을 설정한다.
    최초 설치할 때 설정할 수 있지만, 자동으로 설치 진행하는 경우 자동으로 만들어진 서버이름을 그대로 쓰는 경우가 있습니다. 물론 그대로 서버이름 변경없이 사용할 수도 있지만, 그 때마다 암호문 같은 이름 ( 예를들면 WIN-798FXE112  같은 이름)으로 사용한다는 것도 문제가 있다고 봅니다. 물론 사용 중에 중간에 바꿀 수 있지만, 그 경우 이미 설치된 제품들이 제대로 동작되지 않는 경우가 발생될 수 있습니다. 그러므로, 구성하기 전에 컴퓨터 이름을 적절하게 설정합니다.
    여기서는 TFSTest 라는 이름으로 설정했읍니다.
  2. IE 보안 정책을 끈다.
    서버 내에서 Internet Explorer를 거의 쓸 일이 없기 때문에, 직접 서버 내에서 IE를 안전하게 쓰라고 보호막을 구성했고, 기본적으로 활성화 되어 있습니다. 하지만, 굳이 보안에 민감한 사항이 아니라면 아예 이 부분을 꺼버리는게 사용하는데 불편함이 없습니다.
    서버 관리 콘솔에서 “Configure IE ESC” 라는 항목에 들어가서 모두 Off 해 버리면 됩니다. 나중에 실제 운영할 때, On 시켜두셔도 무방합니다.
    ieesc1
  3. .NET Framework 3.0 Feautre 설치.
    Windows Server 2008 R2를 설치하였다면, 자체적으로 Windows 구성요소 중 .NET Framework를 가지고 있읍니다. 하지만, 보안 정책 상 자동으로 설치되어 있지 않고, 별도 패키지처럼 일일히 따로 설치해야 합니다.
    서버 콘솔 창에서 “Features”를 클릭해서 연 뒤, “Add Features”를 클릭하면 설치 가능한 Feature들이 나옵니다.  그 중 .NET Framework 3.5.1 Features를 선택하고 설치하도록 합니다. 그러면 자동으로 연관된 Feature인 IIS(Internet Information Service)가 같이 설치된다고 나오는데, 그대로 같이 설치해주기만 하면 됩니다.
    addfeatures
       

Active Directory로 Join

제일 먼저 Active Directory 서버에 Join을 수행합니다.

서버간의 인증문제나, 사용자 계정 처리 문제를 해결하기 위해서라도, 반드시 Active Directory는 있어야 합니다. 그러므로 따로 구축한 Active Directory에 Join 하여 구성하도록 합니다.Active Directory로 Join 하는 방법은 간단하므로, 넘어갑니다.

여기서는 tfsadmin 이라는 계정을 Active Directory 상에 만들었으며, 이 계정을 TFS 서버에서는 Admin으로 동작하게 끔 수정했읍니다. tfsadmin 이라는 계정으로 TFS에 로그인을 합니다.

 

SQL 서버 구축

본격적인 서버 설치 작업입니다.

TFS 뿐만 아니라, UI 역할을 하는 SharePoint 역시 이 SQL의 존재가 제일 중요합니다. 모든 데이터의 저장 뿐만 아니라, 심지어 설정 값 까지 대부분의 정보는 DB 내에 보관되게 됩니다. 그러므로 가장 기반이 되는 정보 장치로써 설치를 하도록 합니다.
현재 MS SQL은 2008 R2 까지 출시되었으며, 탑재된 기능 및 범위 별로 제품 Scue도 나뉘었읍니다. Express라는 무료 버전에서 Datacenter 라는 대규모 버전까지 있읍니다. Express로도 사용은 가능하지만, 내부적으로 최대 DB 크기 4G라는 제한의 벽은 나중에 운영하는데 큰 지장을 초래하므로, 가급적 Standard 버전 이상을 설치하는 것을 권장합니다.

여기서는 MS SQL 2008 R2 Standard Edition x64 를 설치합니다.

맨 처음 SQL Server Installation Center가 뜨는데, 여기서 “Installation”  -> “New installation or add features to an existing installation”를 선택하도록 합니다

sql001

자동으로 제품 설치 전 작업을 수행합니다. 간단한 내부적인 검사 및 제품 키, 라이센스 동의 그 밖에 설치용 지원 파일 설치 작업을 순서대로 수행하게 되는데 거의 Next 만 해도 진행이 됩니다. 기본적인 설치 전 단계의 작업이 완료되면, 이제 실질 적인 설치 작업이 실행되게 됩니다.

이제부터 실제적인 설치 화면이 나오게 됩니다. 왼편에 보이는 항목들이 각 단계인데, 각 단계별 설명을 넣었습니다.

[Setup Support Rules] 맨 처음 뜨는 설치 단계는 SQL 에 필수적으로 필요로 하는 구성요소가 제대로 있는지, 아니면 운영체제 환경이 제대로 맞는지 등을 전체적으로 검사하는 작업을 합니다. Error 만 안뜨면 큰 문제는 없지만, 최대한 모든 항목이 Pass가 나오도록 운영체제에 대한 설정을 해주는 것이 좋습니다. (예제에서는 Firewall 관련 Warning이 나왔지만, 큰 문제는 없어서 이 부분은 넘어갑니다. )

sql-001

[Setup Role] 다음으로는 설치 유형입니다. “SQL Server Feature Installation”과 “All Feature With Default”가 있는데, 굳이 번역을 하자면, “사용자 정의 설치”와 “빠른 전체 설치”로 보시면 됩니다. 즉 하나는 하나씩 설정해주는 작업이고, 다른 하나는 기본 값으로 설치를 하는 것이죠. 어느 쪽이든 상관 없지만, 여기서는 “SQL Server Feature Installation”을 선택했습니다.

sql-002

[Feature Selection] 그러면 설치 할 제품 기능들이 나오는데, 필요한 기능들을 선택하시면 됩니다. 전체를 다 선택해도 되고, 설명을 읽어보시고 꼭 필요한 것만 설치하셔도 됩니다. 하지만, 반드시 Database Engine Service, Client Tools Connectivity와 Management Tools는 꼭 설치하시기 바랍니다. 예제는 아래와 같이 선택했습니다.

아래에서는 Report Service를 넣기는 했지만, 반드시 필요한 경우가 아니면 빼도 상관 없습니다. 여기서는 Report Service를 사용하지 않는 형태로 구축할 예정입니다.

sql-003

그러면 이제 자동으로 기능간의 의존관계들을 체크하는 화면입니다. 여기서는 자동으로 기능간에 빠진 기능이나, 잘못된 선택이 있는지 자동으로 판단합니다. 여기서 오류가 있다면 이전 화면에서 기능들을 다시 선택하시고 진행하시면 됩니다.

[Instance Configuration] 다음은 인스턴스 설정하는 화면입니다. 변경할 사항이 있다면 변경하겠지만, 대개의 경우 특별한 설정은 필요 없습니다. 여기서도 별다른 설정 없이 넘어갑니다.

[Disk Space Requirements] 저장된 곳의 용량에 대한 리포트가 뜹니다. 역시 큰 문제가 없으면 넘어갑니다.

[Server Configuration] 서버 구성입니다. 각 서비스들의 동작 계정과 정렬용 기준 언어 등을 설정합니다. 예제에서는 AD 계정인 tfsadmin이 있는데, 이 계정을 서버 동작 계정으로 사용합니다. 그리고 정렬용 언어로는 Korean-Wansung-CI_AS로 설정했습니다. 각 설정은 상단 Tab에서 변경하면 설정 화면이 각기 나옵니다.

sql-005

[Database Enginee Configuration] 다음은 Database Engine 설정 화면인데, 인증 방식, 관리자 권한을 가진 계정을 설정하거나, 데이터 위치, FILESTREAM에 대한 설정이 나옵니다. 각기 원하는 설정을 해주시면 됩니다. 여기서는 계정 관련해서만 수정했는데, SQL 인증방식과 Windows 인증 방식을 동시에 사용하며, 관리자 계정을 tfsadmin 으로 설정했습니다. 그 외는 기본값으로 두었습니다.

sql-006

[Reporting Service Configuration] 그 다음은 Report Service 설정인데, 특별히 아는 설정이 있으면 구성하시기 바랍니다. 여기서는 기본값으로 해서 넘깁니다.

[Error Reporting] 서버 내 오류가 발생하였을 때, MS 쪽에 자동으로 에러 보고를 하는 기능에 대한 일종의 동의서 처리인데, 그냥 넘깁니다.

[Installation Configuration Rules]지금까지 설정한 내용에 오류가 있는지 체크합니다. 큰 문제가 없으면 계속 진행합니다.

[Ready to Install] 이제 전체 설정된 사항들을 모두 보여주는 요약화면입니다. 트리 형태로 표시되어 한눈에 전체 설정 내용을 모두 보여줍니다. 이제 “Install” 버튼을 클릭하면 실제 설치 화면이 나오게 됩니다.

[Installation Progress] 이제 진행율을 보여주면서 실제 파일 복사 및 자동적인 설정 작업을 수행하게 됩니다. 모두 설치가 되면 Complete가 되고 “Finish”를 클릭하면 모두 종료됩니다.

설치가 완료되면 이제 데이터베이스가 준비가 되었다고 판단하셔도 됩니다.

 

SharePoint Foundation 2010 설치

이 부분이 반드시 필요한 것은 아니지만, Team Foundation Server의 Web 기반 UI의 존재가 필요한 경우 설치를 해주는 것이 좋다. 자체적으로 문서 관리를 해줄 뿐만 아니라, TFS에서 발생되는 각종 값들( 버그 리포트, 작업 스케쥴 등등) Visual Studio 없이 직접 Web 상으로 볼 때는 이 부분이 꼭 필요로 합니다.

기본적으로 Windows SharePoint Service 3.0 이면 되지만, 유려한 UI와 기능 업그레이드가 잘 된, SharePoint Foundation 2010으로 진행할 예정입니다.

SharePoint Foundation 2010은 MS 사이트 등에서 무료로 다운로드 받을 수 있습니다. 최소한 Windows Server 2008 이상 서버에 대해서 자체적인 라이센스를 가지고 있다고 보시면 됩니다. 그래서 무료로 다운받아 사용이 가능합니다. 또 x64 버전 밖에 없기 때문에, x64 버전의 운영체제 에서만 동작합니다.

다운 받은 실행 파일을 실행하면 자동 압축을 풀고 아래와 같은 화면이 뜹니다.

sharePoint002

2010부터는 SharePoint에 필요한 환경을 자동으로 검사해서 추가적으로 필요한 구성요소들을 자동으로 구성해주는 기능이 있습니다. Windows에 탑재되어 있으면 자동으로 활성화 해주고, 없으면 외부에서 다운로드까지 해서라도 설치해주는 기능입니다. 이 기능을 실행하려면 "Install software prerequisites"를 클릭하면 됩니다.

sharePoint001

그럼 자동으로 어떠한 제품들이 추가 되야 되는지를 찾아서 해당하는 패키지들을 설치합니다. 운영체제 기능에서부터 Windows Hotfix 까지 자동으로 기능을 검색하고 꼭 필요한 사항들을 완전 자동으로 설치하게 됩니다. 그냥 기다리기만 하면 됩니다.

image

심각한 오류가 발생되지 않는 다면 위와 같은 화면으로 대략 5~10분 정도 구성하게 됩니다. 단, 이 때, 모든 패키지를 이 설치 파일에 담겨 있지 않아, 간혹 필요한 사항들을 인터넷을 통해 다운로드 받게 됩니다. 그러므로 이 기능을 이용해 설치하는 동안에는 반드시 인터넷이 연결되어 있어야 합니다.

image

정상적으로 완료되면 Complete라고 뜨고 요약화면이 나옵니다. “Finish”를 클릭해 종료합니다.

이제 준비 작업은 끝났고, SharePoint Foundation을 본격적으로 설치합니다.

sharePoint003

SharePoint Foundation의 설치 방법은 크게 두 가지가 있읍니다. 하나는 Standalone 이고, 다른 하나는 Server Farm 방식입니다. Standalone은 자동으로 SQL Server(내장된 Express 버전)를 설치하고 자동으로 팀 사이트까지 만들어주는 방식입니다. Server Farm은 사용자가 Server 구성요소에 대한 적절한 설정을 직접하여 설치하는 방식입니다.

여기서 수행할 방법은 Server Farm 방식으로 진행할 것입니다.

맨 처음 “Install SharePoint Foundation”을 시작하면 License Agreement가 뜹니다. 체크하고 Continue 합니다.

Untitled-1

다음에는 “Server Farm:을 선택합니다.

Untitled-2

Server Type에서는 Complete를 선택한다. SharePoint Foundation의 모든 기술들을 설치하도록 하는 것입니다. 그래야 원하는 형태로 구성하는 작업을 수행합니다. 만일 Standalone으로 하면, 자동적으로 SQL을 설치하고 자동으로 사이트를 구축해 버립니다.

Untitled-3

그러면 설치가 들어갑니다. 하지만, 여기서는 설정 작업 없이, SharePoint Foundation을 복사하는 정도의 역할만 수행하게 됩니다.

Untitled-4

완료되는 다음과 같은 화면이 뜨는데, “Run the SharePoint Products Configuration Wizard now”를 체크해놓은 상태 그대로 Finish를 클릭합니다. 그러면 자동으로 SharePoint Foundation 설정 화면으로 넘어갑니다.

Untitled-5

기존 설치 프로그램이 종료되고 이제 설정을 위한 프로그램이 시작 되면 아래와 같은 환영 메시지가 보입니다.

Untitled-6

여기서는 기존에 존재하는 SharePoint가 있다면 그 SharePoint에 연결할지 여부를 결정하는 부분입니다. 지금 하는 작업은 기존 SharePoint에 연결하는 것이 아니므로, "Create a new server farm”을 선택합니다.

Untitled-7

이제 Database 설정에 들어갑니다. SharePoint의 모든 설정 내용은 모두 DB에 기록되므로 이 DB 설정이 무척 중요합니다. 하지만, 중요도에 비해 크게 설정할 내용은 없읍니다. 대부분은 자동으로 수행되기 때문이죠. 그래서 DB 접속에 필요한 일부 정보만 넣으면 됩니다.

다음을 참고하여 적절한 값을 넣습니다.

  • Database server : MS SQL이 설치된 컴퓨터 이름을 넣으면 됩니다. 여기서는 TFS 설치용 PC안에 MS SQL도 깔았으므로 현재 구축하려는 PC 이름을 넣으면 됩니다.
  • Database name : SharePoint 설정 저장용 DB 이름인데, 굳이 변경할 필요는 없습니다.
  • Username : MS SQL에 접속이 가능하고, DB를 생성할 수 있는 권한을 가진 계정을 넣으면 됩니다. 반드시 AD 상의 계정만 들어갑니다. 
  • Password : 위의 계정에 대한 암호를 넣습니다.

입력한 정보로 Database에 연결되고, 설정 데이터용 데이터베이스가 생성되면, 정상적으로 Next가 됩니다. 만일 위의 정보로 제대로 진행되지 않는다면, 계정이 Database에 접근할 수 없는 권한이거나, Database server 이름이 잘못되었을 가능성도 있습니다. 혹여 이전에 SharePoint가 설치되었던 PC라면 Database name을 변경해야 할 수도 있습니다.

Untitled-8

정상적으로 넘어갔다면, 이번에는  SharePoint 끼리 연결될 때 사용되는 암호를 넣는다. 중요하지 않으므로 적절히 넣습니다.

Untitled-9

마지막으로 관리자 페이지 접근용 포트 번호 설정과 로그인시 사용하는 방법들을 선택하는데, 그대로 두고 Next를 합니다. 만일 관리자용 사이트 페이지에 종종 접속하는 경우가 있다면, 포트 번호를 적당히 기록해두시면 이용하는데 도움이 됩니다. 필요하면 Port 번호를 변경해도 됩니다. Untitled-10

모든 설정이 완료되었으면 요약화면이 뜹니다.이제 Next를 하면 자동으로 설정하기 시작합니다.

sharePoint004

본격적으로 Database도 만들고, 구성하기 시작합니다.

Untitled-12

모든 설정이 정상적으로 끝나면 설정 요약 내용이 나오는데, 이제 Finish를 클릭하면 됩니다.

Untitled-13

그럼 자동으로 SharePoint 관리자 페이지가 뜹니다. 여기서 간단한 사이트만 만들면 됩니다. 만드는 방법은 Wizard를 따라가면 쉽게 만들 수 있습니다.

 

Team Foundation Server 설치

TFS 2010 설치용 DVD를 넣고 동작시키면 다른 서버 제품과는 다르게, 자동 실행 자체가 없습니다.(물론 업데이트되면 바뀔 수 있습니다.)

그래서 폴더 안에 위치한 설치 파일을 직접 실행해야 합니다. ( DVD 위치가 X:\ 라고 가정 )
X:\TFS-x64 위치에 있는 setup.exe를 실행한다. 그러면 Visual Studio 와 같은 Installer 화면이 뜹니다.

image

첫 화면에서는 특별한 동작이 없으므로 다음을 클릭합니다.

image

License Agreement를 하고 다음을 클릭 합니다.

Untitled-14

앞서 언급했듯이 이 단계의 설치 작업에서는 별도 설정 작업이 없습니다. 오직 파일 복사처럼 필수적으로 필요한 패키지의 메인 프로그램의 복사레벨로 생각하시면 됩니다. 실제적인 설정 작업은 이 모든 설치 프로그램이 종료되면 자동으로 실행됩니다,.그러므로, 여기에 설치한 기본적인 패키지를 설치하면 됩니다.

위의 화면처럼 두 가지의 패키지를 설치하시면 됩니다. 하나는 Team Foundation Server 이고, 다른 하나는 Extentions for SharePoint Products and Technology 입니다. Team Foundation Server는 TFS를 구성하는 메인 프로그램이므로 당연히 설치를 해야 하고, 그 뒤에 따르는 Extentions for SharePoint Products and Technology는 TFS와 SharePoint와 연결할 때 사용되는 각종 웹파트, 사이트 템플릿 등을 적용할 때 필요한 패키지 입니다.

이처럼 패키지를 나눈 이유는 물리적으로 서버를 분리하여 구축할 때 그 역할에 맞추어 설치할 수 있도록 하기 위함입니다. 그래서 나머지 Team Foundation Server Proxy와 Team Foundation Build Service는 나중에 다른 PC에 설치하시기 바랍니다. 만일 현재 TFS 안에 Build까지 구축하겠다고 하면 굳이 말리지는 않겠지만, 권장하지 않는다. 여러 팀원들이 동시에 접속해서 다루어야 할 서버인데, 프로그램을 빌드하기 위한 컴포넌트를 설치해 주고, 더욱이 빌드하면서 발생되는 자원 소모(빌드 할 때, CPU, RAM 등의 소요가 큰 편이다.)로 인해 서버가 원활하게 동작하지 않을 수 있기 때문입니다.

2가지를 선택하고 Install 버튼을 클릭하면 자동으로 설치하게 됩니다.

image

설치가 완료되면 요약화면이 뜨는데, 여기서 “Configure” 버튼을 클릭해주시기 바랍니다. 수동으로 직접 각종 서버 설정을 할 수 있지만, 여기서는 설치 후 뜨는 마법사 화면을 이용해 작업을 설명할 예정입니다.image

설정 프로그램 – Configuration Center –이 뜨면, 이제 TFS에 대한 본격적인 설정을 시작하게 됩니다.


Team Foundation Server 구성

설치 완료 후, 설정 프로그램이 자동으로 뜨면 아래와 같은 화면이 뜹니다. 설정을 통합적으로 제공하는 기능인데, 메시지 기반의 Wizard를 제공합니다. 처음에는 낯설지만, 아이콘과 그림 남발 Wizard와는 다른 심플함을 주어 개인적으로 마음에 들긴 합니다.

자 아래와 같은 화면으로 들어왔으면 맨 먼저 “Advanced”를 선택합니다.
그 이유 중 하나는 우리가 설치할 때, 제품별로 따로 따로 설치하는 부분도 있었고, 일부 사용하지 않는 서비스들도 있기 때문입니다. 즉 입맛에 맞게 수정하기 위해서는 Advanced 로 진행하는 것이 답일 것입니다.

Untitled-15

Advanced Configuration Wizard가 시작되면 이제 각각 설정해야 하는 항목들이 나오기 시작합니다.왼쪽 Navigation 영역 부분이 일종의 Wizard 단계 메뉴로 생각하셔도 됩니다. 실제 왼쪽 Navigation 쪽에 나타난 경고표시(warnning)만 해결하면 실제적인 설치가 되기는 합니다. 하지만, 차근차근 설정 하나하나 체크하시기 바랍니다.

[Welcome] 환영 메시지 부분입니다. 그대로 Next를 해주시면 됩니다. 체크 버튼이 있지만, MS에서 제공하는 Support를 원활하게 받을 수 없다면 의미 없죠.

[Database]  TFS와 연결할 Database 서버를 구성하는 부분입니다. 역시 기본값을 두시면 됩니다. 만일 SQL이 기본 인스턴스를 사용할 수 없는 경우라면, SQL Server Instance 부분에 적절하게 인스턴스를 넣어주시기 바랍니다.(예 : SQLSVR001\TFSDB ) 여기서는 기본값을 그대로 사용합니다.

conf_wiz_db

[Account] TFS Service를 동작시키기 위한 계정 정보 및 인증 방식을 결정하는 부분입니다. 특별히 변경해야 할 이유가 없다면 기본값으로 두시면 됩니다. 보안상의 이유라도 NETWORK SERIVCE라는 계정을 그대로 유지하시는게 좋으며, 인증방식도 Kerberos 와 같은 고급 인증 방식을 쓰지 않는 이상 NTLM 이 제일 편하기 때문입니다.

[Application Tier] TFS 서버와 접속하기 위한 인터페이스 설정 부분입니다. 외부에서 TFS를 접속할 때, Web을 통해서 처리하게 되는데, 그 경로를 의미하는 것입니다. 여기서는 기존에 구축된 TFS 서버와 구분하기 위해 9000 번으로 변경한 것 외에는 크게 변경한 것은 없습니다. 기본값은 8080 입니다.

 conf_wiz_apptier

[Reporting ~ ] Reporting 부분은 Reporting과 함께, Reporting Services, Analysis Service, Report Reader Account 등 세 가지를 추가적으로 설정해야 합니다. 하지만, 여기서는 Reporting 관련 설정을 하지 않을 예정입니다. 그래서 Report 관련 체크를 끈 상태로 진행합니다. 만일 Reporting 관련 서비스를 활성화 하고 싶다면, SQL 2008 R2를 설치할 때, Report와 Analysis 서비스 관련한 설치를 반드시 해야 합니다.

conf_wiz_rep 

[SharePoint Products] 여기서는 SharePoint와 TFS 간의 연결관계를 구축하기 위한 구성을 합니다. 연결이라고 해도, 별도 연결을 위한 설정이 있는 것이 아니고, SharePoint에 Site Template나, WebPart 등을 설치하고 준비하는 정도의 작업으로 보시면 됩니다. “Configure SharePoint for use with Team Foundation Server”를 체크해 놓은 상태에서 Next를 하시면 됩니다.

[SharePoint Products – Settings ] SharePoint Products 의 하위 설정으로 TFS와 연결할 SharePoint URL을 설정합니다. 대개 기본값으로 두시면 됩니다. “Next”를 누르면 자동으로 연결 테스트를 하지만, 혹시 모르니 반드시 “Test” 링크를 클릭해서 체크 버튼을 받도록 합니다.
다만, 여기서는 기존에 구축한 SharePoint와 겹치지 않기 위해서 포트 번호만 변경(8888로 변경)해서 진행합니다.

conf_wiz_sp

[Project Collection] 최초 서비스가 구축될 때 만들어질 Project Collection을 구축할 것인지 여부와 구축한다면 그 이름은 무엇으로 할 지를 결정하는 부분입니다. 물론 아예 시작을 아무런 구축없이 진행할 수 있지만, 가급적이면 자동으로 설정이 될 수 있게 하는 것도 편하게 프로젝트를 구성할 수 있게 됩니다.
최초 만들어질 때, 기본 이름은 “DefaultCollection” 인데, 자신의 프로젝트에 맞게 수정하시면 좋겠습니다. 그리고 Collection 이름이기 때문에, 안에 공백은 넣지 않도록 합니다.
여기서는 “TestProject”라는 이름으로 구성합니다.

conf_wiz_prjcol

[Review] 이제 지금까지 설정한 내용에 대한 전체 요약화면이 나옵니다. 혹시 모르니, 꼭 한번 전체 내용을 체크해보고, 설정이 맞는지 확인하시기 바랍니다.

conf_wiz_rview

이제 Verify 버튼을 클릭하시면 전체 설정을 체크하게 됩니다.

conf_wiz_vf

모든 체크가 Pass를 했다면 이제 Configure를 클릭하시면 자동으로 설정하기 시작합니다. 중간에 큰 문제(메모리 부족, 디스크 부족, 네트워크 단절 등등)가 없다면 자연스럽게 설정을 하게 됩니다.

conf_wiz_vconf

최종적으로 모든 설치가 Sucess가 뜨면 끝납니다.

 

일단, 기본적인 Team Foundation Server 구축은 여기까지 입니다. 이제 만들어진 URL(위의 예제로 나타낸 것을 기준으로 한다면, http://tfstest:9000/tfs 가 됩니다. )로 Visual Studio 로 연결하면 됩니다. 최소한 소스 버전관리로 이용할 수 있을 것입니다.

그럼 다음으로는 구축된 TFS에서 기본 제공하는 Team Foundation Server Administration Console을 활용한 기타 설정이나 구성 작업들을 간단하게 살펴 보도록 하겠습니다.

728x90

hero_single_tfs_boxshot

배경

MS Windows Platform 기반으로 개발을 한다면 필연적으로 Visual Studio라는 제품을 사용하게 된다. 이 제품으로 개발할 때 사용되는 언어는 C/C++, Visual Basic, C# 등 다양하게 사용할 수 있다. 또 Windows Platform에 맞게 Native 한 어셈블리 계열에서 부터 .NET Framework 까지 다양한 기반 기술 및 API를 쉽게 사용할 수 있다. 또 Visual이라는 이름에 걸맞게 GUI 기반의 IDE 도구이다. 그래서 자체적으로 소스 에디터를 보유하고 있으며, 간단한 조작만으로 만들어진 소스를 빌드 하고, 디버깅 까지 복합적인 모든 형태의 기능을 하나의 도구로 만들었다.
이 Visual Studio는 Windows Platform의 변화에 맞추어 변화해 왔고, 발전하여, 현재 2010 버전까지 나왔다.

도구와 Platform의 발전도 발전이지만, 진정 발전을 한 것은 소프트웨어 개발 자체이다. 처음에는 까만 도스창에 실행파일 몇개와 동적 라이브러리 몇개로 구성된 단순한 Application 만으로도 충분히 동작하고, 사용했지만, 지금은 상당히 많은 기능과 동작하고, 크기 조차 엄청나게 커버렸다. 이처럼 단순한 Application 에서부터 서버 레벨의 비지니스 개발까지, 그 개발의 범위와 폭은 너무 커져갔고, 개발의 양 역시 상상의 범위를 넘을 정도로 개발됐다.
그러다 보니, 홀로 일당백 개발하는 시대는 저물고, 어느새 여러 사람이 협업을 하면서 개발해야 하는 단계에 이르게 되었다. 여러 사람이 하나의 목표(소프트웨어 제품)를 두고, 작은 조직을 만들어 꾸리게 되는데, 보통 이런 단위를 팀이라고 부르고, 자연스럽게 개발자들의 작은 그룹이 팀이 되어 그 팀 단위 개발을 수행하게 되었다.

공장에서야 컨베인벨트 위의 작업 형태와 작업 양에 맞춰 반복적인 작업을 위한 최초 교육을 거친 뒤, 원하는 인원을 투입해 생산 공정을 구성한다. 물론 인력 비용이라는 부분도 있기는 하지만, 최소한 인력 비용을 무시한다면, 확실히 인력 투입대비 생산량이 거의 동일하게 나오게 된다. 인력 투입 대비 생산력이 나온다는 이야기는 바로 인력을 최대한 투입하면, 투입된 만큼 제품이 나올 수 있다는 의미다. 
하지만, 소프트웨어 개발은 단순 공장 노무와는 다르게 사람을 무작정 투입한다고 되지 않는다. 단순히 몇가지 반복적인 작업을 교육한 뒤 투입한다고 바로 무언가를 만들 수 있는 것이 아니기 때문이다. 위의 컨베인 벨트를 기준으로 이야기 한다면, 이 소프트웨어 개발이라는 것은 그 컨베인 벨트 자체를 만드는 공정이기 때문에 그게 쉽지만은 않다. 어떻게 컨베인벨트를 배치해야 최소 인력으로 최대의 효과로 제품을 생산할 수 있을까? 와 같은 고민을 소프트웨어 개발에서 수행하는 것이다. 이렇다보니, 무작정 인력만 우겨넣는다고 그 답이 나올리가 없다.
또 예전 같이 규모라도 작고 변수라도 적으면, 똑똑한 사람 몇명이면 그만이였지만, 규모가 규모인 만큼, 똑똑한 사람 몇 사람으로 해결 할 수 조차 없다. 자연스럽게 사람들은 건축, 공장화 그 모든 것들을 소프트웨어 개발에 맞춰보려 노력했지만, 그 결과가 그리 좋지 않았고, 결론적으로는 소프트웨어 개발은 다른 식으로 접근해야 되겠다고 생각하였으며, 그 결과 작은 생산 조직의 형태가 되었고, 이 역시 팀이 만들어지게 된다.

팀이라는 조직을 이용해 과연 어떻게 명확한 목표와 서로간의 협력을 만들어야 할까?
이 부분에 대한 많은 의견이 분분했다. 앞서 이야기 한 것 처럼, 건축 방법론을 가져와 설명하고 적용해보기도 했다. 그 덕에 건축에서 사용되는 개념의 일부를 소프트웨어 개발과정에서도 활용된다. 하지만, 무언가 어색한 옷인 마냥 잘 맞지 않았다. 그를 대체할 것 처럼 나타는 공장형태도 자연스럽게 등장했다. 공장에서 처럼 표준화된 부품을 통해 생산된다면 어떨까? 물론 개념도 훌륭했으며, 많은 소프트웨어들이 그에 맞게 해보려 했지만, 사람 생각이 100이면 100 틀리다 보니, 이 역시 어색한 옷이 되어버렸다. 그러다 보니, 요즘은 누가 옳다 그르다를 따지기 자연스럽게 스스로의 맞는 스타일을 찾아 가기 시작했고, 자연스럽게 Agile에서 제시하는 실천 방법과 같은 형태를 갖추기 시작했다.
Agile에 대한 이야기는 다른 Agile 관련 서적이나, 사이트 등에서 참고하면 된다.

이와 같은 복잡다단한 소프트웨어 개발 환경이라는 배경 속에서 MS는 Visual Studio를 제시했고, 그 제품을 이용해 팀 단위 업무를 원활하게 수행할 수 있는 환경을 제공했다. 개발자들 각자에게 제공되는 Visual Studio와 바로 연결될 수 있는 팀 협업 환경 - 서버 -를 또 하나의 제품으로 제시하였고, 그 환경이 바로 Team Foundation Server 라는 제품이다.

 

왜?

그럼 왜 Team Foundation Server 일까?
사실 이 부분의 당위성은 위의 배경에서 어느 정도 설명하기는 했다. 그렇지만 꼭 Team Foundation Server를 쓸 필요는 없다. 이미 위의 배경과 같은 문제점을 해결하기 위해 많은 소프트웨어 개발자와 설계자들은 고민했고, 그에 맞는 솔루션들을 다양하게 만들어 제시했고, Open Source로 공개적으로 제공하는 무료 솔루션도 다양하다.소스 버젼 관리라면, Subversion 이나, CVS 정도, 요구사항 및 형상관리레벨 이라면 Redmine 도 좋다. 자동 빌드라면 Hudson 정도 써주면 딱 일듯 싶다. 가격도 없다. 원하는 대로 쓰고 수정하고, 제안만 하면 된다. 
그런데 굳이 왜 Team Foundation Server 일까? 구구절절한 당위성에 대해서는 MS에서 제시하는 개발 방법론이나, 다양한 보고서, 광고 만으로도 충분히 나온다. 그런 구차한 변명을 걷어낸다면, 그 모든 것의 결론은 MS Platform 기반으로 개발하고, Visual Studio를 쓰기 때문일 것이다. Visual Studio에 딱 달라 붙어서 아주 유연하게 쓸 수 있다는 것! 바로 그 점일 것이다.

visual_studio_logo

또 전산 관리자 측면을 바라본다면, 유지보수를 위해서라도, 역시 한 벤더에서 그냥 한번에 모든 연계 제품을 묶는게 더 편하지 않나 싶다.

 

무엇을 할 수 있나?

팀 협력 작업이라면 대부분의 작업을 할 수 있다.

버전 관리

과거 SourceSafe 라는 약간은 원시적인 동작을 했지만, 그럭저럭 쓸만했던 제품이 있다. Visual Studio에 딱하니 붙기도 하고, 소스 DB도 단순한 형태라 백업하기도 그만이였다. 이 TFS에는 그 원시적인 도구를 조금 더 세련된 UI와 내부적인 DB를 MS SQL이라는 DBMS에 담고, Brench 같은 다른 버전관리도구에서나 제공했던 기능들도 넣었다. 애초 TFS를 쓰는 대부분의 사용자는 바로 이 소스 버전관리 하나만으로도 모든 것을 만족한다.

sourceControl

작업 관리

어설프지만, Redmind 같은 요구사항 관리나, 형상관리를 처리할 수 있는 기능이 있다. 요청 사항들을 관리하기도 하고, 작업을 관리하며, 버그 이력을 남길 수 있다. 이 모든 작업을 Visual Studio 안에서 처리할 수 있다. 입력을 Form에서 하고, 그 결과 값을 Grid 형태로 보기도 하고, Excel로 뽑아볼 수 있으며, MS Project를 통해서 관리 할 수 있다.

workitem

자동 빌드

자체적으로 빌드 서버를 구축할 수 있다. 자동으로 최신 소스를 받아 사용자의 별다른 도움 없이 자동으로 빌드 결과물을 만들어 낼 수 있다. MS Build를 사용하는 솔루션 파일만 있으면, 그 솔루션 파일에 설정된 내용대로 자동으로 빌드하게 된다. 최초 구축이 힘들어서 그렇지 한번 구성하면 나름 쓸만한 도구 이다. 내부적으로 Test DLL이 있으면, Test까지 수행해준다.

build

그 외의 기능

SharePoint와 연동해 문서들을 올리고 관리할 수 있으며, 다양한 형태의 프로젝트 관련 Report 들을 만들어 주기도 한다. 생산성이나, 버그 경향 등을 일목 요연하게 볼 수 있다.

 

여기서는?

현재 저 위의 기능을 100% 완벽하게 구축해서 다 사용해 본 적은 없다. 하지만, 회사에서 사용되는 목적에 맞는 기능들을 어떻게 구축하고 사용하는지를 정리하기 위해 여기다가, 키보드로 끄적여 본다.

 

방향

시간이 허락되는데 까지, 서버의 구축에서부터 사용법까지만 나열할 예정이다. 예전에 SourceSafe에 대한 어설픈 글 올린 것처럼 완결될 것 같지는 않지만, 기록이나마 남기기 위해서 적어본다. 회사의 환경을 그대로 소개하면서 설명하면 쉽겠지만, 내부 보안이라는 부분도 있으므로 별도 Virtual Machine에 구축하면서 설명할 것이다.

728x90

InstallSheild로 여러가지 형태의 Installer를 만들지만, 대부분은 MSI 기반의 인스톨러로 만들게 됩니다.

이 MSI 형식으로 만들게 되면, .NET Framework 역시 지원하며, .NET Framework를 통해 설치용 Custom Action을 만들어 추가할 수 있습니다. 하지만, Custom Action을 이해하려면, MSI 설치 순서와 그 사이 사이의 특성을 어느정도 파악해야 합니다.

만일 단순히 파일을 삭제하거나, 검사하는 간단한 로직을 넣을 정도의 요량이라면, 굳이 Custom Action을 사용해 만들 필요는 없다고 생각합니다.

InstallSheild에서는 특정 DLL에 포함된 특정 기능을 도출해서 쓸 수 있습니다. .NET이든, Native ( VC++ 등을 사용한 ..)든 어떠한 형태든, 표준 DLL 규칙을 가지고 있다면 어떤 형태가 되었든 사용 가능합니다. 물론 이 기능에도 수많은 기능들이 있고, 다양한 조건으로 다양한 상태에서 사용할 수 있지만, InstallSheild의 특성을 무시해서라도, 일단 설치나 제대로 되게 끔 하려하고 있다면, 필자처럼 하면 될 것입니다.

1. 일단 DLL 만든다.

일단 DLL 부터 만듭니다.  C#의 프로젝트 추가를 하시고, 프로젝트 종류를 Class Library로 하면 됩니다.

image

만일 설치될 PC에 .NET Framework의 버전도 꼭 설정해주시기 바랍니다. Visual Studio 2010을 사용한다면, 기본적으로 .NET Framework 4.0으로 되게 되는데, 대상 PC에 .NET Framework 4.0이 설치될 가능성이 없는 경우 2.0 정도로 맞춰주시면 최신 Windows Update를 받는다면 거의 다 동작할 것입니다.

만들어진 DLL 프로젝트에서 그냥 public class에 public method를 만들기만 하면 됩니다. 적당히 이름을 붙이시기 바랍니다. 물론 InstallSheild와 쌍방 통신(InstallSheild 내의 데이터를 사용하거나, 실행 결과물을 InstallSheild에게 전달해야 되는 경우)가 필요하다면, 약간은 다르게 구성해야 겠지만, 만일 그럴 필요가 없다면, 그냥 class와 method를 public으로 만들기만 합니다.

여기 예제에서는 ClearOldProducts 라는 클래스의 CleanOldProductInfo 라는 함수를 만들었습니다.

적당히 안에 로직을 짜고, 컴파일 합니다. 만들어진 DLL을 이제 ISM 파일 수정에 들어가 추가해줍니다.

일단 적용할 ISM 파일을 엽니다.
그리고 트리 메뉴에서 Custom Actions and Sequence를 엽니다.

1

UI 혹은 CustomAction들이 보이는데, 그 중 Root Tree Item에서 오른쪽 버튼을 클릭합니다.
무척 많은 메뉴 내용이 보이는데, 그 중 "New Managed Code -> Stored in Binary table"을 선택합니다.
이미지 대상 PC에 설치되어 있거나, 이미 존재하는 파일을 가지고 하는 거면, 다른 옵션들을 활용할 수 있지만, 새롭게 설치하는 PC를 기준으로 본다면, MSI 인스톨러 안에 해당 DLL을 담고 있어야 하므로, "Store in Binary table"을 선택하는 것입니다.

2

그러면 새로운 Custom Action이 생기는데, 그 위치에서 오른쪽 버튼을 클릭 한 뒤, "Custom Action Wizard..."를 띄웁니다.

3

Wizard가 뜨면 맨 처음 최초의 창은 넘어가시고...

4

Custom Action의 설명을 추가할 것이 있으면 쓰지만, 그냥 넘어가도 됩니다.

5

Custom Action을 호출하는 방법인데, 그대로 두면 됩니다.

6

이제 그 대상이 되는 DLL을 찾아서 선택하면 된다. Browse 버튼을 클릭해서 특정 DLL을 선택해주면 됩니다.7

8

DLL 선택이 되었으면, 이제 그 DLL 안에 있는 특정 함수를 선택 합니다.직접 입력해도 되지만, Browse를 클릭해서 해당 하는 클래스와 메소드를 선택하면 됩니다.

9

10

동작 방식인데, 비동기식으로 하면 인스톨 단계가 그대로 진행되면서 동작하므로, 가급적 Synchronous를 선택합니다. 그리고 exit code를 별도 제공할 예정이면 exit code를 선택하지만, 만일 없다면 Ignores exit code를 꼭 선택해야 합니다. 안그러면 종료 오류로 더 이상 처리 안되는 경우도 있습니다.

11

실행 조건인데, 그대로 두시면 됩니다. 즉시 실행이므로, 특정 조건이 되면 바로 실행되게 끔하는 것입니다.

12

마지막으로 이 스크립트가 실행되는 시점입니다. UI 가 있는 MSI면 Install UI Sequence에서, 없으면 Install Execute Sequence를 선택하여, 이벤트를 고릅니다. 그리고 Condition에 1이라고 넣습니다.

C++ 처럼 TRUE면 1, FALSE 면 0 입니다. 만일 특정 조건(Windows 2000 이상일때 라든가, x86 CPU라든가, 별도 조건이 있는 경우)가 있다면 만들어서 넣어도 되지만, 조건에 상관없이 무조건 실행되는 거라면, 1이라고 넣어주시면 됩니다.

13

요약 창이 뜨고 종료됩니다.

이제 빌드 하고 동작시켜 보시면 됩니다.

728x90
예전에 BDD 했을 때 사용한 VB Script 인데, 혹시 몰라 올려 놓습니다.
지금은 대세가 Windows 7인지라...


'
' WMI Script - ChangeVLKey.vbs
'
' This script changes the product key on the computer
'
'***************************************************************************

ON ERROR RESUME NEXT


if Wscript.arguments.count<1 then
   Wscript.echo "Script can't run without VolumeProductKey argument"
   Wscript.echo "Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX"
   Wscript.quit
end if

Dim VOL_PROD_KEY
VOL_PROD_KEY = Wscript.arguments.Item(0)
VOL_PROD_KEY = Replace(VOL_PROD_KEY,"-","") 'remove hyphens if any

for each Obj in GetObject("winmgmts:{impersonationLevel=impersonate}").InstancesOf ("win32_WindowsProductActivation")

   result = Obj.SetProductKey (VOL_PROD_KEY)

   if err <> 0 then
      WScript.Echo Err.Description, "0x" & Hex(Err.Number)
      Err.Clear
   end if

Next
Wscript.echo "Windows XP의 제품 키 변경이 완료되었습니다."

 원리는 간단합니다 WMI을 돌면서 win32_WindowsProductActivation 에 대한 인터페이스를 가져온 뒤, 그 안에 입력받은 볼륨키를 넣어주는 기능입니다.
사용방법은 위의 Script를 실행할 때, 파라미터로 볼륨키를 넣어주시면 됩니다.  

       Cscript ChangeVLKey.vbs  ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX

그 중 이텔릭체로 된 부분은 위의 스크립트를 저장한 파일이름인데, 그 파일이름으로 하시면 됩니다.


728x90

TFS 2010에 Work Item을 등록하는 기능이 있다. 여기서의 WorkItem은 일종의 “작업” 같은 개념이다.

처음 사용하다 보면, 이 Work Item을 테스트 식으로 등록하기도 하고, 혹은 중복해서 등록하기도 한다. 또 가끔은 중복해서 올리기도 한다. 그럴 때, 늘 윈도우 프로그램 사용하던 방식대로 지우려고 하면 지워지지 않는데, 오른쪽 버튼을 눌러 컨텍스트 메뉴를 띄워도 Delete는 보이지 않고, 그렇다고 Delete 키를 눌러도 안된다. Toolbar에서는 아예 지원이 안된다. 결국 상태 변경을 해서 “완료” 혹은 “닫힘” 그런 것으로 변경해서 쿼리에서 안 나오게 정도 밖에는 못한다.

이를 확실하게 지우는 방법이 있었다.

먼저 Visual Studio 2010 이나, TFS Client 가 PC 내에서 설치되어 있어야 한다.(여기서는 Visual Studio 2010을 기준으로 설명)

이제 Cmmand Line 창을 띄워야 한다. 보통 Visual Studio가 설치되어 있으면 전용 Command Line 창이 있는데, 그것을 띄워도 된다.

image

Command Line 창이 뜨면 일단, 다음 명령을 입력한다.

cd ..\Common7\IDE

아이템을 삭제하기 위한 도구는 Visual Studio 2010이 설치된 폴더를 기준으로 Common7\IDE에 있다. 그래서 저 Command Line 창 최초 위치를 기준으로 해당하는 폴더로 이동하기 위한 것이다.

images0025

이제 본격적인 아이템 지우기. 아이템을 관리하는 모든 처리는 바로 witadmin.exe 이라는 프로그램이다. Command Line 명령이다. 그 형태는 아래와 같다.

witadmin destroywi /collection:{tfs 주소} /noprompt /id:{workitem id}

저기서 {tfs 주소}는 TFS 의 경로를 넣어준다.

TFS 서버 주소가 tfs.knoie.net 이고, 프로젝트 이름이 MyProject 라고 한다면,

http://tfs.knoie.net:8080/tfs/MyProject

가 된다. 이 주소 값은 TFS 연결할 때, 연결 정보를 열어보면 쉽게 알 수 있다.

images0023

{workitem ID}는 지우려는 workitem이 가진 고유 ID 값을 넣는다. 보통 이 아이디 값은 1 부터 시작하는 단순한 번호 나열이므로, 쉽게 찾을 수 있다. 쿼리를 하면 나열 되는데, 아래 그림의 붉은 색 상자 안의 ID 값을 의미한다.

images0024

저 안의 내용 중 367 번을 지운다면,

witadmin destroywi /collection:http://tfs.knoie.net:8080/tfs/MyProject /noprompt /id:367

이라고 입력하면 된다.

실행하면 아래처럼 표시된다.

images0026

728x90

+ Recent posts

728x90