• 카테고리
    • 전체 글

    • 카테고리1
    • 카테고리2
    • 카테고리3
    • 카테고리4
  • 태그
  • 방명록

'기술자료'에 해당되는 글 351건

  • 2009.05.13 .NET 2.0(C#) 에서 Active X 컨트롤 만들기. 14
  • 2009.04.28 DEP(Data Execution Prevention) 기능 비활성화 시키기 7
  • 2009.04.03 ClearCase의 UCM
  • 2009.04.03 Snapshot View에 대한 추가적인 생각
  • 2009.04.03 What is ClearCase 3
  • 2009.04.02 UML의 스테레오 타입이라는게....
  • 2009.03.12 SPSite(사이트콜렉션)의 사이트 용량 변경 방법
  • 2009.02.25 이벤트 ID 5785 - 출력 캐싱에 대한 게시 사용자 지정 문자열 처리기.... 문제 해결 방법

.NET 2.0(C#) 에서 Active X 컨트롤 만들기.

기술자료/OS 2009. 5. 13. 18:12

ActiveXTest.zip
옛날 자료들, .NET 1.0 시절에서 부터 내려온 자료들을 근간으로 하나씩 하나씩 체크하면서 진행했습니다. 그런데 생각보다 의외의 요소들이 너무 많아 헷갈려 포기 할 즈음 간신히 성공했습니다.

성공했던 내용을 기반으로 지금까지 제가 판단했던 각종 정보들을 정리해보도록 하겠습니다.
현재 이 작업은 .NET 2.0 기반으로 Visual Studio 2005를 기준으로 작성하고 테스트 되었습니다.
(아직 Visual Studio 2008에서는 해보지는 않았지만… 잘 되리라 그냥 막연히 짐작합니다. 2003 버전은,
외국에 많은 사례들이 있으므로 한번 찬찬히 보시면 금방 하실 수 있을 것입니다. )
그리고 구현 언어는 C# 입니다.

1. 프로젝트 생성

먼저 프로젝트 생성입니다. 사실 대부분의 다른 사이트들의 예제를 보게 되면 Class Library 기반으로 시작하게 끔 유도하곤 합니다. 그런데, 생각보다 설정하거나 구성해야 되는 부분이 너무 많아 무언가 노가다 하는 기분이 들더군요. 그러다가 찾은 프로젝트 형식이 바로 “Windows Control Library”  였습니다.

이 프로젝트를 생성하려면 File –> New –> Project 라는 메뉴에 들어가시면 아래와 같은 화면이 뜨는데 그 중, Windows Control Library를 선택하시면 됩니다.

2. 클래스 설정.

ActiveX로 보여줄 컨트롤에 해당하는 클래스를 열도록 합니다. 보통 기본적으로 UserControl1 이라는 이름의 클래스가 만들어지는데, 바로 이 부분을 수정하게 될 것입니다. 더블 클릭하면 디자인 모드로 넘어가므로, 코드 보기로 들어가 주시기 바랍니다.

 

2.1 using 추가하기

맨처음 해주셔야 할 작업은 using을 걸어주시는 작업이 됩니다. Active X 설정을 위해 약간의 Assembly 및 COM 처리를 해야 하는 부분이 있기 때문입니다. using 해야 할 항목은 다음과 같습니다.

using System.Runtime.InteropServices; // 동적으로 컴파일러 관련 옵션을 업데이트하는 값을 넣기 위한 부분
using System.Reflection; // 현재 어셈블리 정보를 동적으로 가져오기 위한 부분
using Microsoft.Win32; // Registry에 정보를 업데이트 하기 위한 부분

일단 위의 3가지만 들어가면 지금 부터 업데이트 하는 부분은 큰 문제 없이 들어갈 것입니다.

2.2 ActiveX로 노출될 컨트롤 Class 옵션 적용

다음은 Class에 옵션을 설정하는 작업입니다.

먼저 제일 처음에 보이는 클래스 위쪽에 다음 3가지를 추가하여 주시기 바랍니다. 물론 프로젝트의 속성 값을 수정하여 대입되는 값들도 있기는 하지만, 혹시나 모르니 그냥 넣어주시면 좋을 듯 싶습니다.

[Guid("20F0F02D-044C-4013-AFAE-F2241D95FDA3")]
[ComVisible(true)]
[ProgId("HindNo1.TestAX")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public partial class UserControl1 : UserControl
{
      ………

대충 보시면 아시겠지만, [ ] 안에 들어가는 값이 바로 코드에 직접 박아서 명시적으로 설정하는 작업입니다.

맨 먼저 Guid 부분은 이 컨트롤의 고유한 ID 입니다. CLSID 같은 것으로 Active X 마다 각자 고유한 ID를 갖는데, 바로 그 ID를 의미합니다. 프로젝트 옵션에 있는 Assembly 옵션에도 이 비스무리한 값이 있는 것 같지만, 일단 저렇게 명시적으로 해주세요.( 전 VS 잘 몰라서, 장담드리기가 힘들어 가급적 그냥 제가 말씀 드린 방법대로 해보세요. )

두 번째에 있는 ComVisible 부분은 이 Control을 COM으로 노출 시키는 작업을 할 것인지 말 것인지를 결정하는 부분입니다. ActiveX도 어찌보면 COM의 일종이기 때문에, 반드시 COM 노출이 되어줘야 합니다. 이 역시 Project 속성의 Assembly 옵션에서 변경할 수 있긴 합니다.

세 번째 ProId 부분은 보통 VB 스크립트에서 쓰는 CreateObject(“xxxx.xxx”)의 xxxx.xxx 부분을 의미합니다. 일단 알기 쉽게 쓰는 것도 중요하지만, 가급적 특이하게 적어주시는 것이 좋습니다. Guid야 겹칠 일이 거의 전무하지만, 이 이름은 혹여나 겹칠 수 있으니깐, 조심조심 쓰시기 바랍니다. 문장이 길다 싶으면 “.” 으로 구분하여 표시해주시면 됩니다.

네 번째 ClassInterface(….) 부분은, COM(즉 ActiveX)가 외부에 노출되는 각종 Interface의 유형을 결정하는 부분입니다. 자세한 원리는 저도 잘 모르겠구요, COM에 대한 기초적인 지식이 필요할 것 같습니다. 일단 AutoDual로 하면 대부분의 인터페이스를 커버한다고 하더군요. 뭐 보안이나 성능상의 문제로 제한적으로 설정할 수 있는데, 이 역시 천천히 자습하시거나 내용을 찾아 설정해주시면 좋겠습니다.

2.3 컨트롤 등록 시 자동으로 실행되어야 할 사항

일단 위의 설명을 쭉 읽어보시고 만일 전혀 이해가 안되거나 도리어 헷갈린다 싶으면 위의 내용을 그대로 쓰세요. 그리고 난뒤에, Guid 와 ProgId 안의 값만 적절하게 변경해주시면 됩니다. (Guid는 Guid를 새로 생성해서 새롭게 넣으시고, ProgId는 겹치지 않게 적당한 문자열을 나열해주시면 됩니다. – 영어, 숫자, 마침표로만 – )

이제 이 Control이 등록될 때 몇 가지 Registry에 등록해야 되는데, 이 작업을 수행하기 위한 함수 두 개를 추가해 주시기 바랍니다.

///    <summary>
///    Register the class as a    control    and    set    it's CodeBase entry
///    </summary>
///    <param name="key">The registry key of the control</param>
[ComRegisterFunction()]
public static void RegisterClass(string key)
{
    // Strip off HKEY_CLASSES_ROOT\ from the passed key as I don't need it
    StringBuilder sb = new StringBuilder(key);
    sb.Replace(@"HKEY_CLASSES_ROOT\", "");

    // Open the CLSID\{guid} key for write access
    RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);

    // And create    the    'Control' key -    this allows    it to show up in
    // the ActiveX control container
    RegistryKey ctrl = k.CreateSubKey("Control");
    ctrl.Close();

    // Next create the CodeBase entry    - needed if    not    string named and GACced.
    RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);
    inprocServer32.SetValue("CodeBase", Assembly.GetExecutingAssembly().CodeBase);
    inprocServer32.Close();

    // Finally close the main    key
    k.Close();
    MessageBox.Show(key + " 's registered");
}

///    <summary>
///    Called to unregister the control
///    </summary>
///    <param name="key">Tke registry key</param>
[ComUnregisterFunction()]
public static void UnregisterClass(string key)
{
    StringBuilder sb = new StringBuilder(key);
    sb.Replace(@"HKEY_CLASSES_ROOT\", "");

    // Open    HKCR\CLSID\{guid} for write    access
    RegistryKey k = Registry.ClassesRoot.OpenSubKey(sb.ToString(), true);

    // Delete the 'Control'    key, but don't throw an    exception if it    does not exist
    k.DeleteSubKey("Control", false);

    // Next    open up    InprocServer32
    RegistryKey inprocServer32 = k.OpenSubKey("InprocServer32", true);

    // And delete the CodeBase key,    again not throwing if missing
    k.DeleteSubKey("CodeBase", false);

    // Finally close the main key
    k.Close();
}

각 함수는 이 컨트롤을 해당 PC내에 등록할 때 자동으로 불려지는 함수입니다. RegisterClass(..) 함수는 등록될 때, UnregisterClass(..) 함수는 등록을 해제 될 때 자동으로 불리며, 각 함수의 내용은 마치 Active X처럼 필수적인 정보들을 Registry에 적어 추가하게 됩니다.

2.4 프로젝트 설정

자 마지막으로 설정해야 하는 부분은 프로젝트 설정 부분입니다.

솔루션 탐색기에서 해당 프로젝트에서 오른쪽 클릭을 하셔서 Context Menu를 띄우세요. 그리고 “속성”에 들어가시기 바랍니다.

속성 창에 들어가서 제일 먼저 응용 프로그램 탭을 선택한 뒤에 “어셈블리 정보를 클릭합니다.”

 

어셈블리 정보 창이 떴으면 맨 아래쪽에 있는 어셈블리를 COM에 노출을 선택해주시기 바랍니다.
그리고 어셈블리 버전 안에 "*" 표시가 있으면 반드시 지워주시기 바랍니다!!!!! - ( 가장 중요. 만일 * 가 들어가 있으면 계속 버전이 자동 갱신 되기 때문에, 알 수 없는 오류를 계속 뱉어 낼 수 있습니다. )

Update ( for pjyoung 님 ) - 2010.09.13.

현재 포스트 내용만으로는 regasm 으로 이 Active X 에 등록하려는데 문제가 있더군요.
만일 위의 내용만으로 등록하려고 하면 아래의 메시지가 뜹니다.

D:\MyData\Documents\Visual Studio 2010\Projects\ActiveXTest\ActiveXTest\bin\Debu
g>C:\windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /codebase ActiveXTest
.dll
Microsoft (R) .NET Framework Assembly Registration Utility 2.0.50727.4927
Copyright (C) Microsoft Corporation 1998-2004.  All rights reserved.

RegAsm : warning RA0000 : Registering an unsigned assembly with /codebase can ca
use your assembly to interfere with other applications that may be installed on
the same computer. The /codebase switch is intended to be used only with signed
assemblies. Please give your assembly a strong name and re-register it.
RegAsm : error RA0000 : An error occurred while writing the registration informa
tion to the registry. You must have administrative credentials to perform this t
ask.  Contact your system administrator for assistance

만일 한글판이면 한글판 나름 메시지가 뜨겟는데요.. 일단, 위의 내용을 간단히 언급하자면, 2가지 오류가 있는 것입니다. 하나는 일종의 경고로써, (warning RA0000). 만든 ActiveX 내에 강력한 이름의 서명이 없다는 것입니다. 이게 없다면 뭐 다른 컴퓨터에서 안된다는 의미 같은데.. 경고라고 할지라도, 일단 해결해야 겠죠. 두번째는 Windows Vista, 7 에서만 발생하는 오류인데.. 도스 창을 띄울때 관리자 권한으로 해서 넣으라는 의미입니다.
아래의 내용은 그 부분을 해결하기 위한 내용을 정리햇습니다.

  1. codebase로 등록하려면, 최소한 dll 내에 인증서가 들어가야 된다는 것입니다. 물론 파는 제품이라면, 상업용 인증서가 들어가야 겠지만, 테스트용도라면, 개인 인증서를 직접 만들어 넣을 수 있습니다.
    인증서를 넣는 방법은 아래와 같습니다.
    1. 프로젝트를 솔루션에서 연 뒤, 프로젝트 속성에 들어갑니다.
    2. 프로젝트 속성이 열리면, 왼편에 나열된 탭들 중 Signing (한글로는 아마 '서명' 정도 일거입니다.) 탭을 클릭하시고, 열리는 내용 중 Sign the assembly( 한글로는 아마 '어셈블리 내에 서명' 이겠죠)를 체크합니다.
    3. 다음은 안에 열린 Choose a strong name key file: 에서 아래의 콤보 박스 내용 중,  New… 를 선택합니다.
    4. 그러면 새로운 다이얼로그가 뜨는데, 이 창이 바로 새로운 개인 인증서 하나 멋대로 만드는 것입니다.
      (외부에서 쓰기에는 좀 많이 부족하지만, 프로그램 돌리는 인증서로는 적당합니다.)
      Key file name 에다가 적당한 이름을 넣고.. 암호 부분은 넣어도 되고 안넣어도 됩니다.
      (넣으면 코드도 보호를 하는 것 같습니다만.. 뭐.. 귀찮으면 안넣어도 됩니다. 전 그냥 버릇처럼 넣습니다.). 다 넣었으면 OK를 클릭해서 닫습니다.
    5. 그러면 Assembly 내에 String name key로 위에서 넣은 이름대로 들어갔음을 확인합니다.
      그리고 컴파일을 다시 해주세요.
  2. 두번째 등장한 오류는 관리자 권한 문제입니다. 제 PC 가 Windows 7 이므로 Windows 7 중심으로 갑니다.
    Windows XP 라면 아주 특이하게 사용하시는 분(관리자 권한이 아닌 사용자 권한으로 동작시키는 분들)이 아닌 이상 발생되는 오류는 아닐 겁니다.
    1. 시작 을 클릭하고 검색창에 cmd 입력한 뒤, cmd에서 오른쪽 버튼을 눌러 관리자 권한으로 실행을 합니다.
    2. 그리고 열린 도스창에서 작업을 시작합니다. ( 3. 컴파일 그리고 배포 부분 )

3. 컴파일 그리고 배포.

네 이제 컴파일을 해주시기 바랍니다. 오탈자의 문제가 없다면 큰 문제 없이 컴파일이 될 것입니다. 컴파일이 완료되면, 이제 명령창(cmd) 창을 띄우세요.(시작 –> 실행 –> cmd 입력 )

그리고 다음 명령을 넣어주시기 바랍니다.

C:\Windows\Microsoft.NET\Framework\v2.0.50727\regasm /codebase “어셈블리파일”

“어셈블리파일” 이라는 부분은 지금 컴파일 된 DLL 파일의 전체 경로를 의미합니다.

예를 들자면…

"E:\Prj\ExposingDotNetControls_src\Home\Prisoner\bin\Debug\Prisoner.dll"

과 같은 스타일로 하시면 됩니다.

예전 C++이나 VB로 만든 ActiveX는 보통 regsvr32로 등록하고 해제했지만, 이제 .NET 기반으로 만든 ActiveX 는 이 regasm 이라는 도구로 하셔야 합니다. .NET Framework 2.0 을 설치하셨다면 위의 경로와 같은 위치에 regasm이 있을 것입니다.

정상적으로 등록되면 등록한 GUID 값과 함께 해서 조그만한 다이얼로그가 뜨게 됩니다.

4. 테스트

뭐 Object 태그로 Html 소스 안에 직접 박아서 테스트를 할 줄 아시는 분은 Html 소스를 만들어 하실 수 있을 것이고, 아니면 Visual Studio의 C++ 관련도구를 설치하신 분은 tstcon32.exe 라는 프로그램을 실행해서 테스트 해보실 수 있을 것입니다.

HTML 코드를 아래와 같이 넣어보아서 IE를 띄워봅니다.

<HTML><BODY>
<OBJECT id="myX"  CLASSID="CLSID:20F0F02D-044C-4013-AFAE-F2241D95FDA3" width="560" height="480"> 
</OBJECT>
</BODY></HTML>

당연히 뜨는 노란색 바가 보이는데, 그것을 클릭해서 진행해주시면… 아래 처럼 만든 모양 대로 뜹니다.



5. 정리.

사실 VC++로 만드는 Active X 보다는 배포하기가 조금은 까탈스럽습니다. 이 Active X를 돌릴 클라이언트 PC내에 .NET Framework가 설치되어 있어야 겠죠. 게다가 개발 편의로 따지만 SmartClient가 훨 좋습니다 ^^;  하지만 .NET의 개발 편의성과 당장 ActiveX가 필요한 상황에서는 좋을 해결점이 될 수 있으리라 생각됩니다.

pjyoung 님의 질의 내용을 근간으로 다시 프로젝트를 생성하면서 일부 업데이트를 했습니다.
최종 된 상태에서 정리하다 보니, 일부 내용을 Skip 해서 오해의 소지가 다분 있었으리라 생각이 듭니다.
(최소한 진행을 재점검해서 실행은 했습니다.)

PS. 첨부한 파일은 이 글을 재 테스트하기 위해서 만든 프로젝트를 압축한 내용입니다.
애석하게도 Visual Studio 2010 용으로 되어 있어, 예전 Visual Studio로는 솔루션과 프로젝트 파일을 제대로 활용할 수 없을 것입니다. 새로 프로젝트를 만들어서 파일만 가져다가 재 생성해야 할지도 모르겠네요.
그래도 모르니 일단 업로드를 해봅니다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

DEP(Data Execution Prevention) 기능 비활성화 시키기

기술자료/OS 2009. 4. 28. 10:08
XP/2003의 경우 boot.ini 파일을 편집하여 활성화, 혹은 비활성화 처리할 수 있다.
(http://support.microsoft.com/kb/875352)
그런데 Vista에서는 boot 처리하는 로직을 별도로 구축하여 만들어서, 
bcdedit.exe 라는 특수 프로그램을 통해 해당 기능을 구현할 수 있다.

만일 비활성화 시켜야 한다면,
 
   bcdedit.exe /set {current} nx AlwaysOff

라고 입력하면된다.

활성화 시키고 싶은 경우라면, 

   bcdedit.exe /set {current} nx AlwaysOn

라고 입력하면 된다.

(참고 사이트 : http://www.mydigitallife.info/2007/01/15/disable-and-turn-off-or-enable-or-turn-on-data-execution-prevention-dep-in-windows-vista/ )

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

ClearCase의 UCM

기술자료/개발도구 2009. 4. 3. 17:18

무슨 약자가 그리 많은지….

UCM = Unified Change Management. 범용 변화 관리. 기능을 말한다.
ClearCase를 설치 한뒤, VOB를 만들 때 마법사 창에 묻는 내용 중 하나가 project의 VOB에 대한 UCM도 생성할지 여부를 결정하는 부분이 있다. 즉 이 작업이 바로 ClearQuest와의 연동을 말하는 것 같다.

설치할 때 잘못 설치했는지 현재 ClearQuest에 대해 라이센스가 없다고 에러가 나는 바람에 정확한 테스트는 못했지만, Create as a UCM project VOB를 선택하고 설치를 진행하면 연동할 ClearQuest에 대한 정보를 묻는다. 여기에 현재 구성해서 만들어진 ClearQuest Storage에 대한 연결을 구축하면 된다.

그러나 아직 실행은 못해보았고, 지금도 Created as UCM project VOB 옵션은 끈 채로 진행하고 있다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

Snapshot View에 대한 추가적인 생각

기술자료/개발도구 2009. 4. 3. 16:07

아래 글은 ClearCase에 대한 소개를 적은 글이다.
사실 아래의 글을 만든 이유는 바로 ClearCase에서 제공하는 기능 중 View라는 것이 헷갈려서 쓰기 시작했다.
특히, 그 View를 만들때  Dynamic View와 Snapshot View 중 하나를 선택하게 끔 나오고 있다.
일단 지금까지 생각한 것을 정리하자면 아래와 같다.

Snapshot View는 서버의 데이터(VOB)와 똑같은 한 벌의 데이터를 각 개발자(혹은 사용자)들이 갖는 것이다. 즉 서버의 데이터의 내용을 복제해서 사용자의 개인 PC 내의 특정 폴더에 복사해 놓고, 그 안에서 작업하고 Check Out / Check In 할 때만 서버와 통신하는 방식인 것이다. 현재 Visual Source Safe에서 하는 방식이라고 보면 된다.

Dynamic View는 서버 내 특정 공간을 주고 사용자는 서버에 직접 데이터를 얹어 놓고 작업하는 것이다. 이 때 Dynamic View의 내용은 VOB를 그대로 보여주는 것은 아니다. 별도의 공간을 할당하기 때문에, 사용자가 아무리 변경해도 VOB에 바로 적용되는 것은 아니다. 최종적으로 Check In이 되어야 Mixing되어 적용되는 것이다.

아무래도 지금 필자는 Source Safe에 익숙하기 때문에, 이 ClearCase를 Snapshot의 개념으로 맞추어 이해하고 있어 Snapshot과 Dynamic의 차이를 바라보지 못한 것 같다.

일단 ClearCase는 특수한 상황이 아니면 Dynamic View의 형태로 구성하고 개발을 하는 것이 좋을 것 같다.

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

What is ClearCase

기술자료/개발도구 2009. 4. 3. 15:59

IBM의 Version Control  Solution 중 Rational 에서 만든 ClearCase라는 제품이 있다.
자세한 역사는 잘은 모르겠지만, 분산 환경과 복잡한 버전 관리에 있어 우수하다고 한다.

해야 할 일도 형상관리인지라, 이 ClearCase라는 것에 대한 파악이 필요하고,
마침 잘 설명되어 있는 PPT를 구해, 그 내용을 번역 하면서 정리해보도록 하겠다.
이 내용은  ftp.ccs.neu.edu/pub/people/laf/Talks-2000-nonames/ClearCase.ppt에서 원본을 다운로드 받을 수 있다.

소스 제어

소스 제어란, 간단하게 말하면, 변경사항이 발생하는 경우 새로운 버전을 매겨 등록 관리하는 것을 말한다. 그래서 변경 때 마다 버전이 매겨 지기 때문에, 어디서 무엇이 어느 시점에 추가/수정/삭제되었는지 판단되기 때문에, 문제가 발생할 때 어느 부분의 변경으로 발생되어 있는지 정확하게 추적할 수 있게 된다.

다음 그림에서 보듯 특정 사람이 특정 내용을 변경할 때, 먼저 버전 관리되는 항목 중 변경할 항목을 Check Out을 한다. 이는 무척 중요한 행위인데, Check Out을 하는 순간 그 시점의 코드는 그 사람의 소유가 되게 된다. 그리고 필요한 내용에 따라 변경한 다음 Check In을 하게 되면 버전 관리 도구는 자동으로 버전을 증가 시키고 서버에 등록하게 된다. 아래의 그림에 따르면 0번 버전의 내용을 Check Out 한 뒤 수정하고 다시 Check In을 통해 버전을 1 증가 시켜 1번 버전이 되는 것이다. 이처럼 변화를 준 뒤 Check Out-Check In을 함으로써 해당 버전 관리 내용의 버전은 증가되게 된다. 여기서 버전 관리를 하게 되는 주축, 최종 배포 버전이 되는 코드 내용이 바로 Main Line이라고 한다.

기존 버전 관리 소프트웨어 종류

사실 버전 관리 작업은 늘 필요로 했던 요청 사항이였고, 예전부터 이미 다양한 도구들이 만들어졌고 사용되고 있었다. 그 중 대표적인 것이 아래와 같다.

* ClearCase - Windows and UNIX
    - 지금 부터 살펴볼 도구.
* Visual SourceSafe – Windows
    - MS에서 주로 사용되는 버전 관리도구로 Visual Studio랑 가장 궁합이 잘 맞는 도구
* CVS – UNIX
    - Unix 계열의 제품으로 Client는 여러 플랫폼을 지원하지만, 서버는 Unix만 제공. linux용인 제품도 많다.
* CMVision - Unix and Windows
   - 모름
* Control CS - Unix and Windows
   - 모름

각 도구들은 현재 버전 관리 뿐만 아니라 파일 관리까지 제공하며 Text Diffrencing에서 부터 Binary Diffrencing까지 다양한 형태로 제공된다. 이 중 살펴볼 버전 관리도구가 바로 ClearCase이다.

ClearCase
ClearCase에는 무척 다양한 기능이 탑재 되어 있다. 모든 기능을 세세히 살펴보는 것은 어렵고 대표적인 기능들을 설명하도록 하겠다.

Overview
ClearCase의 개괄적인 대표적인 장점들은 아래와 같다.

  • 모든 종류의 파일과 디렉터리에 대한 버전 관리 기능을 제공한다.
  • 각 버전 이력에 대한 정보를 항상 기록하며 필요하면 버전 이력에 대한 보고서를 제시한다.
  • 매 Release 때 마다 정확한 코드 복제를 보장한다.
  • 최신 버전 코드 복제 및 추적 기능을 제공한다.
  • 강력한 코드 버전 분할(Branch) 및 통합(Merge) 기능을 제공한다.
  • 모든 소프트웨어 구성요소의 통합을 보장한다.

각 장점들을 기준으로 하나씩 설명하도록 하겠다.

ClearCase의 중요 기능 요소.
버전 관리를 위한 기능을 기본적인 기능은 다음과 같다.

  • 버전 분할(Branching)
  • 버전 통합(Merging)
  • 버전 라벨 처리(Labeling)

사실 각 상황이나 구성에 따라 복잡한 기능들이 많지만, 버전 관리 작업을 단순화 하면, 위의 3가지 매커니즘을 통해 버전을 관리하게 된다.  위의 기능들을 적용한 결과물을 트리형태로 표시하면 아래의 그림과 같다.


/Main 이 바로 버전 관리의 중요 지점이라고 보면 된다. 그 중 0, 1, 2, 3, … 이 버전을 의미한다. /Main을 계승하는 버전이 실제적으로 배포될 버전이며 그 버전들 중 최신 버전(그림에서는 5번이 된다.)을 컴파일 하여 제공하면 되는 것이다.  각 요소들의 파일, 디렉토리에 관계 없이 모든 요소들이 버전관리를 받게 된다. 또한 버전 관리를 받는 요소에 Check Out되는 순간 Read Only가 되어 다른 이들이 수정하지 못하게 끔 한다. 

BRANCH
라는 부분은 특정 버전에서 다른이가 Check-Out된 내용에 대한 수정작업을 하거나, 기능적인 테스트를 위해 임시적인 버전을 설정하여 구성할 때 사용된다. 위의 그림에서 보면 3번에서 /Rls2_bugfix라는 하위에 다시 0, 1, 2 식으로 새롭게 버전이 만들어지는데 이 처럼 /Rls2_bugfix 라는 형태로 구성되는 것을 Branch라고 한다. /Rls2_bugfix는 /Main의 3번 소스를 그대로 가져와 새롭게 변경하고 적용하는 것이다. 보통 이런 작업은 버그 수정 작업을 하거나, 검증되지 않은 새로운 기능 추가할 때 사용된다. /Main의 3번 소스를 기준으로 새로운 기능을 추가하여 자체적으로 컴파일 하고 실행해보고 이상이 없다면 /Main에 돌려주고, 문제가 있다면 폐기하는 일종의 임시 버전 같은 것이다. 이 Branch 작업은 무한대로 할 수 있으며 Branch된 버전에 새롭게 더 Branch 처리를 할 수 있다.

MERGE
란, BRACH된 하위 버전을 상위 버전에 포함시키는 작업이 된다. 통합 결과 이상이 없다면 이런 단계를 통해 버전에 합쳐지게 된다. 이 작업은 하위의 작업이 상위로 올라가는 형태로 추가되게 된다. 물론 통합될 필요가 없는 경우에는 하위 버전을 그냥 버릴 수 있다.

LABELS
는 각 버전에 이름을 붙이는 작업이다. 단순히 번호로 나열된 버전에 특정한 이름이나 버전을 붙여 해당 버전의 의미를 정확히 나타내는 것이다. 위의 예제에서는 Beta, Rls 1.0, Rls 2.0 …. 이런 식으로 붙여 해당 버전이 베타 버전 소스이다, 새로 Relase된 버전이다 이런 식으로 이정표를 새기는 작업을 하게 된다. Code Complete나 특정 개발 마일스톤 때 매겨지게 된다.

위의 기본 기능을 편리하게 할 수 있도록 ClearCase에서는 다음과 같은 기능들을 제공한다.

  • Check Out –> 편집 –> Check In 이라는 단순한 모델로 버전 관리를 한다.
  • 특별히 충돌하는 내용이 없는 변경사항에 대해 지능적인 Merging 기능을 제공하여 자동적으로 버전 통합(Merge) 해준다.
  • 그래픽 기반의 비교 및 통합(Merge) 도구를 제공한다.
  • Dynamic(동적) View, Snapshot(순간보존 형) View라는 모델을 제공해 상황에 맞는 형태로 작업할 수 있도록 제공한다.

View와 VOB

View
View란 ClearCase에서 제공하는 모델 중 하나로, 작업 공간 관리를 위한 기초 단위이다. 각각 개별적인 개발자 혹은 밀접한 작업자 그룹에서 독자적으로 작업하는 공간으로 VOB(Versioned Object Base)에서 필요한 사항들만 나타내는 부분이다. 프로젝트 전반적인 소스 코드가 있을 때, 각 개발자 혹은 독자 그룹 마다 주로 보는 파일 이나 디렉터리들이 다를 것이다. 그래서 전체 소스 코드 중 주로 보게 되는 항목들을 선택하여 볼 수 있도록 제공하는 부분이다. 그래서 프로젝트에 해당하는 파일이나 디렉터리를 모두 공유해서 사용하지만, 마치 개별적인 특정 폴더 및 파일을 보여주게 된다.

VOB(Versioned Object Base)
ClearCase에 각 요소들을 저장하는 저장장소로 모두 읽기 전용으로 제공된다. 네트워크 기반의 저장장소로써, 모든 이들의 소스를 저장하고 관리받는 기준 소스 정보들이다. 각 사용자들은 이 VOB를 공유하게 되며 수정할 때는 View에서 수정하게되며 최종적으로 변경 사항 적용될 때 View에서 VOB로 적용된다. Windows에서는 네트워크 드라이브로 UNIX에서는 Mount된 디렉터리로 제공된다.

View와 VOB의 관계
위에서는 단순히 텍스트로 나열하기만 해 조금 난해할 수 있는데, VOB와 View의 관계를 굳이 표현하면 아래와 같다.

즉 사용자의 환경에 따라 공통의 VOB 자료를 View의 설정만 다르게 해서 필요한 내용을 중심으로 표시하는 내용이다. 만일 개발자 1이 특정 소스를 변경했을 때 Check-In 하지 않는 이상 VOB에 반영되지 않기 때문에, 다른 이들은 간섭되지 않는다. 즉 최종 변경 후 Check In이 되어야 VOB에 반영되며 반영되어야 다른 이들에게도 전파가 되게 된다.

Configuration Specification
위에서 언급했을 때 사용자 별로, 버전 별로 보여주는 내용이 틀려지도록 할 수 있다고 했다. 이 때 이런식으로 보여질 수 있도록 View내에 값을 설정할 수 있는데, 그 설정을 Configuration Specification(구성 정의?)라고 한다. 이 안에 마치 SQL의 쿼리 처럼 규칙에 필요한 사항들에 해당하는 값을 넣으면 전체 VOB 내용 중 Filter되어 해당 View에 전달되게 된다. 이 값은 Create View 할 때 기본값이 설정되며 필요시 수정하여 변경할 수 있다.

기본 값은 아래와 같다.

element * CHECKEDOUT
element * \main\LATEST

위의 내용을 의미하는 바는 Check Out된 항목 들과, Main 의 LASTEST 항목들을 모두 가져오게 된다.

View의 종류
지금까지 View가 무엇인지를 언급했다면 이번에는 View의 종류를 언급하려 한다.
개발 환경에 따라 다르게 설정하여 진행하게 되는데, 여기에는 2가지 종류가 있다.

  • Snapshot View
  • Dynamic View

Snapshot View
Snapshot이라는 뜻 때로 특정 시점의 그대로의 내용을 표시하는 View이다. 즉 한번에 모든 설정과 값들을 사용자의 환경에 그대로 붑고, VOB와의 통신은 끊은 채 독자적으로 관리하는 View이다. 보통 네트워크로 ClearCase와 항상 연결되기 어려운 환경이거나, 공동작업이 거의 없는 부분에 대한 수정하는 경우 많이 사용된다.

Dynamic View
각 요소들을 투명하게 연결하여, 항상 최신 버전을 유지하고, 변경된 사용만 업데이트 하기 때문에 적은 양만 업데이트 하며, 빌드에 대한 감사등을 지원한다. 보통 네트워크 드라이브와 같이 상시 연결된 채널을 구성하게 된다.

Snapshot – Dynamic View 의 유사점

  • Configuration Specification 을 통해 버전 요소들을 선택할 수 있다.
  • Check Out – 편집 – Check In 의 기본 행위로 동작한다.
  • Check Out한 대상을 Reserved(예약)/(Unreserved)비 예약 상태로 설정할 수 있다.

Snapshot – Dynamic View의 차이점

  • Snapshot은 버전 자체가 만료될 수 있기 때문에 주기적인 서버 동기화 작업이 필요하다.
  • Dynamic의 경우 Check Out 하는 경우 서버와의 항상 동기화 작업을 수행하기 때문에, VOB에서 굳이 최신 버전을 일일이 받아 올 필요가 없다.
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

UML의 스테레오 타입이라는게....

기술자료/개발도구 2009. 4. 2. 17:32
UML로 Use Case나 Class Diagram 조금 깔짝거리던 실력이라,
무지에 가까운 지식 속에서 끊임없이 도전해오듯 나오는 속성이
바로 스테레오 타입(Stereo Type)

모른체 지나가기엔 너무 먼 길을 걸은 느낌에 잠깐 검색하니
아래의 글을 찾았다.

http://bkangel.egloos.com/1565687

다 읽고 난 소감은....

이놈의 스테레오 타입이라는게 결국 Domain (경계?) 이나 Category (분류?)의 의미가
가깝다는 생각이다. 일단, 정확함을 떠나서 그렇게 생각하면서
UML로 된 그림들을 하나씩 하나씩 봐야 겠다.
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

SPSite(사이트콜렉션)의 사이트 용량 변경 방법

기술자료/.NET 2009. 3. 12. 15:12

다음 코드를 참고하세요…

long nQuata = long.Parse("500");

 

// 용량은 1byte로 계산 1K는 1024, 1M는 1024*1024

nQuata = nQuata * 1024L * 1024L;

 

           

SPSite site = new SPSite("http://www.knoie.com/sites/1");

 

 

Microsoft.SharePoint.Administration.SPSiteAdministration admin = new Microsoft.SharePoint.Administration.SPSiteAdministration(site.ID);

 

Microsoft.SharePoint.Administration.SPQuota quota = new Microsoft.SharePoint.Administration.SPQuota();

           

// 저장 용량(0L은 제한없음)

quota.StorageMaximumLevel = nQuata;

// 경고 용량(0L은 제한없음)

quota.StorageWarningLevel = 0L;

// 최대 사용자 수(0은 제한 없음)

quota.InvitedUserMaximumLevel = 0;

           

 

admin.Quota = quota;

admin.Dispose();

 

이 코드의 핵은 SPSiteAdministration 인데 이 안에서 SPSite를 관리자 모드로 설정하여 SPSite 설정을 다양하게

해줄 수 있습니다. 이 때, 내부적으로 다음과 같은 코드로 현재 사용자가 권한이 있는지 체크합니다.

if (this.m_Site.WebApplication.Farm.CurrentUserIsAdministrator())
{
            this.m_Site.AdministratorOperationMode = true;
}

 

즉 위의 코드는 관리자 권한으로 실행되는 페이지 안에서만 실행됩니다.

 

728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

이벤트 ID 5785 - 출력 캐싱에 대한 게시 사용자 지정 문자열 처리기.... 문제 해결 방법

기술자료/.NET 2009. 2. 25. 11:57
MOSS 2007에서 아래와 같은 형태로 구성 시 위의 이벤트 로그가 계속 쌓이게 된다.

1. Root 사이트가 게시 사이트 형태인 경우 ( 공동 작업 포탈이든, 게시 사이트 든..)
2. Root 사이트에 하위 Application으로 사이트를 추가하여 구성한 경우.
   ( 보통 가상 디렉터리 만들 때, 기능 옵션에 실행을 체크하여 넣으면 "기어" 표시가 생기면서
     하위 응용 프로그램으로 구성되는 경우 )
보낸 사람 ForBlog2
위와 같은 형태에 있을 때 가상 디렉터리 이하의 특정 리소스(JS 파일이든, ASPX 파일이든)에 접근하다가, 아래와 같은 이벤트로그를 뿜어댄다.
Event Type:    Error
Event Source:    Office SharePoint Server
Event Category:    게시 캐시
Event ID:    5785
Date:        2009-02-25
Time:        오전 10:57:07
User:        N/A
Computer:    KYOKO
Description:
출력 캐싱에 대한 게시 사용자 지정 문자열 처리기에 연결할 수 없습니다. IIS 인스턴스 ID는 '1986061912'이고 URL은 'http://www.knoie.com/virtualdir1/Images/presence/presence_off.gif'입니다.

For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.

위의 내용을 이곳 저곳을 기웃 거리다가 한 Technet 의 토론 내용 중 하나의 쓰레드에 눈이 가서 훝어 본 결과 단 한줄로 해결 되었다.

해당 가상 디렉터리는 자체적인 응용 프로그램 쓰레드를 갖기 때문에, 보통 web.config를 별도로 구성하는 경우가 많다. 만일 없다면 기본 web.config를 만들어서 구성하신 뒤, module 부분에 추가하면 된다.

<httpModules>
      <remove name="PublishingHttpModule" />
       <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <!--<remove name="ApplicationMasterPage" />-->
</httpModules>
web.config 에서 httpModules로 찾아서 해당하는 섹션이 보이면 굵게 보이는 저 한 줄을 넣어주면 된다.
나머지는 그대로 두면 된다. 만일 httpModules라는 섹션이 없다면, System.web 섹션을 찾아서 그 안에 다음과 같이 추가하면 된다.

<system.web>
     <httpModules>
          <remove name="PublishingHttpModule" />     
     </httpModules>
 .......
<system.web>

요는  PublishingHttpModule 이라는 Module을 없애면 된다.
728x90
블로그 이미지

하인도1

[하인드/하인도/인도짱 의 홈페이지] 저만의 공간입니다. 다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다. 다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.

  • «
  • 1
  • ···
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • ···
  • 44
  • »
250x250

블로그 내에 소스 코드 삽입 이사온 기념 스킨도... RSS 전문 기능 비활성화 관련. 스킨 바꾸어 보았습니다. 서버 파일 정리 좀 했습니다.

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

2010 me2photo 블로그 친구 수 Tutorial Buscuit windows me2dayzm 협업 불만 Google Apps Engine 지름신 Visual Studio 매뉴얼 twi2me 것 me2sms e-book 개발환경 MOSS 2007 인터파크 java WSS Azure 오류 SharePoint 비스킷 좀 moss

  • Total :
  • Today :
  • Yesterday :

Copyright © 2015-2025 Socialdev. All Rights Reserved.

Copyright © 2015-2025 Socialdev. All Rights Reserved.

티스토리툴바