Office SharePoint Server 2007 사용자 정의 Feature 만들기

요약: Microsoft Office SharePoint Server 2007 에서는 서버 팜 전체에서 단위 기능을 패키징하여 쉽게 배포할 수 있도록 지원합니다.
여기에서는 사용자 정의 Feature 생성과 배포에 대하여 설명합니다.

frank Rice, Microsoft Corporation

2월 2008년

적용대상: Microsoft Office SharePoint Server 2007, Microsoft Visual Studio 2005

내용

  • 개요

  • Feature 구성 요소

  • 사용자 정의 Feature 만들기

  • 결론

  • 추가 리소스

개요

Microsoft Office SharePoint Server 2007(이하 MOSS) 의 가장 중요한 발전 중 하나는 템플릿 프레임워크 기반으로 동작한다는 점 입니다. MOSS 의 Feature 는 이를 가장 잘 나타내고 있는 기능입니다. 사용자 정의 Feature 는 서버 팜 내에서 테스트, 배포 및 활성화 되며 사용자 정의 워크플로우(workflow), 콘텐츠 형식(Content Type), 사용자 인터페이스 또는 목록 및 문서라이브러리 등 새로운 템플릿을 만들 수도 있습니다. 예를 들어 특정 사이트에 존재하는 사용자 정의 문서라이브러리의 스키마를  다른 팀 사이트에 배포해야 할 경우, 관리자는 이를 Feature 로 만들 수 있습니다. 이와 같은 경우 스키마 파일은 CAML(Collaborative Markup Language) 로 만들어 집니다. 또한 이 Feature 를  솔루션 형태로 만들면 관리자는 이를 원하는 곳에 배포할 수 있습니다.

Feature 의 또 다른 이점은 사이트 정의 파일(ONET.xml)을 사용한다는 것입니다. ONET.xml 파일은  Windows SharePoint Services 에서 사용할 수 있는  네비게이션, 목록 그리고 문서라이브러리에 대한 정보를 제공합니다. 이전 버전(SharePoint Portal Server 2003) 에서 ONET.xml 파일은 사이트에 대한 모든 정보를 담으려고 했었지만, 현재 버전에서는 Feature 의 출현으로 ONET.xml 파일에서 정의되어 있던 많은 정보들이 Feature 로 분리되어 ONET.xml 의 기능은 축소될 수 있었습니다.

이 문서에서는 사용자 정의 Feature 을 생성하는 것에 대하여 설명하고 있지만, 그전에 Feature 의 기본적인 기능을  먼저 검토하는 것이 유용합니다.

Feature 구성 요소

일반적으로 SharePoint Server 가 설치되면 Feature 는 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES 경로에 저장됩니다. 각 Feature 들은 이 경로 하위의 개별 폴더에 존재하게 되며, 각 Feature의 하위 디렉토리에는 적어도 하나의 feature.xml 파일이 존재하게 됩니다. feature.xml 파일은 SharePoint 코드와 기능을 정의 하는 XML 파일을 찾을 수 있는 메니 페스트 역할을 합니다.  feature.xml 은 Feature 요소(element)를 포함하고 있으며 속성으로 어셈블리, 참조파일, 종속성 등을 정의하고 있습니다. 또한 옵션으로 Feature 구성요소나 타입을 정의하고 있는 XML 파일(Element 요소(element)를 정의하고 있음)을 지정할 수 있습니다.

다음은 Feature 의 예제 입니다.

Feature.xml 파일

feature.xml 파일은 Feature와 관련된 메타데이터를 정의합니다.

<?xml version="1.0" encoding="utf-8" ?>
<Feature Id="00BFEA71-E717-4E80-AA19-D0CBE412FFA6"
   Title="Hello World Feature"
   Description="$Resources: core,documentlibraryDesc;"
   Version="1.0.0.0" Scope="Web" Hidden="FALSE"
   DefaultResourceFile="documentLibrary"
...ImageUrl="menuprofile.gif"
   xmlns="https://schemas.microsoft.com/sharepoint/">
   <ElementManifests>
      <ElementManifest Location="elements.xml" />
   </ElementManifests>
</Feature>

다음은 feature.xml 파일의 <Feature> 요소(element) 에 포함된 메타데이터 입니다.

  • ID: Feature 의 고유하게 식별자 이며 GUID 값. 이 값은 서버 팜 전체에서 고유해야 합니다.

  • Title: Feature의 이름. 이 이름은 SharePoint 사이트에서 사이트 설정 의 사이트 기능 페이지에서 보여지게 됩니다.

  • Description: Feature 의 설명. 아래 예제에서는 설명 란이 리소스 파일(.resx 확장명을 가진 파일)로 하드코딩 되어 있습니다. 리소스 파일 내에서 문자열은 키/값 의 쌍으로 저장 됩니다. 다음은 documentLibrary.resx 의 Feature 의 설명을 제공하고 있는 리소스 파일의 부분 예제 입니다.

    
    <root>
       <Data Name="documentlibraryDesc">
          <Value>A custom publishing page for Northwind Traders.</Value>
       </Data>
    </root>
    
  • Version: Feature의 버전. 이 값은  증가할 수 있습니다.

  • Scope: 일반적으로 Web 혹은 Site 값이 됩니다. Scope 은 Feature 가 활성화 혹은 비활성화 될 수 있는 범위를 정의 합니다. 만약 Scope 이 Web 이라면 Feature 는 특정 사이트 내에서 활성화/비활성화 할 수 있으며, Scope 이 Site 라면 Feature 는 사이트 컬렉션에서 활성화/비활성화 할 수 있습니다. Scope 은 사이트 컬렉션 기능 페이지에서 디스플레이 되며 활성화/ 비활성화를 설정할 수 있습니다. Scope 의 값은 그 외에도 WebApplicationFarm 값도 존재할 수 있습니다.

  • Hidden: TRUE 또는 FALSE  값을 가질 수 있음. Feature 는 이 설정을 통하여 사이트 기능 페이지에 기능 목록에서 보여지거나 숨겨지게 됩니다. 이 값을 TRUE로 설정한 상태에서 Feature 를 활성화 하려면 명령 프롬프트에서  STSADM.EXE 유틸리티를 사용하거나 다른 Feature 의 종속성을 통해 활성화 해야 합니다.

  • DefaultResourceFile: 설정 및 자주 변경될 수 있는 항목들의 중앙 위치를 지정합니다.

  • ImageUrl: 사이트 기능 페이지에서 Feature 옆에 표시될 이미지의 경로를 설정합니다.

  • <ElementManifests> : <ElementManifest> 엘리먼트 들을 담고 있는 엘리먼트

  • <ElementManifest>:  Feature 을 구현하고 있는 메니페스트 파일의 위치. 이 메니페스트 파일에는 <Elements> 엘리먼트가 들어 있습니다. 메니페스트 파일의 경로는 상대경로를 사용해야만 합니다.

다음 elements.xml 파일은 특정 Feature 를 구현하고 있는  샘플입니다. 이 메니페스트 파일은 Feature 가 갖게 될 여러 가지 기능이나 액션에 대해서 정의하게 됩니다.  예를 들어 리스트에 적용되는 ItemUpdated 이벤트 처리기는 특정 리스트 형식에서 아이템이 변경되었을 경우의 동작을 어셈블리로 만들어 놓을 수 있습니다. 아래의 메니페스트 파일은 목록의 열에서 사용될 필드를 정의하고 있습니다.


<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
   <Field ID="{0B9E3314-3F9F-2aa8-4BCD-7CB89A6FB32D}"
      Name="ProductName"
      SourceID=https://schemas.microsoft.com/sharepoint/v3
      StaticName="ProductName"
      Group="ProductColumns"
      DisplayName="Product Name"
      Type="Text">
   </Field>
</Elements>

Elements 메니페스트 파일은 이름과 GUID로 식별됩니다. 그룹 이름과 디스플레이명은 SharePoint 사이트의 컬럼 갤러리 페이지 에서 볼 수 있으며, 이러한 값들은 리소스 파일을 이용하여 쉽게 만들어 낼 수 있습니다.  그리고 모든 필드는 반드시 Windows SharePoint Services 의 필드 타입과 연결이 되어 있어야만 합니다.

참고

일반적으로 그룹은 사용자 인터페이스 (UI) 에서 형식별로 나누어져 보여지게 됩니다.

Feature 설치

feature.xml 과 elements.xml 파일을 만든 후에는 이를 설치하고 활성화 해야 합니다. 이는 세 단계를 거치게 됩니다.

Feature 설치 및 활성화

  1. Windows SharePoint Services FEATURES 디렉터리로 두 파일이 포함된 폴더를 복사합니다.

  2. STSADM.EXE 유틸리티를 실행하여 Feature를 설치합니다.

  3. STSADM.EXE 유틸리티를 실행하여 Windows SharePoint Services 사이트에 활성화 합니다.

사용자 정의 Feature 만들기

다음 절차에서는 위젯에 대한 정보를 저장하는 목록 콘텐츠 형식(List Content Type)을 만듭니다. 이 예제는 매우 간단한 세계의 텍스트 필드를 포함합니다.

  • Name

  • Version

  • Description

생성한 콘텐츠 형식은 수동으로 추가하지 않고도 서버 팜의 모든 사이트에서 사용가능하게 할 수 있으며, 이는 관리자에게만 허락되어 있습니다.

목록 열 정의(List Column Definition File) 파일 만들기

  1. CustomWidgetColumns 라는 이름의 작업 폴더를 생성합니다.

  2. 두 번째로 열 정의 XML 파일을 생성합니다. (SharePoint 의 기본으로 생성되어 있는 컬럼 정의 파일을 먼저 살펴보고 만들어 보는것도 좋은 방법입니다. 다음 경로에서 컬럼 정의에 대한 예제를 찾을 수 있습니다.)

    C: \Program Files\Common Files\Microsoft Shared\web 서버 extensions\12\TEMPLATE\FEATURES

    SharePoint 사이트 열 기본 파일은 아래 경로에 위치합니다.

    \TEMPLATE\FEATURES\fields\fieldswss.xml

    이제 fieldsWidget 라는 작업 폴더를 만듭니다.fieldsWidget 폴더에 있는 fieldsWidget.xml 이름의 XML 파일을 만들고 다음 XML을 다시 붙여 넣습니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <Elements xmlns="https://schemas.microsoft.com/sharepoint/">
    <Field ID="{DA7A42EE-CDD5-4ec4-A641-2D773B320DA5}"
            Name="Name"
            SourceID="https://schemas.microsoft.com/sharepoint/v3"
            StaticName="Name"
            Group="Widget Data"
            Type="Text"
            Hidden="FALSE"
            DisplayName="Widget Name" />
    <Field ID="{C1005435-A46E-32ea-ABC1-1C37DA453623}"
            Name="Version"
            SourceID="https://schemas.microsoft.com/sharepoint/v3"
            StaticName="Version"
            Group="Widget Data"
            Type="Text"
            Hidden="FALSE"
            DisplayName="Versions" />
    <Field ID="{99C3A33C-AC20-43ca-8900-AE4E1D22AEE6}"
            Name="Description"
            SourceID="https://schemas.microsoft.com/sharepoint/v3"
            StaticName=" Description"
            Group="Widget Data"
            Type="Text"
            Hidden="FALSE"
            DisplayName="Description" />
    </Elements>
    

    이 예제에서 <Elements>엘리먼트는 목록에서 열을 나타내는 필드를 포함하고 있습니다. 그리고 <Field> 엘리먼트는 각 컬럼에 대한 속성, 즉 메터데이터 정보를 포함합니다. ID 속성은 32자의 GUID 값을 갖게 되는데, 이는 Microsoft Visual Studio 에서 제공되는 guidgen.exe. 유틸리티를 사용하여 만드는것이 가장 용이합니다. 다음은 guidgen.exe 의 경로이다.

    C:\Program Files\Microsoft Visual Studio에서는 8\Common7\Tools\guidgen.exe

    Group 속성에서는 사이트 열이 어떤 그룹에 포함될 것인지를 정의합니다. 이는 SharePoint 사이트의 열 페이지에서 볼 수 있습니다. 만약 SharePoint 에 기본으로 존재하지 않는 새로운 그룹 이름을 여기에 입력하게 되면 SharePoint 는 자동으로 이 그룹을 생성하게 됩니다. Type 속성은 필드의 데이터 타입을 지정하는데, 이는 콘텐츠 형식을 필요로 하게 됩니다. 새로운 데이터 타입 생성방법을 알고 싶다면 fieldswss.xml 파일을 참고 하시기 바랍니다.

  3. 마지막으로 fieldsWidget 폴더에  feature.xml 파일을 만들고 다음 XML을 이를 붙여 넣습니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <Feature  Id="3C637DAA-0239-40a1-A677-F0422E10741A"
              Title="Widget Data Site Columns"
              Description="Installs columns designed to manage information about widgets."
              Version="12.0.0.0"
              Hidden="FALSE"
              Scope="Site"
              DefaultResourceFile="core"
              xmlns="https://schemas.microsoft.com/sharepoint/">
        <ElementManifests>
            <ElementManifest Location="fieldsWidget.xml" />
        </ElementManifests>
    </Feature>
    

    주의: <Feature>의 Id 속성 값은 fieldWidget.xml 파일처럼 "{}" 중괄호가 들어가지 않습니다. 하지만 SharePoint 의 어떤 Id 속성 값들은 "{}" 중괄호를 포함하고 있다는 것을 주의하시기 바랍니다.

    Hidden 속성은 Feature 가 사이트 기능 페이지에서 보여질 것인가를 설정합니다. 이 값이 True 이면 사용자에게 보여지지 않게 됩니다. Scope 속성은 Site 로 설정되어 있습니다. 이는 해당 Feature 가 전체 사이트 콜렉션에서 설치 및 활성화 된다는 것을 의미합니다. 마지막으로 <ElementManifest> 엘리먼트의 Location 속성은 Feature 를 위해 생성한 메니페스트 파일의 이름을 입력합니다.  파일의 위치는 12\TEMPLATE\FEATURES 를 기준으로 상대 경로로 입력해야 합니다.

이제 Feature 를 위한 사이트 열 정의가 완료되었습니다. 이제 Feature 를 이루고 있는 feature의 구성요소를 생성해야 합니다.

<Elements xmlns="https://schemas.microsoft.com/sharepoint/">
    <ContentType ID="0x0100D76B3817D18C4a97D3B1742271806CCF"
        Name="Widget Data"
        Group="Widgets"
        Description="Designed to facilitate the storage of widget information."
        Version="0">
        <FieldRefs>
            <FieldRef ID="{DA7A42EE-CDD5-4ec4-A641-2D773B320DA5}" Name="Name" />
            <FieldRef ID="{C1005435-A46E-32ea-ABC1-1C37DA453623}" Name="Version" />
            <FieldRef ID="{99C3A33C-AC20-43ca-8900-AE4E1D22AEE6}" Name="Description" />
        </FieldRefs>
    </ContentType>
</Elements>

여기서 한가지 주의할 점은 <ContentType> 엘리먼트의 ID 속성입니다. 이 ID 속성은 콘텐츠 타입의 상속값과 GUID 의 조합입니다. 예를 들어 ID 값이 "0x0100" 으로 시작한다면 item 콘텐트 타입을 상속받았다는 의미입니다. 그리고 나머지 값들은 32 글자의 GUID 값을 입력합니다.

참고

자세한 내용은 콘텐츠 형식 ID를항목을 참조하십시오.

<FieldRef> 엘리먼트는 사이트 열 정의를 참조합니다. 즉, 여기서는 fieldWidget.xml 파일을 참조하게 됩니다. ID , Name 속성은 반드시 참조하고 있는 사이트 열 값과 일치해야 합니다.

사이트 콘텐츠 형식을 만드는 더 좋은 방법을 알고 싶다면, 아래 위치의 파일을 참고 하시기 바랍니다.

\TEMPLATE\FEATURES\ctypes\ctypeswss.xml

콘텐츠 형식에 대한 일반 xml 스키마에 대한 설명은 Content Type Definition Schema를 참고하시기 바랍니다.

콘텐츠 형식에 대해 XML 만들었으므로, 이제 Feature 파일을 생성 해야 합니다.

콘텐트 형식 메니페스트와 Feature 파일 만들기

  1. 작업 폴더에 ctypesWidget 이름의 폴더를 만듭니다.

  2. ctypesWidget 폴더에 ctypesWidget.xml 라는 이름으로 XML 파일을 생성하고, 위에서 만든 콘텐트 형식을 붙여 넣기 합니다..

  3. 사이트 열 정의에서 연습했던 것처럼 ctypesWidget 폴더에서 feature.xml 파일을 만든 다음 XML을 붙여 넣기 합니다.

    <?xml version="1.0" encoding="utf-8" ?>
    <Feature  Id="9AA45361-A65F-41df-63D3-676B412E3FD6"
       Title="Widget Data Content Types"
       Description="Installs content types designed to manage information about widgets."
       Version="12.0.0.0"
       Hidden="FALSE"
       Scope="Site"
       DefaultResourceFile="core"
       xmlns="https://schemas.microsoft.com/sharepoint/">
       <ElementManifests>
          <ElementManifest Location="ctypesWidget.xml" />
       </ElementManifests>
       <ActivationDependencies>
          <!-- Installs the site columns that hold widget data -->
          <ActivationDependency FeatureId="3C637DAA-0239-40a1-A677-F0422E10741A"/>
       </ActivationDependencies>
    </Feature>
    

    이제 위의 파일에서 각 라인들이 어떤 의미가 있는지에 대하여 알게 되었습니다. 단 주의할 것은 widget 사이트 열 Feature 의 활성화 종속성을 확인해야 한다는 것입니다. 즉, widgets 콘텐츠 형식이 설치되려면 widget 사이트 열이 존재해야 한다는 뜻입니다.

  4. 이제 두개의 Feature 가 완성되었습니다. ctypesWidget 및 fieldsWidget 폴더를 아래 경로의 Features 폴더에 복사합니다.

    C: \Program Files\Common Files\Microsoft Shared\web 서버 extensions\12\TEMPLATE\FEATURES

다음으로 Feature 를 설치하고 활성화 해야 합니다. 그럼 콘텐츠 형식 부터 시작하도록 하겠습니다. 설치 및 사용자 정의 기능 활성화

  1. 시작 클릭하고 다음 cmd 를 입력하여 실행 명령 프롬프트를 엽니다.

  2. 이어서 다음 명령을 실행하십시오.

    cd " C: \Program Files\Common Files\Microsoft Shared\web server extensions\12\BIN "

    stsadm –o installfeature –filename ctypesWidget\feature.xml

    참고

    위의 명령에서 feature.xml 파일의 위치는 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\FEATURES  를 기준으로 상대 경로를 입력해야 합니다.

  3. fieldsWidget 폴더에서 feature.xml 파일의 installfeature 명령을 다시 한번 실행합니다.

    Feature 설치가 완료되면 이를 사용하기 위해서는 활성화를 실행해야 합니다.(만약 Feature 의 Scpe 이 Farm 이라면 자동으로 활성화 됩니다.)

    참고  fieldsWidget Feature 를 우선으로 활성화 하고 그 이후에 ctypesWidget Feature 를 활성화 하시기 바랍니다. 또한 아래 명령에서  "https://localhost" 부분은 여러분의 서버 주소를 입력하시기 바랍니다.

  4. Feature 의 활성화를 위해 명령 프롬프트에서 다음을 실행합니다.

    stsadm –o activatefeature –name fieldsWidget-url " http: \\localhost "

  5. ctypesWidget 폴더에서도 위 명령을 반복하십시오.

이제 기능 테스트할 차례입니다.

Feature 테스트

  1. 인터넷 브라우저에서 SharePoint 웹 사이트를 엽니다.

  2. 새 목록을 만들거나 기존 목록 으로 이동합니다.

  3. 목록 표시 화면 설정 을 클릭하고 목록 설정을 클릭합니다.

  4. 섹션에서 기존 사이트 열에서 추가 를 클릭하십시오.

  5. 사이트 열 선택 드롭다운 리스트를 클릭하여 Widget Data 선택합니다.

  6. 그림1과 같이 사용 가능한 사이트 열 상자에서 세개의 열을 선택한 다음 추가 버튼을 클릭합니다.

    **  그림1. 목록에 사용자 정의 열 추가**

    Adding the custom columns to the list

  7. 확인을 클릭하고 목록에서 돌아갑니다. 화면의  오른쪽에 추가된 세열이 표시됩니다 (그림 2 참조).

    **  그림 2. 새로운 열이 표시된 목록**

    Displaying the new columns

마지막으로 Feature 를 삭제하고 싶다면 다음을 실행하시기 바랍니다. (만약 Feature 의 Scope 이 Web 혹은 Site 라면 Feature 를  삭제하기 전에 받드시 비활성화 시켜야 합니다. 하지만 Feature 의 Scope 이 Web Application 혹은 Farm 이라면 아래 절차는 필요하지 않습니다.)

Feature 비활성화 및 삭제

  1. Feature 를 비활성화 하려면 명령 프롬프트에서 아래 명령을 실행합니다.

    stsadm –o deactivatefeature –filename "ctypesWidget\feature.xml" -url "http: \\localhost"

  2. Feature 를 삭제하려면 아래 명령을 실행합니다. 삭제된 Feature 는서버 팜 내에서 사용할 수 없게 됩니다.

    stsadm -o uninstallfeature -filename "ctypesWidget

  3. 위의 절자를 fieldWidget Feature 에도 실행합니다.

  4. Feature 삭제가 완료되면 인터넷 정보 서비스(IIS) 를 reset 합니다. 명령 프롬프트상에서 reset 명령어는 iisreset 입니다.  

결론

Feature 는 재사용성의 레벨에서 패키지 형태로 배포되는 단위기능 입니다. Feature 를 서버 팜에 설치하면 필요에 의해서 활성화 시킬 수 있습니다. 또한 한번의 작업으로 모든 Web front-end 서버에 배포 및 업데이트 할 수 있다는 것은 큰 이득입니다. 또한 SharePoint 의 기술을 모르는 사람이라도 손쉽게 Feature 를 나타내거나 이전 상태로 되돌릴 수 있습니다.

추가 정보

SharePoint 의 Feature 에 대한 더 많은 정보를 원하신다면 아래 링크를 참고하시기 바랍니다.

번역

이 글은 송재두 MVP (Most Valuable Professional, 최고 전문가) 님이 Creating a Custom Feature in Office SharePoint Server 2007 을 번역할 글입니다.