요약: Microsoft Office SharePoint Server 2007 에서는 서버 팜 전체에서
단위 기능을 패키징하여 쉽게 배포할 수 있도록 지원합니다.
여기에서는 사용자 정의 Feature 생성과 배포에
대하여 설명합니다.
frank Rice, Microsoft Corporation
2월 2008년
적용대상: Microsoft Office SharePoint Server 2007, Microsoft Visual Studio 2005
내용
개요
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="http://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 의 값은 그 외에도
WebApplication 및 Farm 값도 존재할 수 있습니다.
-
Hidden:
TRUE 또는 FALSE 값을 가질 수 있음.
Feature 는
이 설정을 통하여 사이트 기능 페이지에 기능 목록에서 보여지거나 숨겨지게 됩니다. 이 값을 TRUE로 설정한
상태에서 Feature 를 활성화 하려면 명령 프롬프트에서 STSADM.EXE 유틸리티를
사용하거나 다른 Feature 의 종속성을 통해 활성화 해야 합니다.
-
DefaultResourceFile: 설정 및 자주 변경될 수 있는 항목들의 중앙 위치를
지정합니다.
-
ImageUrl: 사이트 기능 페이지에서 Feature 옆에 표시될 이미지의 경로를 설정합니다.
-
<ElementManifests> :
<ElementManifest> 엘리먼트 들을 담고 있는 엘리먼트
-
<ElementManifest>:
Feature 을 구현하고 있는 메니페스트 파일의 위치. 이 메니페스트 파일에는
<Elements> 엘리먼트가 들어 있습니다. 메니페스트 파일의 경로는 상대경로를 사용해야만
합니다.
다음 elements.xml 파일은 특정 Feature 를 구현하고 있는 샘플입니다. 이 메니페스트 파일은
Feature 가 갖게 될 여러 가지 기능이나 액션에 대해서 정의하게 됩니다. 예를 들어 리스트에
적용되는 ItemUpdated 이벤트 처리기는 특정 리스트 형식에서 아이템이 변경되었을 경우의 동작을 어셈블리로
만들어 놓을 수 있습니다. 아래의 메니페스트 파일은 목록의 열에서 사용될 필드를 정의하고 있습니다.
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<Field ID="{0B9E3314-3F9F-2aa8-4BCD-7CB89A6FB32D}"
Name="ProductName"
SourceID=http://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 설치 및 활성화
-
Windows SharePoint Services FEATURES 디렉터리로 두 파일이 포함된 폴더를
복사합니다.
-
STSADM.EXE 유틸리티를 실행하여 Feature를 설치합니다.
-
STSADM.EXE 유틸리티를 실행하여
Windows SharePoint Services 사이트에 활성화 합니다.
사용자 정의 Feature 만들기
다음 절차에서는 위젯에 대한 정보를 저장하는 목록 콘텐츠 형식(List Content Type)을 만듭니다. 이 예제는
매우 간단한 세계의 텍스트 필드를 포함합니다.
생성한 콘텐츠 형식은 수동으로 추가하지 않고도 서버 팜의 모든 사이트에서 사용가능하게 할 수 있으며, 이는 관리자에게만
허락되어 있습니다.
목록 열 정의(List Column Definition File) 파일 만들기
-
CustomWidgetColumns 라는 이름의 작업 폴더를 생성합니다.
-
두 번째로 열 정의 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="http://schemas.microsoft.com/sharepoint/">
<Field ID="{DA7A42EE-CDD5-4ec4-A641-2D773B320DA5}"
Name="Name"
SourceID="http://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="http://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="http://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 파일을 참고 하시기
바랍니다.
-
마지막으로 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="http://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="http://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 값을 입력합니다.
<FieldRef> 엘리먼트는 사이트 열 정의를 참조합니다. 즉, 여기서는 fieldWidget.xml 파일을
참조하게 됩니다. ID , Name 속성은 반드시 참조하고 있는 사이트 열 값과 일치해야 합니다.
사이트 콘텐츠 형식을 만드는 더 좋은 방법을 알고 싶다면, 아래 위치의 파일을 참고 하시기 바랍니다.
\TEMPLATE\FEATURES\ctypes\ctypeswss.xml
콘텐츠 형식에 대한
일반 xml 스키마에 대한 설명은
Content Type Definition Schema
를 참고하시기 바랍니다.
콘텐츠 형식에 대해 XML
만들었으므로, 이제 Feature 파일을 생성 해야 합니다.
콘텐트 형식 메니페스트와 Feature 파일 만들기
-
작업 폴더에 ctypesWidget 이름의 폴더를 만듭니다.
-
ctypesWidget 폴더에 ctypesWidget.xml 라는 이름으로 XML 파일을
생성하고, 위에서 만든 콘텐트 형식을 붙여 넣기 합니다..
-
사이트 열 정의에서 연습했던 것처럼 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="http://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 사이트 열이 존재해야 한다는 뜻입니다.
-
이제 두개의 Feature 가 완성되었습니다. ctypesWidget 및 fieldsWidget 폴더를 아래
경로의 Features 폴더에 복사합니다.
C:
\Program Files\Common Files\Microsoft Shared\web 서버
extensions\12\TEMPLATE\FEATURES
다음으로 Feature 를 설치하고 활성화 해야 합니다. 그럼 콘텐츠 형식 부터 시작하도록 하겠습니다.
설치 및 사용자 정의 기능 활성화
-
시작 클릭하고 다음 cmd 를 입력하여 실행 명령 프롬프트를 엽니다.
-
이어서 다음 명령을 실행하십시오.
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
를 기준으로 상대 경로를 입력해야 합니다.
|
-
fieldsWidget 폴더에서 feature.xml 파일의 installfeature 명령을
다시 한번 실행합니다.
Feature 설치가 완료되면 이를 사용하기 위해서는 활성화를 실행해야 합니다.(만약
Feature 의 Scpe 이 Farm 이라면 자동으로 활성화 됩니다.)
참고 fieldsWidget Feature 를 우선으로 활성화 하고 그
이후에 ctypesWidget Feature
를 활성화 하시기 바랍니다. 또한 아래 명령에서
"http://localhost"
부분은 여러분의 서버 주소를 입력하시기 바랍니다.
-
Feature 의 활성화를 위해 명령 프롬프트에서 다음을 실행합니다.
stsadm –o activatefeature –name fieldsWidget-url " http:
\\localhost "
-
ctypesWidget 폴더에서도 위 명령을 반복하십시오.
이제 기능 테스트할 차례입니다.
Feature 테스트
-
인터넷 브라우저에서 SharePoint 웹 사이트를 엽니다.
-
새 목록을 만들거나 기존 목록 으로 이동합니다.
-
목록 표시 화면 설정 을 클릭하고 목록 설정을 클릭합니다.
-
열 섹션에서 기존 사이트 열에서 추가 를 클릭하십시오.
-
사이트 열 선택 드롭다운 리스트를 클릭하여 Widget Data 선택합니다.
-
그림1과 같이 사용 가능한 사이트 열 상자에서 세개의 열을 선택한 다음 추가 버튼을 클릭합니다.
그림1.
목록에
사용자 정의 열 추가
-
확인을 클릭하고 목록에서 돌아갑니다.
화면의 오른쪽에 추가된 세열이 표시됩니다 (그림 2 참조).
그림 2.
새로운 열이 표시된 목록
마지막으로 Feature 를 삭제하고 싶다면 다음을 실행하시기 바랍니다. (만약 Feature 의 Scope 이 Web
혹은 Site 라면 Feature 를 삭제하기 전에 받드시 비활성화 시켜야 합니다. 하지만 Feature 의
Scope 이 Web Application 혹은 Farm 이라면 아래 절차는 필요하지 않습니다.)
Feature 비활성화 및 삭제
-
Feature 를 비활성화 하려면 명령 프롬프트에서 아래 명령을 실행합니다.
stsadm –o deactivatefeature –filename "ctypesWidget\feature.xml"
-url "http:
\\localhost"
-
Feature 를 삭제하려면 아래 명령을 실행합니다. 삭제된 Feature 는서버 팜 내에서 사용할 수 없게
됩니다.
stsadm -o uninstallfeature -filename "ctypesWidget
-
위의 절자를 fieldWidget Feature 에도 실행합니다.
-
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
을 번역할 글입니다.