Share via


저장 프로시저 디버그(VB)

작성자 : Scott Mitchell

PDF 다운로드

Visual Studio Professional 및 Team System 버전을 사용하면 중단점을 설정하고 SQL Server 내의 저장 프로시저로 한 단계씩 실행하여 저장 프로시저를 디버깅하는 것만큼 쉽게 애플리케이션 코드를 디버깅할 수 있습니다. 이 자습서에서는 저장 프로시저의 직접 데이터베이스 디버깅 및 애플리케이션 디버깅을 보여 줍니다.

소개

Visual Studio는 풍부한 디버깅 환경을 제공합니다. 마우스를 몇 번 입력하거나 클릭하면 중단점을 사용하여 프로그램 실행을 중지하고 상태 및 제어 흐름을 검사할 수 있습니다. Visual Studio는 애플리케이션 코드 디버깅과 함께 SQL Server 내에서 저장 프로시저 디버깅을 지원합니다. 중단점이 ASP.NET 코드 숨김 클래스 또는 Business Logic Layer 클래스의 코드 내에서 설정할 수 있는 것처럼 저장 프로시저 내에 배치할 수도 있습니다.

이 자습서에서는 실행 중인 ASP.NET 애플리케이션에서 저장 프로시저가 호출될 때 적중되는 중단점을 설정하는 방법뿐만 아니라 Visual Studio 내의 서버 Explorer 저장 프로시저를 단계별로 살펴보겠습니다.

참고

아쉽게도 저장 프로시저는 Visual Studio의 Professional 및 Team Systems 버전을 통해서만 단계 및 디버그할 수 있습니다. Visual Web Developer 또는 표준 버전의 Visual Studio를 사용하는 경우 저장 프로시저를 디버그하는 데 필요한 단계를 안내하는 동안 함께 읽을 수 있지만 컴퓨터에서 이러한 단계를 복제할 수는 없습니다.

디버깅 개념 SQL Server

Microsoft SQL Server 2005는 모든 .NET 어셈블리에서 사용하는 런타임인 CLR(공용 언어 런타임)과의 통합을 제공하도록 설계되었습니다. 따라서 SQL Server 2005는 관리되는 데이터베이스 개체를 지원합니다. 즉, Visual Basic 클래스에서 저장 프로시저 및 UDF(User-Defined Functions)와 같은 데이터베이스 개체를 메서드로 만들 수 있습니다. 이렇게 하면 이러한 저장 프로시저 및 UDF가 .NET Framework 사용자 지정 클래스의 기능을 활용할 수 있습니다. 물론 SQL Server 2005에서도 T-SQL 데이터베이스 개체를 지원합니다.

SQL Server 2005는 T-SQL 및 관리되는 데이터베이스 개체 모두에 대한 디버깅 지원을 제공합니다. 그러나 이러한 개체는 Visual Studio 2005 Professional 및 Team Systems 버전을 통해서만 디버그할 수 있습니다. 이 자습서에서는 T-SQL 데이터베이스 개체 디버깅을 살펴보겠습니다. 후속 자습서에서는 관리되는 데이터베이스 개체 디버깅을 살펴봅합니다.

SQL Server 2005 CLR 통합 팀의 SQL Server 2005에서 T-SQL 및 CLR 디버깅 개요 블로그 항목은 Visual Studio에서 SQL Server 2005 개체를 디버그하는 세 가지 방법을 강조 표시합니다.

  • DDD(직접 데이터베이스 디버깅) - 서버 Explorer 저장 프로시저 및 UDF와 같은 T-SQL 데이터베이스 개체를 한 단계씩 실행할 수 있습니다. 1단계에서 DDD를 검사합니다.
  • 애플리케이션 디버깅 - 데이터베이스 개체 내에서 중단점을 설정한 다음, ASP.NET 애플리케이션을 실행할 수 있습니다. 데이터베이스 개체가 실행되면 중단점이 적중되고 컨트롤이 디버거로 인오버됩니다. 애플리케이션 디버깅을 사용하면 애플리케이션 코드에서 데이터베이스 개체를 한 단계씩 실행할 수 없습니다. 디버거를 중지하려는 저장 프로시저 또는 UDF에서 중단점을 명시적으로 설정해야 합니다. 애플리케이션 디버깅은 2단계부터 검사됩니다.
  • SQL Server Project에서 디버깅 - Visual Studio Professional 및 Team Systems 버전에는 관리되는 데이터베이스 개체를 만드는 데 일반적으로 사용되는 SQL Server Project 형식이 포함됩니다. 다음 자습서에서는 SQL Server 프로젝트 사용 및 해당 콘텐츠 디버깅을 살펴보겠습니다.

Visual Studio는 로컬 및 원격 SQL Server 인스턴스에서 저장 프로시저를 디버그할 수 있습니다. 로컬 SQL Server instance Visual Studio와 동일한 컴퓨터에 설치되는 로컬 SQL Server instance. 사용 중인 SQL Server 데이터베이스가 개발 컴퓨터에 없는 경우 원격 instance 간주됩니다. 이 자습서에서는 로컬 SQL Server 인스턴스를 사용했습니다. 원격 SQL 서버 instance 저장 프로시저를 디버깅하려면 로컬 instance 저장 프로시저를 디버깅할 때보다 더 많은 구성 단계가 필요합니다.

로컬 SQL Server instance 사용하는 경우 1단계로 시작하고 이 자습서를 통해 끝까지 작업할 수 있습니다. 그러나 원격 SQL Server instance 사용하는 경우 먼저 디버깅할 때 원격 instance SQL Server 로그인이 있는 Windows 사용자 계정으로 개발 머신에 기록되는지 확인해야 합니다. 또한 이 데이터베이스 로그인과 실행 중인 ASP.NET 애플리케이션에서 데이터베이스에 연결하는 데 사용되는 데이터베이스 로그인은 모두 역할의 sysadmin 멤버여야 합니다. 원격 instance 디버그하도록 Visual Studio 및 SQL Server 구성하는 방법에 대한 자세한 내용은 이 자습서의 끝에 있는 원격 인스턴스의 T-SQL Database 개체 디버깅 섹션을 참조하세요.

마지막으로, T-SQL 데이터베이스 개체에 대한 디버깅 지원은 .NET 애플리케이션에 대한 디버깅 지원만큼 기능이 풍부하지 않다는 것을 이해합니다. 예를 들어 중단점 조건 및 필터는 지원되지 않으며, 디버깅 창의 하위 집합만 사용할 수 있고, 편집 및 계속을 사용할 수 없으며, 직접 실행 창은 쓸모 없이 렌더링됩니다. 자세한 내용은 디버거 명령 및 기능에 대한 제한 사항을 참조하세요.

1단계: 저장 프로시저로 직접 단계별 실행

Visual Studio를 사용하면 데이터베이스 개체를 쉽게 직접 디버그할 수 있습니다. DDD(직접 데이터베이스 디버깅) 기능을 사용하여 Northwind 데이터베이스의 Products_SelectByCategoryID 저장 프로시저를 단계별로 진행하는 방법을 살펴보겠습니다. 이름에서 알 수 Products_SelectByCategoryID 있듯이 는 특정 범주에 대한 제품 정보를 반환 합니다. 형식화된 DataSet의 TableAdapters 자습서에 대한 기존 저장 프로시저 사용 자습서에서 생성되었습니다. 먼저 서버 Explorer 이동하여 Northwind 데이터베이스 노드를 확장합니다. 그런 다음 저장 프로시저 폴더로 드릴다운하고 저장 프로시저를 Products_SelectByCategoryID 마우스 오른쪽 단추로 클릭한 다음 상황에 맞는 메뉴에서 저장 프로시저 단계 옵션을 선택합니다. 그러면 디버거가 시작됩니다.

저장 프로시저에는 Products_SelectByCategoryID 입력 매개 변수가 @CategoryID 예상되므로 이 값을 제공하라는 메시지가 표시됩니다. 음료에 대한 정보를 반환하는 1을 입력합니다.

<span class=@CategoryID Parameter" /> 값 1을 사용합니다.

그림 1: 매개 변수에 값 1 @CategoryID 사용

매개 변수에 대한 @CategoryID 값을 제공하면 저장 프로시저가 실행됩니다. 하지만 디버거는 완료까지 실행하는 대신 첫 번째 문에서 실행을 중지합니다. 여백의 노란색 화살표는 저장 프로시저의 현재 위치를 나타냅니다. 조사식 창을 통해 또는 저장 프로시저의 매개 변수 이름을 마우스로 가리키면 매개 변수 값을 보고 편집할 수 있습니다.

저장 프로시저의 첫 번째 문에서 디버거가 중지되었습니다.

그림 2: 저장 프로시저의 첫 번째 문에서 디버거가 중지되었습니다(전체 크기 이미지를 보려면 클릭).

저장 프로시저를 한 번에 한 문씩 단계별로 실행하려면 도구 모음에서 단계별 실행 단추를 클릭하거나 F10 키를 누릅니다. 저장 프로시저에는 Products_SelectByCategoryID 단일 SELECT 문이 포함되어 있으므로 F10 키를 누르면 단일 문을 단계별로 실행하고 저장 프로시저 실행을 완료합니다. 저장 프로시저가 완료되면 출력이 출력 창에 표시되고 디버거가 종료됩니다.

참고

T-SQL 디버깅은 문 수준에서 발생합니다. 문을 한 단계씩 실행할 SELECT 수 없습니다.

2단계: 애플리케이션 디버깅을 위한 웹 사이트 구성

서버 Explorer 직접 저장 프로시저를 디버깅하는 것이 편리하지만, 대부분의 시나리오에서는 ASP.NET 애플리케이션에서 저장 프로시저를 호출할 때 저장 프로시저를 디버깅하는 데 더 관심이 있습니다. Visual Studio 내에서 저장 프로시저에 중단점을 추가한 다음, ASP.NET 애플리케이션 디버깅을 시작할 수 있습니다. 중단점이 있는 저장 프로시저가 애플리케이션에서 호출되면 중단점에서 실행이 중지되고 1단계에서와 마찬가지로 저장 프로시저의 매개 변수 값을 보고 변경하고 해당 문을 단계별로 실행할 수 있습니다.

애플리케이션에서 호출된 저장 프로시저 디버깅을 시작하려면 먼저 ASP.NET 웹 애플리케이션에 SQL Server 디버거와 통합하도록 지시해야 합니다. 먼저 솔루션 탐색기(ASPNET_Data_Tutorial_74_VB)에서 웹 사이트 이름을 마우스 오른쪽 단추로 클릭합니다. 상황에 맞는 메뉴에서 속성 페이지 옵션을 선택하고 왼쪽의 시작 옵션 항목을 선택한 다음 디버거 섹션에서 SQL Server 확인란을 검사(그림 3 참조).

애플리케이션의 속성 페이지에서 SQL Server 확인란을 선택합니다.

그림 3: 애플리케이션의 속성 페이지에서 SQL Server 확인란을 선택합니다(전체 크기 이미지를 보려면 클릭).

또한 연결 풀링을 사용하지 않도록 애플리케이션에서 사용하는 데이터베이스 연결 문자열 업데이트해야 합니다. 데이터베이스에 대한 연결이 닫혀 있으면 해당 SqlConnection 개체가 사용 가능한 연결 풀에 배치됩니다. 데이터베이스에 대한 연결을 설정할 때 새 연결을 만들고 설정하는 대신 이 풀에서 사용 가능한 연결 개체를 검색할 수 있습니다. 이 연결 개체 풀링 성능 향상 이며 기본적으로 사용 하도록 설정 되어 있습니다. 그러나 디버깅할 때 풀에서 가져온 연결로 작업할 때 디버깅 인프라가 올바르게 다시 설정되지 않기 때문에 연결 풀링을 해제하려고 합니다.

연결 풀링을 사용하지 않도록 설정하려면 설정을 Pooling=false 포함하도록 에서 Web.config 를 업데이트 NORTHWNDConnectionString 합니다.

<connectionStrings>
    <add name="NORTHWNDConnectionString" connectionString=
        "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\NORTHWND.MDF;
            Integrated Security=True;User Instance=True;Pooling=false"
        providerName="System.Data.SqlClient" />
</connectionStrings>

참고

ASP.NET 애플리케이션을 통해 SQL Server 디버깅을 완료한 후에는 연결 문자열 설정을 제거 Pooling 하거나 로 설정하여 연결 풀링을 복원해야 합니다 Pooling=true .

이 시점에서 ASP.NET 애플리케이션은 Visual Studio가 웹 애플리케이션을 통해 호출될 때 SQL Server 데이터베이스 개체를 디버그할 수 있도록 구성되었습니다. 이제 남은 것은 저장 프로시저에 중단점을 추가하고 디버깅을 시작하는 것입니다.

3단계: 중단점 추가 및 디버깅

저장 프로시저를 Products_SelectByCategoryID 열고 적절한 위치에서 여백을 클릭하거나 문의 시작 부분에 커서를 놓고 F9 키를 눌러 문 시작 SELECTSELECT 부분에 중단점을 설정합니다. 그림 4에서 알 수 있듯이 중단점은 여백에 빨간색 원으로 나타납니다.

Products_SelectByCategoryID 저장 프로시저에서 중단점 설정

그림 4: 저장 프로시저에서 Products_SelectByCategoryID 중단점 설정(전체 크기 이미지를 보려면 클릭)

클라이언트 애플리케이션을 통해 SQL 데이터베이스 개체를 디버그하려면 애플리케이션 디버깅을 지원하도록 데이터베이스를 구성해야 합니다. 중단점을 처음 설정할 때 이 설정은 자동으로 켜지지만 두 번 검사 것이 중요합니다. 서버 Explorer 노드를 마우스 오른쪽 단추로 클릭합니다NORTHWND.MDF. 상황에 맞는 메뉴에는 애플리케이션 디버깅 이라는 선택된 메뉴 항목이 포함되어야 합니다.

애플리케이션 디버깅 옵션이 사용하도록 설정되어 있는지 확인합니다.

그림 5: 애플리케이션 디버깅 옵션이 사용하도록 설정되어 있는지 확인

중단점 설정 및 애플리케이션 디버깅 옵션을 사용하도록 설정하면 ASP.NET 애플리케이션에서 호출될 때 저장 프로시저를 디버그할 준비가 된 것입니다. 디버그 메뉴로 이동하여 디버깅 시작을 선택하거나 F5 키를 누르거나 도구 모음에서 녹색 재생 아이콘을 클릭하여 디버거를 시작합니다. 그러면 디버거가 시작되고 웹 사이트가 시작됩니다.

저장 프로시저는 Products_SelectByCategoryIDTyped DataSet의 TableAdapters 자습서에 대한 기존 저장 프로시저 사용 자습서에서 만들어졌습니다. 해당 웹 페이지(~/AdvancedDAL/ExistingSprocs.aspx)에는 이 저장 프로시저에서 반환된 결과를 표시하는 GridView가 포함되어 있습니다. 브라우저를 통해 이 페이지를 방문합니다. 페이지에 도달하면 저장 프로시저의 중단점이 Products_SelectByCategoryID 적중되고 컨트롤이 Visual Studio로 반환됩니다. 1단계와 마찬가지로 저장 프로시저 문을 단계별로 실행하고 매개 변수 값을 보고 수정할 수 있습니다.

ExistingSprocs.aspx 페이지는 처음에 음료를 표시합니다.

그림 6: ExistingSprocs.aspx 처음에 음료 표시 페이지(전체 크기 이미지를 보려면 클릭)

저장 프로시저 중단점에 도달했습니다.

그림 7: 저장 프로시저 중단점에 도달했습니다(전체 크기 이미지를 보려면 클릭).

그림 7의 조사식 창에서 볼 수 있듯이 매개 변수의 @CategoryID 값은 1입니다. 이 페이지는 처음에 값이 1인 음료 범주에 제품을 표시하기 때문 ExistingSprocs.aspx 입니다 CategoryID . 드롭다운 목록에서 다른 범주를 선택합니다. 이렇게 하면 포스트백이 발생하고 저장 프로시저가 Products_SelectByCategoryID 다시 실행됩니다. 중단점이 다시 적중되지만 이번에는 @CategoryID 매개 변수 값이 선택한 드롭다운 목록 항목의 CategoryID를 반영합니다.

Drop-Down 목록에서 다른 범주 선택

그림 8: Drop-Down 목록에서 다른 범주 선택(전체 크기 이미지를 보려면 클릭)

<span class=@CategoryID 매개 변수는 웹 페이지에서 선택한 범주를 반영합니다." />

그림 9: 매개 변수는 @CategoryID 웹 페이지에서 선택한 범주를 반영합니다(전체 크기 이미지를 보려면 클릭).

참고

페이지를 방문할 ExistingSprocs.aspx 때 저장 프로시저의 Products_SelectByCategoryID 중단점이 적중되지 않은 경우 ASP.NET 애플리케이션 속성 페이지의 디버거 섹션에서 SQL Server 확인란이 선택되어 있는지, 연결 풀링을 사용하지 않도록 설정되었는지, 데이터베이스의 애플리케이션 디버깅 옵션이 사용하도록 설정되어 있는지 확인합니다. 여전히 문제가 있는 경우 Visual Studio를 다시 시작하고 다시 시도하세요.

원격 인스턴스에서 T-SQL Database 개체 디버깅

Visual Studio를 통해 데이터베이스 개체를 디버깅하는 것은 SQL Server 데이터베이스 instance Visual Studio와 동일한 컴퓨터에 있는 경우 매우 간단합니다. 그러나 SQL Server Visual Studio가 서로 다른 컴퓨터에 있는 경우 모든 것이 제대로 작동하려면 몇 가지 신중한 구성이 필요합니다. 다음과 같은 두 가지 핵심 작업이 있습니다.

  • ADO.NET 통해 데이터베이스에 연결하는 데 사용되는 로그인이 역할에 속하는지 sysadmin 확인합니다.
  • 개발 컴퓨터에서 Visual Studio에서 사용하는 Windows 사용자 계정이 역할에 속하는 유효한 SQL Server 로그인 계정인지 확인합니다sysadmin.

첫 번째 단계는 비교적 간단합니다. 먼저 ASP.NET 애플리케이션에서 데이터베이스에 연결하는 데 사용되는 사용자 계정을 식별한 다음, SQL Server Management Studio 해당 로그인 계정을 sysadmin 역할에 추가합니다.

두 번째 작업을 수행하려면 애플리케이션을 디버그하는 데 사용하는 Windows 사용자 계정이 원격 데이터베이스에서 유효한 로그인이어야 합니다. 그러나 워크스테이션에 로그온한 Windows 계정이 SQL Server 유효한 로그인이 아닐 수 있습니다. 특정 로그인 계정을 SQL Server 추가하는 대신 일부 Windows 사용자 계정을 SQL Server 디버깅 계정으로 지정하는 것이 더 좋습니다. 그런 다음 원격 SQL Server instance 데이터베이스 개체를 디버그하려면 해당 Windows 로그인 계정의 자격 증명을 사용하여 Visual Studio를 실행합니다.

예를 들어 사항을 명확히 하는 데 도움이 됩니다. Windows 도메인 내에 라는 SQLDebug Windows 계정이 있다고 상상해 보세요. 이 계정은 유효한 로그인 및 역할의 sysadmin 멤버로 원격 SQL Server instance 추가해야 합니다. 그런 다음 Visual Studio에서 원격 SQL Server instance 디버그하려면 Visual Studio를 사용자로 SQLDebug 실행해야 합니다. 이 작업은 워크스테이션에서 로그아웃하고, 로 다시 SQLDebug로그인한 다음, Visual Studio를 시작하여 수행할 수 있지만, 더 간단한 방법은 자체 자격 증명을 사용하여 워크스테이션에 로그인한 다음 를 사용하여 runas.exe Visual Studio를 사용자로 SQLDebug 시작하는 것입니다. runas.exe 에서는 특정 애플리케이션을 다른 사용자 계정의 모습으로 실행할 수 있습니다. Visual Studio를 로 SQLDebug시작하려면 명령줄에서 다음 문을 입력할 수 있습니다.

runas.exe /user:SQLDebug "%PROGRAMFILES%\Microsoft Visual Studio 8\Common7\IDE\devenv.exe"

이 프로세스에 대한 자세한 설명은 William R. VaughnVisual Studio 및 SQL Server 히치하이커 가이드, 일곱 번째 버전을 참조하세요.

참고

개발 컴퓨터에서 Windows XP 서비스 팩 2를 실행하는 경우 원격 디버깅을 허용하도록 인터넷 연결 방화벽을 구성해야 합니다. 방법: SQL Server 2005 디버깅 사용 문서에는 두 단계가 포함됩니다. (a) Visual Studio 호스트 컴퓨터에서 예외 목록에 를 추가하고 Devenv.exe TCP 135 포트를 열어야 합니다. (b) 원격(SQL) 컴퓨터에서 TCP 135 포트를 열고 예외 목록에 추가 sqlservr.exe 해야 합니다. 도메인 정책에서 IPSec을 통해 네트워크 통신을 수행해야 하는 경우 UDP 4500 및 UDP 500 포트를 열어야 합니다.

요약

Visual Studio는 .NET 애플리케이션 코드에 대한 디버깅 지원을 제공하는 것 외에도 SQL Server 2005에 대한 다양한 디버깅 옵션을 제공합니다. 이 자습서에서는 두 가지 옵션인 직접 데이터베이스 디버깅 및 애플리케이션 디버깅을 살펴보았습니다. T-SQL 데이터베이스 개체를 직접 디버그하려면 서버 Explorer 통해 개체를 찾은 다음 마우스 오른쪽 단추로 클릭하고 단계별 실행을 선택합니다. 그러면 디버거가 시작되고 데이터베이스 개체의 첫 번째 문이 중지됩니다. 이때 개체 문을 단계별로 실행하고 매개 변수 값을 보고 수정할 수 있습니다. 1단계에서는 이 방법을 사용하여 저장 프로시저를 Products_SelectByCategoryID 한 단계씩 실행했습니다.

애플리케이션 디버깅을 사용하면 중단점을 데이터베이스 개체 내에서 직접 설정할 수 있습니다. 중단점이 있는 데이터베이스 개체가 클라이언트 애플리케이션(예: ASP.NET 웹 애플리케이션)에서 호출되면 디버거가 인수되면 프로그램이 중단됩니다. 애플리케이션 디버깅은 특정 데이터베이스 개체가 호출되는 애플리케이션 작업을 보다 명확하게 표시하기 때문에 유용합니다. 그러나 직접 데이터베이스 디버깅보다 좀 더 많은 구성과 설정이 필요합니다.

SQL Server Projects를 통해 데이터베이스 개체를 디버그할 수도 있습니다. 다음 자습서에서는 SQL Server Projects를 사용하고 이를 사용하여 관리되는 데이터베이스 개체를 만들고 디버그하는 방법을 살펴보겠습니다.

행복한 프로그래밍!

저자 정보

7개의 ASP/ASP.NET 책의 저자이자 4GuysFromRolla.com 창립자인 Scott Mitchell은 1998년부터 Microsoft 웹 기술로 작업해 왔습니다. Scott은 독립 컨설턴트, 트레이너 및 작가로 일합니다. 그의 최신 책은 샘스 티치 유어셀프 ASP.NET 24시간 만에 2.0입니다. 그는 에서mitchell@4GuysFromRolla.com 또는 에서 찾을 http://ScottOnWriting.NET수있는 자신의 블로그를 통해 도달 할 수 있습니다.