사용자 지정 개체 빌드, 배포 및 디버깅Building, Deploying, and Debugging Custom Objects

Integration ServicesIntegration Services의 사용자 지정 개체에 대한 코드를 작성한 후에 어셈블리를 빌드하여 배포한 다음, 패키지에서 사용할 수 있도록 SSISSSIS 디자이너에 통합하여 테스트하고 디버그해야 합니다.After you have written the code for a custom object for Integration ServicesIntegration Services, you must build the assembly, deploy it, and integrate it into SSISSSIS Designer to make it available for use in packages, and test and debug it.

Integration Services의 사용자 지정 개체 빌드, 배포 및 디버깅 단계Steps in Building, Deploying, and Debugging a Custom Object for Integration Services

개체의 사용자 지정 기능을 작성한 후에는You have already written the custom functionality for your object. 이를 테스트하고 사용자가 사용할 수 있도록 해야 합니다.Now you have to test it and to make it available to users. 이 단계는 Integration ServicesIntegration Services용으로 만들 수 있는 모든 유형의 사용자 지정 개체에서 매우 비슷합니다.The steps are very similar for all the types of custom objects that you can create for Integration ServicesIntegration Services.

다음은 이를 빌드, 배포 및 테스트하는 단계입니다.Here are the steps to build, deploy, and test it.

  1. 생성할 어셈블리를 강력한 이름으로 서명합니다.Sign the assembly to be generated with a strong name.

  2. 어셈블리를 빌드합니다.Build the assembly.

  3. 어셈블리를 적절한 Integration ServicesIntegration Services 폴더로 이동하거나 복사하여 배포합니다.Deploy the assembly by moving or copying it to the appropriate Integration ServicesIntegration Services folder.

  4. GAC(전역 어셈블리 캐시)에 어셈블리를 설치합니다.Install the assembly in the global assembly cache (GAC).

    이 개체는 도구 상자에 자동으로 추가됩니다.The object is automatically added to the Toolbox.

  5. 필요한 경우 배포 문제를 해결합니다.Troubleshoot the deployment, if necessary.

  6. 코드를 테스트하고 디버그합니다.Test and debug your code.

    이제 SSDT(SQL Server Data Tools)에서 SSIS 디자이너를 사용하여 다른 버전의 SQL ServerSQL Server를 대상으로 하는 패키지를 만들고, 유지 관리하고, 실행할 수 있습니다.You can now use SSIS Designer in SQL Server Data Tools (SSDT) to create, maintain, and run packages that target different versions of SQL ServerSQL Server. 이러한 개선이 사용자 지정 확장에 미치는 영향에 대한 자세한 내용은 SQL Server 2016용 SSDT 2015의 다중 버전 지원을 통해 SSIS 사용자 지정 확장 지원을 참조하세요.For more info about the impact of this improvement on your custom extensions, see Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016

어셈블리 서명Signing the Assembly

공유하려는 어셈블리는 전역 어셈블리 캐시에 설치해야 합니다.When an assembly is meant to be shared, it must be installed in the global assembly cache. 전역 어셈블리 캐시에 추가된 어셈블리는 SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT)와 같은 응용 프로그램에서 사용할 수 있습니다.After the assembly has been added to the global assembly cache, the assembly can be used by applications such as SQL Server Data Tools(SSDT)SQL Server Data Tools (SSDT). 전역 어셈블리 캐시에 어셈블리를 추가하려면 어셈블리를 강력한 이름으로 서명하여 해당 어셈블리가 전역적으로 고유함을 보장해야 합니다.A requirement of the global assembly cache is that the assembly must be signed with a strong name, which guarantees that an assembly is globally unique. 강력한 이름의 어셈블리에는 어셈블리의 이름, culture, 공개 키 및 버전 번호를 포함하는 정규화된 이름이 있습니다.A strong-named assembly has a fully qualified name that includes the name, culture, public key, and version number of the assembly. 런타임에서는 이 정보를 사용하여 어셈블리를 찾고 같은 이름의 다른 어셈블리와 구별합니다.The runtime uses this information to locate the assembly and to differentiate it from other assemblies with the same name.

강력한 이름으로 어셈블리를 서명하려면 먼저 공개/개인 키 쌍이 있어야 하며 이 키 쌍이 없으면 만들어야 합니다.To sign an assembly with a strong name, you must first have or create a public/private key pair. 이 암호화 키 쌍은 빌드할 때 강력한 이름의 어셈블리를 만드는 데 사용합니다.This public and private cryptographic key pair is used at build time to create a strong-named assembly.

강력한 이름과 어셈블리를 서명할 때 따라야 하는 단계에 대한 자세한 내용은 .NET Framework.NET Framework SDK 설명서의 다음 항목을 참조하십시오.For more information about strong names and on the steps that you must followto sign an assembly, see the following topics in the .NET Framework.NET Framework SDK documentation:

  • 강력한 이름의 어셈블리Strong-Named Assemblies

  • 공개/개인 키 쌍 만들기Creating a Key Pair

  • 방법: 강력한 이름으로 어셈블리 서명Signing an Assembly with a Strong Name

    Visual StudioVisual Studio에서는 빌드할 때 어셈블리를 강력한 이름으로 서명하기가 쉽습니다.You can easily sign your assembly with a strong name in Visual StudioVisual Studio at build time. 프로젝트 속성 대화 상자에서 서명 탭을 선택하고, 어셈블리 서명 옵션을 선택한 다음, 키 파일(.snk)의 경로를 제공합니다.In the Project Properties dialog box, select the Signing tab. Select the option to Sign the assembly and then provide the path of the key (.snk) file.

어셈블리 빌드Building the Assembly

프로젝트를 서명한 후에는 SQL Server Data ToolsSQL Server Data Tools빌드 메뉴에서 사용할 수 있는 명령을 사용하여 프로젝트 또는 솔루션을 빌드하거나 다시 빌드해야 합니다.After signing the project, you must build or rebuild the project or the solution by using the commands available on the Build menu of SQL Server Data ToolsSQL Server Data Tools. 솔루션에 사용자 지정 사용자 인터페이스를 위한 별도의 프로젝트가 포함된 경우 이 프로젝트도 강력한 이름으로 서명해야 하며 이 프로젝트를 솔루션과 동시에 빌드할 수 있습니다.Your solution may contain a separate project for a custom user interface, which must also be signed with a strong name, and can be built at the same time.

어셈블리를 배포하고 전역 어셈블리 캐시에 설치하는 다음 두 단계를 수행하는 데 가장 편리한 방법은 Visual StudioVisual Studio에서 이러한 단계를 빌드 후 이벤트로 스크립팅하는 것입니다.The most convenient method for performing the next two steps—deploying the assembly and installing it in the global assembly cache—is to script these steps as a post-build event in Visual StudioVisual Studio. 빌드 이벤트는 [프로젝트 속성]의 컴파일 페이지( Visual BasicVisual Basic 프로젝트의 경우) 또는 빌드 이벤트 페이지(C# 프로젝트의 경우)에서 사용할 수 있습니다.Build events are available from the Compile page of Project Properties for a Visual BasicVisual Basic project, and from the Build Events page for a C# project. gacutil.exe와 같은 명령 프롬프트 유틸리티에는 전체 경로가 필요합니다.The full path is required for command prompt utilities such as gacutil.exe. 공백이 포함된 경로와 공백이 포함된 경로로 확장되는 $(TargetPath) 등의 매크로는 모두 따옴표로 묶어야 합니다.Quotation marks are required both around paths that contain spaces and around macros such as $(TargetPath) that expand to paths that contain spaces.

다음은 사용자 지정 로그 공급자에 대한 빌드 후 이벤트 명령줄의 예입니다.Here is an example of a post-build event command line for a custom log provider:

"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" -u $(TargetName)  
"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.0 Tools\gacutil.exe" -i $(TargetFileName)  
copy $(TargetFileName) "C:\Program Files\Microsoft SQL Server\130\DTS\LogProviders "  

어셈블리 배포Deploying the Assembly

SSISSSIS 디자이너는 SQL ServerSQL Server Integration ServicesIntegration Services가 설치될 때 만들어진 일련의 폴더에 있는 파일을 열거하여 패키지에서 사용할 수 있는 사용자 지정 개체를 찾습니다.The SSISSSIS Designer locates the custom objects available for use in packages by enumerating the files found in a series of folders that are created when SQL ServerSQL Server Integration ServicesIntegration Services is installed. 기본 SQL ServerSQL Server 설치 설정을 사용한 경우 이러한 폴더 집합은 C:\Program Files\Microsoft SQL Server\130\DTS 아래에 있습니다.When the default SQL ServerSQL Server installation settings are used, this set of folders is located under C:\Program Files\Microsoft SQL Server\130\DTS. 그러나 사용자 지정 개체에 대한 설치 프로그램을 만드는 경우 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\SSIS\Setup\DtsPath 레지스트리 키의 값을 검사하여 이 폴더의 위치를 확인해야 합니다.However if you create a setup program for your custom object, you should check the value of the HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\130\SSIS\Setup\DtsPath registry key to verify the location of this folder.

참고

SQL Server Data Tools의 다중 버전 지원과 함께 제대로 작동하도록 사용자 지정 구성 요소를 배포하는 방법에 대한 자세한 내용은 SQL Server 2016용 SSDT 2015의 다중 버전 지원을 통해 SSIS 사용자 지정 확장 지원을 참조하세요.For info about how to deploy custom components to work well with the multi-version support in SQL Server Data Tools, see Getting your SSIS custom extensions to be supported by the multi-version support of SSDT 2015 for SQL Server 2016.

다음과 같은 두 가지 방법으로 폴더에 어셈블리를 추가할 수 있습니다.You can put the assembly in the folder in two ways:

  • 빌드 후 컴파일된 어셈블리를 적절한 폴더로 이동하거나 복사합니다.Move or copy the compiled assembly to the appropriate folder after building it. 편의상 빌드 후 이벤트에 복사 명령을 포함할 수 있습니다.(For convenience, you can include the copy command in a Post-build Event.)

  • 어셈블리를 적절한 폴더에 직접 빌드합니다.Build the assembly directly in the appropriate folder.

    C:\Program Files\Microsoft SQL Server\130\DTS에 있는 다음 배포 폴더는 다양한 유형의 사용자 지정 개체에 사용됩니다.The following deployment folders under C:\Program Files\Microsoft SQL Server\130\DTS are used for the various types of custom objects:

사용자 지정 개체Custom object 배포 폴더Deployment folder
태스크Task 태스크Tasks
ODBC 대상 편집기Connection manager ConnectionsConnections
로그 공급자Log provider LogProvidersLogProviders
데이터 흐름 구성 요소Data flow component PipelineComponentsPipelineComponents

참고

이러한 폴더에 복사된 어셈블리는 사용 가능한 태스크, 연결 관리자 등의 열거형을 지원합니다.Assemblies are copied to these folders to support the enumeration of available tasks, connection managers, and so on. 따라서 사용자 지정 개체의 사용자 지정 사용자 인터페이스만 포함된 어셈블리는 이러한 폴더에 배포하지 않아도 됩니다.Therefore you do not have to deploy assemblies that contain only the custom user interface for custom objects to these folders.

전역 어셈블리 캐시에 어셈블리 설치Installing the Assembly in the Global Assembly Cache

GAC(전역 어셈블리 캐시)에 태스크 어셈블리를 설치하려면 gacutil.exe 명령줄 도구를 사용하거나 어셈블리를 %system%\assembly 디렉터리에 끌어 놓습니다.To install the task assembly into the global assembly cache (GAC), use the command line tool gacutil.exe, or drag the assemblies to the %system%\assembly directory. 편의상 gacutil.exe에 대한 호출을 빌드 후 이벤트에 포함할 수도 있습니다.For convenience, you can also include the call to gacutil.exe in a Post-build Event.

다음 명령은 gacutil.exe를 사용하여 MyTask.dll이라는 구성 요소를 GAC에 설치합니다.The following command installs a component named MyTask.dll into the GAC by using gacutil.exe.

gacutil /iF MyTask.dll

새 버전의 사용자 지정 개체를 설치한 후에는 SSISSSIS 디자이너를 닫았다가 다시 열어야 합니다.You must close and reopen SSISSSIS Designer after you install a new version of your custom object. 전역 어셈블리 캐시에 이전 버전의 사용자 지정 개체를 설치한 경우 새 버전을 설치하려면 먼저 이전 버전을 제거해야 합니다.If you have installed earlier versions of your custom object in the global assembly cache, you must remove them before installing the new version. 어셈블리를 제거하려면 gacutil.exe를 실행하고 /u 옵션을 사용하여 어셈블리 이름을 지정합니다.To uninstall an assembly, run gacutil.exe and specify the assembly name with the /u option.

전역 어셈블리 캐시에 대한 자세한 내용은 " .NET Framework.NET Framework 도구"의 "전역 어셈블리 캐시 도구(Gactutil.exe)"를 참조하십시오.For more information about the global assembly cache, see Global Assembly Cache Tool (Gactutil.exe) in the .NET Framework.NET Framework Tools.

배포 문제 해결Troubleshooting the Deployment

사용자 지정 개체가 도구 상자 또는 사용 가능한 개체 목록에 표시되지만 패키지에 추가할 수 없는 경우 다음을 시도해 보세요.If your custom object appears in the Toolbox or the list of available objects, but you are not able to add it to a package, try the following:

  1. 전역 어셈블리 캐시에 여러 버전의 구성 요소가 있는지 확인합니다.Look in the global assembly cache for multiple versions of your component. 전역 어셈블리 캐시에 여러 버전의 구성 요소가 있는 경우 디자이너에서 구성 요소를 로드하지 못할 수 있습니다.If there are multiple versions of the component in the global assembly cache, the designer may not be able to load your component. 전역 어셈블리 캐시에서 어셈블리의 모든 인스턴스를 삭제하고 어셈블리를 다시 추가합니다.Delete all instances of the assembly from the global assembly cache, and re-add the assembly.

  2. 배포 폴더에 어셈블리의 단일 인스턴스만 있는지 확인합니다.Make sure that only a single instance of the assembly exists in the deployment folder.

  3. 도구 상자를 새로 고칩니다.Refresh the Toolbox.

  4. Visual StudioVisual Studiodevenv.exe에 연결하고 초기화 코드를 단계별로 실행하도록 중단점을 설정하여 예외가 발생하지 않도록 합니다.Attach Visual StudioVisual Studio to devenv.exe and set a breakpoint to step through your initialization code to ensure that no exceptions occur.

코드 테스트 및 디버깅Testing and Debugging Your Code

사용자 지정 개체의 런타임 메서드를 가장 간단하게 디버그하려면 사용자 지정 개체를 빌드하고 해당 구성 요소를 사용하는 패키지를 실행한 후에 Visual StudioVisual Studio에서 dtexec.exe를 시작합니다.The simplest approach to debugging the run-time methods of a custom object is to start dtexec.exe from Visual StudioVisual Studio after building your custom object and run a package that uses the component.

Validate 메서드와 같은 구성 요소의 디자인 타임 메서드를 디버그하려면 Visual StudioVisual Studio의 두 번째 인스턴스에서 해당 구성 요소를 사용하는 패키지를 열고 devenv.exe 프로세스에 연결합니다.If you want to debug the component's design-time methods, such as the Validate method, open a package that uses the component in a second instance of Visual StudioVisual Studio, and attach to its devenv.exe process.

또한 패키지가 열려 있고 SSISSSIS 디자이너에서 실행 중일 때 구성 요소의 런타임 메서드를 디버그하려면 DtsDebugHost.exe 프로세스에도 연결할 수 있도록 패키지 실행을 강제로 일시 중지해야 합니다.If you also want to debug the component's run-time methods when a package is open and running in SSISSSIS designer, you must force a pause in the execution of the package so that you can also attach to the DtsDebugHost.exe process.

dtexec.exe에 연결하여 개체의 런타임 메서드를 디버깅하려면To debug an object's run-time methods by attaching to dtexec.exe

  1. 이 항목에 설명된 대로 디버그 구성 요소에서 프로젝트를 서명 및 빌드하고 배포한 다음 전역 어셈블리 캐시에 설치합니다.Sign and build your project in the Debug configuration, deploy it, and install it in the global assembly cache as described in this topic.

  2. 프로젝트 속성디버그 탭에서 시작 외부 프로그램시작 동작으로 선택하고, C:\Program Files\Microsoft SQL Server\130\DTS\Binn에 기본적으로 설치되는 dtexec.exe를 찾습니다.On the Debug tab of Project Properties, select Start external program as the Start Action, and locate dtexec.exe, which is installed by default in C:\Program Files\Microsoft SQL Server\130\DTS\Binn.

  3. 명령줄 옵션 입력란의 시작 옵션 아래에서 구성 요소를 사용하는 패키지를 실행하는 데 필요한 명령줄 인수를 입력합니다.In the Command line options text box, under Start Options, enter the command line arguments required to run a package that uses your component. 명령줄 인수는 /F[ILE] 스위치와 그 다음에 나오는 .dtsx 파일의 경로 및 파일 이름으로 구성되는 경우가 많습니다.Often the command-line argument will consist of the /F[ILE] switch followed by the path and file name of the .dtsx file. 자세한 내용은 dtexec Utility를 참조하세요.For more information, see dtexec Utility.

  4. 원본 코드에서 구성 요소의 런타임 메서드 중 적절한 위치에 중단점을 설정합니다.Set breakpoints in the source code where appropriate in the run-time methods of your component.

  5. 프로젝트를 실행합니다.Run your project.

SQL Server Data Tools에 연결하여 사용자 지정 개체의 디자인 타임 메서드를 디버깅하려면To debug a custom object's design-time methods by attaching to SQL Server Data Tools

  1. 이 항목에 설명된 대로 디버그 구성 요소에서 프로젝트를 서명 및 빌드하고 배포한 다음 전역 어셈블리 캐시에 설치합니다.Sign and build your project in the Debug configuration, deploy it, and install it in the global assembly cache as described in this topic.

  2. 원본 코드에서 사용자 지정 개체의 디자인 타임 메서드 중 적절한 위치에 중단점을 설정합니다.Set breakpoints in the source code where appropriate in the design-time methods of your custom object.

  3. Visual StudioVisual Studio의 두 번째 인스턴스를 열고 해당 사용자 지정 개체를 사용하는 패키지가 포함된 Integration ServicesIntegration Services 프로젝트를 로드합니다.Open a second instance of Visual StudioVisual Studio and load an Integration ServicesIntegration Services project that contains a package that uses the custom object.

  4. Visual StudioVisual Studio의 첫 번째 인스턴스에서 디버그 메뉴의 프로세스에 연결을 선택하여 패키지가 로드되는 devenv.exe의 두 번째 인스턴스에 연결합니다.From the first instance of Visual StudioVisual Studio, attach to the second instance of devenv.exe in which the package is loaded by selecting Attach to Process from the Debug menu of the first instance.

  5. Visual StudioVisual Studio의 두 번째 인스턴스에서 패키지를 실행합니다.Run the package from the second instance of Visual StudioVisual Studio.

SQL Server Data Tools에 연결하여 사용자 지정 개체의 런타임 메서드를 디버깅하려면To debug a custom object's run-time methods by attaching to SQL Server Data Tools

  1. 이전 절차에 나열된 단계를 완료한 후 DtsDebugHost.exe에 연결할 수 있도록 패키지 실행을 강제로 일시 중지합니다.After you have completed the steps listed in the previous procedure, force a pause in the execution of your package so that you can attach to DtsDebugHost.exe. OnPreExecute 이벤트에 중단점을 추가하거나, 프로젝트에 스크립트 태스크를 추가하고 모달 메시지 상자를 표시하는 스크립트를 입력하여 강제로 일시 중지할 수 있습니다.You can force this pause by adding a breakpoint to the OnPreExecute event, or by adding a Script task to your project and entering script that displays a modal message box.

  2. 패키지를 실행합니다.Run the package. 일시 중지가 발생하면 코드 프로젝트가 열려 있는 Visual StudioVisual Studio 인스턴스로 전환하고 디버그 메뉴에서 프로세스에 연결을 선택합니다.When the pause occurs, switch to the instance of Visual StudioVisual Studio in which your code project is open, and select Attach to Process from the Debug menu. 형식 열에 x86 전용으로 나열된 인스턴스가 아니라 Managed, x86으로 나열된 DtsDebugHost.exe 인스턴스에 연결해야 합니다.Make sure to attach to the instance of DtsDebugHost.exe listed as Managed, x86 in the Type column, not to the instance listed as x86 only.

  3. 일시 중지된 패키지로 돌아가서 중단점을 지나 계속하거나 확인을 클릭하여 스크립트 태스크에서 발생한 메시지 상자를 닫고 패키지 실행 및 디버깅을 계속합니다.Return to the paused package and continue past the breakpoint, or click OK to dismiss the message box raised by the Script task, and continue package execution and debugging.

참고 항목See Also

Integration Services 사용자 지정 개체 개발 Developing Custom Objects for Integration Services
사용자 지정 개체 지속 Persisting Custom Objects
패키지 배포 문제 해결 도구Troubleshooting Tools for Package Development