소개

SharePoint 개발을 위한 Visual Studio 2010 도구

Steve Fox

SharePoint 개발은 플랫폼 개발이 번거롭고 자신들의 영역이 아니라고 여기는 다수의 개발자에게는 다소 생소한 부분입니다. 또한 개발자 커뮤니티는 사용할 도구 집합에 따라 구분됩니다. 예를 들어, 일부 개발자들은 SharePoint 기능 및 솔루션을 생성하기 위해 클래스 라이브러리, XML 구성 파일이 있는 수동 프로젝트 폴더 및 빌드 후 출력 이벤트를 함께 사용하며, 다른 개발자들은 여러 가지 응용 프로그램 및 솔루션을 구축하고 이를 SharePoint에 배포하기 위해 커뮤니티 도구인 STSDEV 또는 Windows SharePoint Services용 Visual Studio 확장 기능(VSeWSS)을 사용합니다. 즉, 개발자는 수많은 경로를 통해 기능 및 솔루션 패키지를 SharePoint에 배포할 수 있습니다. SharePoint 개발자 커뮤니티는 온갖 어려움에도 불구하고 약 60만 명으로 이루어진 상당한 규모로 성장했으며 현재에도 지속적으로 그 수가 늘어나고 있습니다. 앞으로 개발자는 Visual Studio 2010에서 제공하는 강력한 기능을 통해 새로운 내장 SharePoint 도구를 사용하여 SharePoint를 개발할 수 있게 됩니다.

SharePoint 2010은 플랫폼이 지원하는 다양한 기능 집합을 갖췄을 뿐만 아니라 상당한 규모의 투자를 통해 개발 프로세스를 보다 생산적으로 구축하고 모든 기술 수준의 개발자가 더욱 효율적으로 사용할 수 있도록 도구 모음을 설계한 제품으로 개발 플랫폼 분야를 크게 발전시킨 것입니다. SharePoint 2010에서 제공하는 두 가지 핵심 개발자 도구로는 SharePoint Designer 2010과 Visual Studio 2010이 있습니다. 또한 이 제품에는 디자이너를 위한 도구 집합인 Expression 제품군이 내장되어 있습니다. 본 기사에서는 새로운 프로젝트 템플릿의 간략한 요약을 포함하여 Visual Studio 2010의 SharePoint 도구에 대해 소개하고 샘플 시각적 웹 파트를 만들어 배포하는 방법을 설명하면서 SharePoint 2010 개발에 대해 살펴보도록 하겠습니다.

Visual Studio 2010의 SharePoint 도구

특별히 소개해 드릴 만한 것으로 SharePoint 개발자를 위한 Visual Studio 2010의 여러 영역이 있습니다. 첫 번째, SharePoint 프로젝트 템플릿은 구입 즉시 솔루션 개발에 바로 사용할 수 있습니다. 두 번째, 도구가 WSP(Windows SharePoint Package) 패키징 표준을 기반으로 표준화되어 있으므로 SharePoint에 솔루션을 가져오거나 배포할 때 Visual Studio에서 이를 솔루션 패키지로 처리합니다. 세 번째, Visual Studio 2010에는 SharePoint 도구와 함께 솔루션 제거 및 사용자 지정 배포 구성과 같은 일부 강력한 배포 및 패키징 기능이 제공됩니다. 마지막으로 새로운 SharePoint 탐색기를 통해 SharePoint 서버에 있는 목록 및 워크플로와 같은 기본 사용자 지정 아티팩트를 확인할 수 있습니다. 물론 이러한 기능은 커뮤니티에 액세스하고 SharePoint 개발자가 작업을 보다 쉽게 시작하고 실행할 수 있도록 설계된 Visual Studio 도구 집합의 주요 확장 기능 중 극히 일부입니다.

또한 Visual Studio 2010과 관련하여 사용할 수 있는 몇 가지 SharePoint 2010 개선 사항도 빼놓을 수 없는 기능입니다. 예를 들어, 새로운 클라이언트 개체 모델을 사용하면 웹 서비스 호출이 아닌 참조된 DLL를 통해 SharePoint 개체에 액세스할 수 있습니다. SharePoint 2007의 경우에는 ASP.NET 웹 서비스 등을 사용하여 SharePoint 목록 데이터에 액세스합니다. 또한 SharePoint용 LINQ를 통해 LINQ의 기능을 SharePoint에서 사용할 수 있기 때문에 목록을 강력한 형식의 개체 등으로 처리할 수 있습니다. 게다가 Silverlight가 주로 클라이언트 개체 모델과 함께 SharePoint 2010에서 기본적으로 지원되기 때문에 개발을 시작하기 위해 더 이상 web.config를 사용하지 않아도 됩니다. 샌드박싱된 솔루션 또한 SharePoint 웹 파트를 구축하고 관리자 작업 없이 사이트에 이를 배포할 수 있는 방법을 제공하므로 웹 파트를 SharePoint 사이트에 배포한 다음 이 웹 파트를 SharePoint의 온-프레미스 인스턴스 또는 SharePoint의 호스팅되는 버전을 사용하는 클라우드의 사이트 컨텍스트에서 실행할 수 있습니다. 마지막으로 외부 데이터 목록이 기간 업무 시스템 및 읽기/쓰기 프로세스와 상호 작용합니다. 이는 얼핏 사소한 것처럼 보이지만 기간 업무 통합을 신속하고 효율적으로 할 수 있도록 지원하는 도구인 것을 고려하면 매우 향상된 기능입니다. Visual Studio 2010에서는 전문 개발자가 이러한 SharePoint 2010의 각 혁신 기능에 사용할 수 있도록 프로젝트 템플릿 또는 API를 통해 몇 가지 지원 방법을 제공합니다. SharePoint 개발을 염두에 두고 있다면 지금이 적기입니다.

시각적 웹 파트 프로젝트 개발

개발자가 SharePoint에서 구축하고 배포하는 가장 일반적인 아티팩트 중 하나가 웹 파트입니다. 왜냐하면 웹 파트는 SharePoint의 핵심 구성 요소 중 하나이기 때문입니다. SharePoint는 ASP.NET을 기반으로 구축되므로 웹 파트가 ASP.NET 웹 파트 아키텍처의 핵심 기능을 상속합니다.

시각적 웹 파트 프로젝트 템플릿은 Visual Studio 2010의 새로운 프로젝트 템플릿 중 하나이며, 이 템플릿을 통해 개발자는 SharePoint에 배포할 수 있는 웹 파트를 시각적으로 디자인할 수 있습니다. SharePoint를 처음 사용하는 경우 이는 SharePoint 2010에 대한 사용자 지정 응용 프로그램을 구축할 수 있는 좋은 방법입니다. 앞으로 설명할 시각적 웹 파트에는 제품 비용을 계산하고 정보를 간단한 웹 파트 UI로 나열하는 일부 독립 코드가 포함되어 있습니다.


그림 1 새로운 SharePoint 프로젝트 템플릿


그림 2 시각적 웹 파트용 디자이너 뷰

Visual Studio 2010 Beta 2 및 SharePoint 2010 Beta 2가 64비트 Windows Server 2008에 설치되어 있는지 확인합니다. Visual Studio 2010을 열고 파일, 새 프로젝트를 클릭한 다음 설치된 템플릿 섹션에서 SharePoint 노드로 이동합니다. 그림 1은 사용 가능한 여러 종류의 프로젝트 템플릿을 보여 줍니다. 예를 들어, VSeWSS 프로젝트 가져오기 템플릿은 현재 VSeWSS 프로젝트의 업그레이드 경로를 제공하며 이 워크플로 템플릿을 통해 워크플로 프로젝트를 만들어 SharePoint에 배포할 수 있습니다. 사이트 정의 템플릿은 작성하고 배포할 수 있는 사이트 수준 인프라를 제공하며, SharePoint 솔루션 패키지 가져오기는 로컬 서버 인스턴스로 재배포하기 위해 WSP를 가져올 수 있는 템플릿입니다. 이러한 템플릿을 사용해 보기 위해 시각적 웹 파트 프로젝트 템플릿을 선택하고 프로젝트 이름(예: SampleWebPartProject) 및 위치를 입력한 다음 확인을 클릭합니다.

프로젝트를 만들면 Visual Studio 2010에서 여러 개의 기본 파일을 만듭니다. 솔루션 탐색기에서 프로젝트 노드를 확장하여 파일을 확인합니다. 본 기사에서 설명하는 작업에 사용할 주요 파일은 SampleWebPartProject 노드에 있습니다. 기본 시각적 웹 파트는 VisualWebPart1이라고 합니다. 이 이름을 변경하려면 솔루션 탐색기에서 VisualWebPart1 노드를 마우스 오른쪽 단추로 클릭하고 이름 바꾸기를 선택한 다음 웹 파트의 새 이름을 입력합니다.

솔루션 탐색기에는 기능 및 패키지 노드도 있습니다. 이 노드는 SharePoint 기능을 사용하는 SharePoint 솔루션을 패키징하는 Visual Studio 2010의 새로운 인프라 부분입니다. 기능은 SharePoint를 처음 접하는 개발자를 위해 SharePoint가 인식하는 방식으로 응용 프로그램을 구성합니다. 기능은 사이트 또는 웹 수준 등에서 SharePoint에 배포될 수 있습니다. 한 기능은 XML 구성 파일 집합을 통해 구조화되고 응용 프로그램의 신뢰 수준에 따라 GAC(전역 어셈블리 캐시)의 어셈블리를 참조합니다. 특히, 각 기능에는 SharePoint 폴더 계층 구조로 된 자체 폴더가 있으며 해당 폴더 내에는 구성 파일이 있어 기능에 필요한 메타데이터를 제공합니다. 패키지에는 기능 및 기타 자산이 포함되어 있으며, SharePoint에 솔루션을 배포할 때 이 패키지를 사용합니다. 또한 패키지는 어셈블리 배포 위치가 지정되는 곳에 있습니다. Visual Studio 2010은 패키지를 보다 쉽게 보고 관리하는 패키지 디자이너를 도입했습니다. 해당 패키지 노드를 두 번 클릭하면 디자이너가 열립니다. 디자이너를 통해 배포 가능한 패키지에 기능을 추가하고 제거할 수 있습니다. 이 디자이너는 개발자가 기능을 추가하여 SharePoint 솔루션을 구성할 수 있도록 하는 혁신적인 기능입니다.

솔루션 탐색기 보기로 전환하여 ProductInfoUserControl.ascx 파일을 마우스 오른쪽 단추로 클릭한 다음 디자이너의 뷰를 선택합니다. 그러면 컨트롤을 도구 상자에서 웹 파트 디자이너 화면으로 끌어서 놓을 수 있는 뷰가 열립니다. 뷰에는 3가지 즉, 디자인, 분할 및 코드가 있습니다. 이 예에서는 제품 비용을 계산하기 위해 제목 및 텍스트 상자와 단추 등 몇 가지 컨트롤을 입력하여 추가했으며, 페이지에 추가된 컨트롤에 대한 레이블도 입력했습니다(그림 2 참조).

시각적 웹 파트 레이아웃을 완성한 후에는 단추에 대한 이벤트 처리기를 추가할 수 있습니다. 이를 수행하기 전에 시각적 웹 파트에 대한 소스 코드를 잠시 살펴보도록 하겠습니다. 그림 3의 코드에서 볼 수 있듯이 Visual Studio는 일부 자동 스타일 지정을 CSS 구문 형태로 UI에 추가합니다. UI를 구성하는 실제 컨트롤을 확인할 수 있으며, 드롭다운 목록의 경우에는 항목 컬렉션을 확인할 수도 있습니다. 간결하게 보이도록 자동 생성되어 소스 맨 위에 포함된 지시문은 삭제했습니다.

이벤트 처리기를 웹 파트에 추가하려면 해당 단추를 두 번 클릭합니다. 그러면 코드 숨김으로 이동됩니다. 또한 onClick 이벤트를 ASCX 컨트롤 디자인에 추가합니다. 예를 들어, 그림 3에서는 onclick="btnCalcPrice_Click" 이벤트가 btnCalcPrice에 포함됩니다. 그림 4에 나열된 코드 숨김에는 목록 상자에서 선택한 제품 비용을 계산할 수 있는 일부 간단한 코드가 포함되어 있습니다. 코드의 핵심 부분은 클래스 수준의 변수(double)로서, 제품 비용, 목록 상자에 추가된 다양한 제품 개체를 포함하는 제품 목록 컬렉션 및 btnCalcPrice_Click 이벤트를 계산할 때 사용하는 일반적인 방법을 나타냅니다. SharePoint에서 페이지가 로드되면 코드가 generateProductList 메서드를 호출하여 목록 상자를 채웁니다. 그런 다음 btnCalcPrice_Click 이벤트가 사용자 선택에 따른 특정 제품 비용을 계산하여 UI의 목록 상자에 해당 정보를 표시합니다.

그림 3 SalaryCalcWebPartUserControl.ascx용 소스 코드

<style type="text/css">
.style1
{
font-family: Calibri;
font-size: medium;
font-weight: bold;
}
.style2
{
font-family: Calibri;
font-size: small;
font-weight: bold;
}
</style>
<p class="style1">
Product Catalog</p>
<p class="style2">
Product:  
<asp:DropDownList ID="dropdwnProducts" 
runat="server" Height="20px"
style="margin-left: 21px" Width="200px">
<asp:ListItem>Helmet</asp:ListItem>
<asp:ListItem>Stick</asp:ListItem>
<asp:ListItem>Skates</asp:ListItem>
<asp:ListItem>Elbow Pads</asp:ListItem>
<asp:ListItem>Kneepads</asp:ListItem>
</asp:DropDownList>
</p>
<p class="style2">
Description: <asp:TextBox ID="txtbxDescription" runat="server"
Width=”200px” Enabled=”False”></asp:TextBox>
</p>
<p class="style2">
SKU:
<asp:TextBox ID="txtbxSKU" runat="server" style="margin-left: 48px"
Width="200px" Enabled="False"></asp:TextBox>
</p>
<p class="style2">
Price:<asp:TextBox ID="txtbxPrice" runat="server"
style="margin-left: 48px"
Width="200px" Enabled="False"></asp:TextBox>
</p>
<p class="style2">
Quantity:
<asp:TextBox ID="txtbxQuantity" runat="server" 
Width="200px" Enabled="False"></asp:TextBox>
</p>
<p class="style1">
<asp:Button ID="btnCalcPrice" runat="server"
onclick="btnCalcPrice_Click"
Text="Calc." />
</p>

사용자가 단추를 클릭하면 웹 파트에서 제품 비용 계산과 같은 이벤트를 수행하기 위한 포스트백을 수행합니다. 기본적으로 매우 간단한 그림 4의 코드보다 더욱 흥미로운 것은 웹 파트가 실제 웹 파트에서 이 코드를 표시하는 방식일 것입니다. 지금까지 수행한 작업은 스킨과 코드 숨김을 포함하는 웹 파트에 대한 ASP 사용자 컨트롤을 생성하는 것이며, 프로젝트 구조에는 여전히 이 컨트롤을 표시해야 하는 실제 웹 파트가 있습니다. 이를 수행하기 위해 Visual Studio는 SharePoint 2010 폴더 계층 구조에 있는 ASCX 사용자 컨트롤 경로를 나타내는 _ascxPath라는 스트링을 만듭니다. CreateChildControls 메서드에서는 컨트롤 인스턴스가 만들어져 LoadControl 메서드를 통해 사용자 컨트롤의 경로로 설정됩니다. 그런 다음 Add 메서드를 사용하여 Controls 컬렉션에 추가됩니다. 이를 통해 웹 파트가 SharePoint의 웹 파트 내에 ASP 사용자 컨트롤을 표시할 수 있습니다. 그림 5는 코드를 보여 줍니다.

그림 4 ProductInfoUserControl.ascx.cs용 소스 코드

using System;
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Collections.Generic;
using System.Data;
namespace SampleWebPartProject.ProductInfo
{
public partial class ProductInfoUserControl : UserControl
{
double tax = .11;
double totalCost = 0.0;
List<Products> lstOfProducts = new List<Products>();
protected void Page_Load(object sender, EventArgs e)
{
generateProductList();
}
private void generateProductList()
{
lstOfProducts.Add(new Products()
{ strName = "Helmet", strDescr = "Hockey helmet.", strSKU =
"KLSONHELMT1224", dblPrice = 59.00, intQuantity = 28 });
lstOfProducts.Add(new Products()
{ strName = "Skates", strDescr = "Hockey skates.", strSKU =
"SKATWOKSH0965", dblPrice = 438.00, intQuantity = 88 });
lstOfProducts.Add(new Products()
{ strName = "Stick", strDescr = "Composite hockey stick.",
strSKU = "STIK82910JJKS", dblPrice = 189.99, intQuantity =
35 });
lstOfProducts.Add(new Products()
{ strName = "Elbow Pads", strDescr = "Hockey elbow pads.",
strSKU = "ELBOP563215NN", dblPrice = 34.00, intQuantity =
12 });
lstOfProducts.Add(new Products()
{ strName = "Knee Pads", strDescr = "Hockey knee pads.",
strSKU = "KPDS7827NNJS1", dblPrice = 47.99, intQuantity =
44 });
}
protected void btnCalcPrice_Click(object sender, EventArgs e)
{
double dblCost = 0;
string strPrice = "";
if (dropdwnProducts.SelectedValue == "Helmet")
{
dblCost = lstOfProducts[0].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[0].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[0].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[0].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Skates")
{
dblCost = lstOfProducts[1].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[1].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[1].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[1].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Stick")
{
dblCost = lstOfProducts[2].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[2].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[2].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[2].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Elbow Pads")
{
dblCost = lstOfProducts[3].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[3].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[3].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[3].intQuantity.
ToString();
}
else if (dropdwnProducts.SelectedValue == "Knee Pads")
{
dblCost = lstOfProducts[4].dblPrice;
totalCost = dblCost + (dblCost * tax);
System.Math.Round(totalCost, 2);
strPrice = "$" + totalCost.ToString();
txtbxDescription.Text = lstOfProducts[4].strDescr.
ToString();
txtbxSKU.Text = lstOfProducts[4].strSKU.ToString();
txtbxPrice.Text = strPrice;
txtbxQuantity.Text = lstOfProducts[4].intQuantity.
ToString();
}
}
}
}

그림 5 ProductInfo.cs용 소스 코드

using System;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
namespace SampleWebPartProject.ProductInfo
{
public class ProductInfo : WebPart
{
private const string _ascxPath =
@"~/CONTROLTEMPLATES/SampleWebPartProject/ProductInfo/" +
@"ProductInfoUserControl.ascx";
public ProductInfo()
{
}
protected override void CreateChildControls()
{
Control control = this.Page.LoadControl(_ascxPath);
Controls.Add(control);
base.CreateChildControls();
}
protected override void Render(HtmlTextWriter writer)
{
base.RenderContents(writer);
}
}
}

그림 6 ProductInfo.webpart XML 파일

<?xml version="1.0" encoding="utf-8"?>
<webParts>
<webPart xmlns="https://schemas.microsoft.com/WebPart/v3">
<metaData>
<type name="SampleWebPartProject.ProductInfo.ProductInfo,
SampleWebPartProject, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=db3a9f914308c42a" />
<importErrorMessage>
$Resources:core,ImportErrorMessage;
</importErrorMessage>
</metaData>
<data>
<properties>
<property name="Title" type="string">
Product Info Web Part</property>
<property name="Description" type="string">Provides some
information about hockey products.</property>
</properties>
</data>
</webPart>
</webParts>

이제 시각적 웹 파트를 구축했으므로 이를 SharePoint 서버에 배포할 수 있습니다. 프로젝트를 생성 시 프로젝트가 특정 서버 인스턴스와 연결되도록 구성했습니다. 이는 일부 프로그래밍 방식의 결합 작업이 있어 방금 SharePoint 서버를 통해 작성한 코드를 통합한다는 것을 의미합니다. 솔루션 탐색기에서 해당 파일을 검토하면 이 통합에서 지원하는 다양한 XML 파일을 확인할 수 있습니다. 예를 들어, Feature.xml 파일(다음 코드 참조)은 기능을 정의합니다. 또한 이 XML에서는 해당 파일이 웹 파트에 대한 특정 정보를 제공하는 기타 몇몇 XML 파일을 참조하는 것도 확인할 수 있습니다. 여기에서는 Elements.xml 및 ProductInfo.webpart가 참조된 것을 확인할 수 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<Feature xmlns="https://schemas.microsoft.com/sharepoint/" 
Id="416172c1-cfa7-4d7a-93ba-fe093b037fab" 
ImageUrl="" Scope="Site" Title="SampleWebPartProject Feature1">
  <ElementManifests>
    <ElementManifest Location="ProductInfo\Elements.xml" />
    <ElementFile Location="ProductInfo\ProductInfo.webpart" />
  </ElementManifests>

Elements.xml은 기능에 포함된 핵심 어셈블리에 대한 정보를 제공하고 ProductInfo.webpart는 웹 파트의 제목 및 설명 등과 같은 메타데이터를 정의합니다. 예를 들어, 그림 6은 기본 제목 및 설명 속성을 보여 줍니다. 이러한 속성을 업데이트하여 웹 파트 갤러리에 표시된 웹 파트 메타데이터가 직관적이고 의미 있다는 것을 확인할 수 있습니다. 이 웹 파트의 경우 제목을 제품 정보 웹 파트로 변경하고 설명을 "계산된 제품 비용 및 정보를 제공하는 웹 파트"와 같이 변경할 수 있습니다.


그림 7 웹 파트 페이지의 웹 파트

다른 XML 구성 파일이 있으며 SharePoint 개발이 처음인 경우 제품 목적을 보다 잘 이해할 수 있도록 프로젝트에 있는 각 파일을 검토해 보는 것이 좋습니다. 이제 웹 파트를 SharePoint 서버로 배포하는 방법을 살펴보겠습니다.

시각적 웹 파트 프로젝트 배포

SharePoint 2010 이전에는 주로 명령줄 기반 관리 도구인 Stsadm이 응용 프로그램을 SharePoint에 배포하는 데 사용되었습니다. 이 도구는 Visual Studio 2010이 출시되면서 사용하지 않게 되었습니다(이 도구를 사용하지 않게 일조한 제품으로 Window PowerShell도 있으나 이 내용은 해당 기사에서 다룹니다.) 프로젝트가 이미 SharePoint 서버와 관련되어 있고 해당 연결에는 신뢰 수준이 정의되어 있기 때문에 해당 프로젝트를 마우스 오른쪽 단추로 클릭하고 빌드를 선택하여 솔루션이 구축되는 것을 확인한 다음 마우스 오른쪽 단추를 클릭하여 배포를 선택하기만 하면 됩니다. 물론 SharePoint 솔루션을 디버깅할 때 F5 키를 사용해도 됩니다. 이렇게 하면 디버그 환경에서 적절한 프로세스 연결 및 IIS 재설정과 같은 단계도 수행됩니다.

웹 파트가 배포되면 SharePoint 사이트를 열고 새로운 웹 파트 페이지를 만들어야 합니다. 응용 프로그램을 디버그하기 위해 F5를 클릭하면 기본적으로 웹 파트 만들기 페이지가 호출됩니다. 그렇지 않은 경우에는 모든 사이트 콘텐츠 보기를 클릭한 다음 만들기를 클릭합니다. 웹 파트 페이지 옵션을 클릭한 다음 특정 웹 파트 페이지에 요청된 정보를 입력합니다. 예를 들어, 페이지 이름 및 레이아웃 템플릿을 입력합니다. 이 정보를 입력한 후 만들기를 클릭하면 SharePoint에서 웹 파트 페이지를 만듭니다.

이제 만들고 서버에 배포한 시각적 웹 파트를 추가해야 합니다. 이를 수행하려면 웹 파트 페이지로 이동해 사이트 작업을 클릭한 다음 페이지 편집을 클릭합니다. 시각적 웹 파트를 배치할 웹 파트 영역을 클릭하고 삽입 탭을 클릭한 다음 삽입 탭에서 웹 파트를 클릭합니다.

그러면 SharePoint에서 특정 웹 파트를 선택하여 페이지에서 선택한 웹 파트 영역에 추가할 수 있는 다양한 웹 파트 범주를 찾을 수 있도록 표시합니다. 사용자 지정 범주로 이동하여 웹 파트 창에서 만들고 배포한 시각적 웹 파트를 확인할 수 있습니다. 이 기사에 있는 코드와 함께 진행한 경우 ProductInfo 웹 파트를 클릭한 다음 추가 단추를 클릭합니다.

그림 7에서 볼 수 있듯이 이제 웹 파트가 웹 파트 페이지에 있는 웹 파트 영역에 추가되었습니다. 여기에서는 도구 창을 통해 웹 파트 옵션을 구성하거나, 기본 옵션을 사용하여 편집 중지를 클릭할 수도 있습니다.

SharePoint 개발 참여

Visual Studio 2010은 SharePoint 개발자에게 기본 도구 모음뿐만 아니라 SharePoint 개발에 참여할 수 있는 좋은 기회도 제공합니다. 이러한 도구를 확인해보시기 바랍니다. 코드를 제어하려는 개발자 및 SharePoint에서 강력한 솔루션을 구축 및 배포하기 위한 디자인 환경이 필요한 개발자가 사용할 수 있는 혁신적인 옵션이 있습니다.

Steve Fox는 Microsoft 개발자 및 플랫폼 전도 팀에서 수석 기술 전도사로 일하고 있으며, 대부분의 시간을 고객과 함께 Office 및 SharePoint를 개발하는 데 보내고 있습니다. Fox는 다양한 책과 기사를 발간했고 정기적으로 전 세계 개발자 컨퍼런스에서 강연을 하고 있습니다.