Visual Studio를 사용한 ASP.NET 웹 배포: 소개

작성자: Tom Dykstra

시작 프로젝트 다운로드

이 자습서 시리즈에서는 .NET용 Azure SDK와 함께 Visual Studio 2012를 사용하여 Azure App Service Web Apps 또는 타사 호스팅 공급자에 ASP.NET 웹 애플리케이션을 배포(게시)하는 방법을 보여 줍니다. 대부분의 절차는 Visual Studio 2013 비슷합니다.

인터넷을 통해 사용자가 사용할 수 있도록 웹 애플리케이션을 개발합니다. 그러나 웹 프로그래밍 자습서는 일반적으로 개발 컴퓨터에서 작업하는 방법을 보여 준 직후에 중지됩니다. 이 자습서 시리즈는 웹앱을 빌드하고 테스트했으며 준비 완료된 다른 자습서에서 시작됩니다. 다음 작업 이 자습서에서는 테스트를 위해 로컬 개발 컴퓨터의 IIS에 먼저 배포한 다음, 스테이징 및 프로덕션을 위해 Azure 또는 타사 호스팅 공급자에 배포하는 방법을 보여 줍니다. 배포할 샘플 애플리케이션은 Entity Framework, SQL Server 및 ASP.NET 멤버 자격 시스템을 사용하는 웹 애플리케이션 프로젝트입니다. 샘플 애플리케이션은 ASP.NET Web Forms 사용하지만 표시된 절차는 ASP.NET MVC 및 Web API에도 적용됩니다.

이 자습서에서는 Visual Studio에서 ASP.NET 사용하는 방법을 알고 있다고 가정합니다. 그렇지 않으면 기본 ASP.NET Web Forms 자습서 또는 기본 ASP.NETMVC 자습서를 시작하는 것이 좋습니다.

자습서와 직접 관련이 없는 질문이 있는 경우 ASP.NET 배포 포럼 또는 StackOverflow에 게시할 수 있습니다.

개요

이 자습서에서는 SQL Server 데이터베이스를 포함하는 ASP.NET 웹 애플리케이션 배포를 안내합니다. 먼저 테스트를 위해 로컬 개발 컴퓨터의 IIS에 배포한 다음 스테이징 및 프로덕션을 위해 Azure App Service 및 Azure SQL Database에서 Web Apps. Visual Studio 원클릭 게시를 사용하여 배포하는 방법을 확인하고 명령줄을 사용하여 배포하는 방법을 확인할 수 있습니다.

자습서 수가 많을수록 배포 프로세스가 어려워 보일 수 있습니다. 사실 기본 절차는 간단합니다. 그러나 실제 상황에서는 대상 서버에 대한 폴더 사용 권한 설정과 같은 추가 배포 작업을 수행해야 하는 경우가 많습니다. 자습서에서 실제 애플리케이션을 성공적으로 배포하는 데 방해가 될 수 있는 정보를 남기지 않기를 바라며 이러한 추가 작업 중 일부를 설명했습니다.

자습서는 순서대로 실행되도록 설계되었으며 각 파트는 이전 파트를 기반으로 합니다. 상황과 관련이 없는 부분을 건너뛸 수 있지만 이후 자습서에서 절차를 조정해야 할 수도 있습니다.

대상 그룹

이 자습서는 다음과 같은 환경에서 작업하는 ASP.NET 개발자를 대상으로 합니다.

  • 프로덕션 환경은 Azure App Service Web Apps 또는 타사 호스팅 공급자입니다.
  • 배포는 연속 통합 프로세스로 제한되지 않지만 Visual Studio에서 직접 수행할 수 있습니다.

지속적인 배달 프로세스를 사용하는 소스 제어의 배포는 명령줄에서 배포하는 방법을 보여 주는 자습서를 제외하고는 이 자습서에서 다루지 않습니다. 지속적인 업데이트에 대한 자세한 내용은 다음 리소스를 참조하세요.

타사 호스팅 공급자 사용

자습서에서는 Azure 계정을 설정하고 스테이징 및 프로덕션을 위해 Azure App Service Web Apps 애플리케이션을 배포하는 프로세스를 안내합니다. 그러나 선택한 타사 호스팅 공급자에 배포하는 데 동일한 기본 절차를 사용할 수 있습니다. 자습서가 Azure 고유의 프로세스를 진행하는 경우 이를 설명하고 타사 호스팅 공급자에서 기대할 수 있는 차이점을 조언합니다.

웹앱 프로젝트 배포

이러한 자습서에 대해 다운로드하고 배포하는 샘플 애플리케이션은 Visual Studio 웹 애플리케이션 프로젝트입니다. 그러나 Visual Studio용 최신 웹 게시 업데이트를 설치하는 경우 웹앱 프로젝트에 동일한 배포 방법 및 도구를 사용할 수 있습니다.

ASP.NET MVC 프로젝트 배포

샘플 애플리케이션은 ASP.NET Web Forms 프로젝트이지만 수행하는 방법을 학습하는 모든 작업은 ASP.NET MVC에도 적용할 수 있습니다. Visual Studio MVC 프로젝트는 웹 애플리케이션 프로젝트의 또 다른 형태일 뿐입니다. 유일한 차이점은 ASP.NET MVC 또는 대상 버전을 지원하지 않는 호스팅 공급자에 배포하는 경우 프로젝트에 적절한(MVC 3, MVC4 또는 MVC5) NuGet 패키지를 설치했는지 확인해야 한다는 것입니다.

프로그래밍 언어

샘플 애플리케이션은 C#을 사용하지만 자습서에는 C#에 대한 지식이 필요하지 않으며 자습서에 표시된 배포 기술은 언어에 따라 다릅니다.

데이터베이스 배포 방법

Visual Studio에서 웹 배포와 함께 SQL Server 데이터베이스를 배포할 수 있는 세 가지 방법이 있습니다.

  • Entity Framework Code First 마이그레이션
  • dbDacFx 웹 배포 공급자
  • dbFullSql 웹 배포 공급자

이 자습서에서는 이러한 메서드의 처음 두 가지를 사용합니다. dbFullSql Web Deploy 공급자는 SQL Server Compact SQL Server 마이그레이션과 같은 특정 시나리오를 제외하고는 더 이상 권장되지 않는 레거시 방법입니다.

이 자습서에 표시된 메서드는 SQL Server Compact 아닌 SQL Server 데이터베이스에 대한 것입니다. SQL Server Compact 데이터베이스를 배포하는 방법에 대한 자세한 내용은 SQL Server Compact Visual Studio 웹 배포를 참조하세요.

이 자습서에 표시된 메서드를 사용하려면 웹 배포 게시 메서드를 사용해야 합니다. FTP, 파일 시스템 또는 FPSE와 같은 다른 게시 방법을 선호하는 경우 Visual Studio용 웹 배포 콘텐츠 맵 및 ASP.NET 웹 애플리케이션 배포와 별도로 데이터베이스 배포 를 참조하세요.

Entity Framework Code First 마이그레이션

Entity Framework 버전 4.3에서 Microsoft는 Code First 마이그레이션 도입했습니다. Code First 마이그레이션 데이터 모델을 증분으로 변경하고 이러한 변경 내용을 데이터베이스에 전파하는 프로세스를 자동화합니다. 이전 버전의 Code First에서는 일반적으로 데이터 모델을 변경할 때마다 Entity Framework에서 데이터베이스를 삭제하고 다시 만들 수 있도록 합니다. 테스트 데이터를 쉽게 다시 만들 수 있기 때문에 개발 시 문제가 되지 않지만 프로덕션 환경에서는 일반적으로 데이터베이스를 삭제하지 않고 데이터베이스 스키마를 업데이트하려고 합니다. 마이그레이션 기능을 사용하면 Code First가 데이터베이스를 삭제하고 다시 만들지 않고도 업데이트할 수 있습니다. Code First가 필요한 스키마를 변경하는 방법을 자동으로 결정하도록 하거나 변경 내용을 사용자 지정하는 코드를 작성할 수 있습니다. Code First 마이그레이션 대한 소개는 Code First 마이그레이션 참조하세요.

웹 프로젝트를 배포할 때 Visual Studio는 Code First 마이그레이션 관리되는 데이터베이스를 배포하는 프로세스를 자동화할 수 있습니다. 게시 프로필을 만들 때 Code First 마이그레이션 실행(애플리케이션 시작 시 실행)이라는 레이블이 지정된 검사 상자를 선택합니다. 이 설정을 사용하면 Code First가 이니셜라이저 클래스를 사용하도록 MigrateDatabaseToLatestVersion 배포 프로세스가 대상 서버에서 애플리케이션 Web.config 파일을 자동으로 구성합니다.

Visual Studio는 배포 프로세스 중에 데이터베이스를 사용하여 아무 작업도 수행하지 않습니다. 배포된 애플리케이션이 배포 후 처음으로 데이터베이스에 액세스하면 Code First는 데이터베이스를 자동으로 만들거나 데이터베이스 스키마를 최신 버전으로 업데이트합니다. 애플리케이션이 Migrations Seed 메서드를 구현하는 경우 데이터베이스를 만들거나 스키마가 업데이트된 후 메서드가 실행됩니다.

이 자습서에서는 Code First 마이그레이션 사용하여 애플리케이션 데이터베이스를 배포합니다.

dbDacFx 웹 배포 공급자

Entity Framework Code First에서 관리되지 않는 SQL Server 데이터베이스의 경우 게시 프로필을 구성할 때 데이터베이스 업데이트라는 레이블이 지정된 검사 상자를 선택할 수 있습니다. 초기 배포 중에 dbDacFx 공급자는 원본 데이터베이스와 일치하도록 대상 데이터베이스에 테이블 및 기타 데이터베이스 개체를 만듭니다. 후속 배포에서 공급자는 원본 데이터베이스와 대상 데이터베이스 간의 차이점을 결정하고 원본 데이터베이스와 일치하도록 대상 데이터베이스의 스키마를 업데이트합니다. 기본적으로 공급자는 테이블 또는 열이 삭제되는 경우와 같이 데이터 손실을 유발하는 변경을 수행하지 않습니다.

이 메서드는 데이터베이스 테이블의 데이터 배포를 자동화하지 않지만 스크립트를 만들어 배포 중에 실행하도록 Visual Studio를 구성할 수 있습니다. 배포 중에 스크립트를 실행하는 또 다른 이유는 데이터 손실을 유발하기 때문에 자동으로 수행할 수 없는 스키마를 변경하기 위한 것입니다.

이 자습서에서는 dbDacFx 공급자를 사용하여 ASP.NET 멤버 자격 데이터베이스를 배포합니다.

이 자습서 중 문제 해결

배포 중에 오류가 발생하거나 배포된 사이트가 올바르게 실행되지 않는 경우 오류 메시지가 항상 명확한 솔루션을 제공하지는 않습니다. 몇 가지 일반적인 문제 시나리오를 돕기 위해 문제 해결 참조 페이지를 사용할 수 있습니다. 자습서를 진행하는 동안 오류 메시지가 표시되거나 문제가 해결되지 않으면 문제 해결 페이지를 검사 합니다.

댓글 시작

자습서에 대한 주석은 환영하며 자습서가 업데이트되면 자습서 주석에 제공된 개선 사항에 대한 수정 또는 제안을 고려하기 위해 모든 노력을 기울입니다.

사전 요구 사항

이 자습서는 다음 제품에 대해 작성되었습니다.

Visual Studio 2010 SP1 또는 Visual Studio 2013 사용하여 자습서를 따를 수 있지만 일부 스크린샷은 다르고 일부 기능은 다릅니다.

Visual Studio 2013 사용하는 경우 Visual Studio 2013 Azure SDK를 설치합니다.

Visual Studio 2010 SP1을 사용하는 경우 다음 소프트웨어를 설치합니다.

컴퓨터에 이미 있는 SDK 종속성 수에 따라 Azure SDK를 설치하는 데 몇 분에서 반 시간 이상까지 시간이 오래 걸릴 수 있습니다. SDK에 Visual Studio 웹 게시 기능에 대한 최신 업데이트가 포함되어 있으므로 Azure 대신 타사 호스팅 공급자에 게시하려는 경우에도 Azure SDK가 필요합니다.

참고

이 자습서는 Azure SDK 버전 1.8.1로 작성되었습니다. 그 이후로 추가 기능이 있는 최신 버전이 릴리스되었습니다. 자습서는 이러한 기능을 멘션 추가 정보가 있는 리소스에 연결하도록 업데이트되었습니다.

지침 및 스크린샷은 Windows 8 기반으로 하지만 자습서에서는 Windows 7의 차이점을 설명합니다.

자습서를 완료하려면 다른 소프트웨어가 필요하지만 아직 설치할 필요는 없습니다. 이 자습서에서는 필요할 때 설치하는 단계를 안내합니다.

샘플 애플리케이션 다운로드

배포할 애플리케이션의 이름은 Contoso University이며 이미 생성되었습니다. ASP.NET 사이트의 Entity Framework 자습서에 설명된 Contoso University 애플리케이션을 기반으로 하는 대학 웹 사이트의 간소화된 버전입니다.

필수 구성 요소가 설치되어 있는 경우 Contoso University 웹 애플리케이션을 다운로드합니다. .zip 파일에는 프로젝트의 여러 버전이 포함되어 있습니다. 자습서의 단계를 진행하려면 C# 폴더에 있는 프로젝트부터 시작합니다. 자습서의 끝에서 프로젝트가 어떻게 표시되는지 확인하려면 ContosoUniversity-End 폴더에서 프로젝트를 엽니다.

자습서 단계를 수행하기 위해 프로젝트를 준비하려면 다음 단계를 수행합니다.

  1. Visual Studio 프로젝트 작업에 사용하는 폴더에 ContosoUniversity라는 폴더에 있는 C# 폴더의 ContosoUniversity 솔루션 파일을 저장합니다.

    기본적으로 Visual Studio 2012의 폴더는 다음과 같습니다.

    C:\Users\<username>\Documents\Visual Studio 2012\Projects

    (이 자습서의 스크린샷의 경우 프로젝트 폴더는 의 루트 디렉터리에 C있습니다. 드라이브).

  2. Visual Studio를 시작하고 프로젝트를 엽니다.

  3. 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭하고 EnableNuGet 패키지 복원을 클릭합니다.

  4. 솔루션을 빌드합니다.

  5. 컴파일 오류가 발생하면 NuGet 패키지를 수동으로 복원합니다.

    1. 솔루션 탐색기 솔루션을 마우스 오른쪽 단추로 클릭한 다음 솔루션용 NuGet 패키지 관리를 클릭합니다.
    2. NuGet 패키지 관리 대화 상자의 맨 위에 이 솔루션에서 일부 NuGet 패키지가 누락된 것을 볼 수 있습니다. 복원하려면 클릭합니다.복원 단추를 클릭합니다.
    3. 솔루션을 다시 빌드합니다.
  6. Ctrl+F5를 눌러 응용 프로그램을 실행합니다.

    애플리케이션이 Contoso University 홈페이지로 열립니다.

    홈 페이지 개발

    (Visual Studio가 SQL Server Express LocalDB instance 시작하는 동안 대기 시간이 있을 수 있으며 해당 프로세스가 너무 오래 걸리는 경우 시간 제한 오류가 발생할 수 있습니다. 이 경우 프로젝트를 다시 시작합니다.)

웹 사이트 페이지는 메뉴 모음에서 액세스할 수 있으며 다음 기능을 수행할 수 있습니다.

  • 학생 통계(정보 페이지)를 표시합니다.
  • 학생을 표시, 편집, 삭제 및 추가합니다.
  • 과정을 표시하고 편집합니다.
  • 강사 표시 및 편집
  • 부서를 표시하고 편집합니다.

다음은 몇 가지 대표 페이지의 스크린샷입니다.

학생 페이지 개발

학생 추가 페이지 개발

배포에 영향을 주는 애플리케이션 기능 검토

애플리케이션의 다음 기능은 애플리케이션을 배포하는 방법 또는 배포를 위해 수행해야 하는 사항에 영향을 미칩니다. 이러한 각 내용은 시리즈의 다음 자습서에서 자세히 설명합니다.

  • Contoso University는 SQL Server 데이터베이스를 사용하여 학생 및 강사 이름과 같은 애플리케이션 데이터를 저장합니다. 데이터베이스에는 테스트 데이터와 프로덕션 데이터가 혼합되어 있으며 프로덕션에 배포할 때 테스트 데이터를 제외해야 합니다.
  • 애플리케이션은 SQL Server 데이터베이스에 사용자 계정 정보를 저장하는 ASP.NET 멤버 자격 시스템을 사용합니다. 애플리케이션은 일부 제한된 정보에 액세스할 수 있는 관리자 사용자를 정의합니다. 테스트 계정 없이 관리자 계정으로 멤버 자격 데이터베이스를 배포해야 합니다.
  • 애플리케이션은 타사 오류 로깅 및 보고 유틸리티를 사용합니다. 이 유틸리티는 애플리케이션과 함께 배포해야 하는 어셈블리에서 제공됩니다.
  • 오류 로깅 유틸리티는 XML 파일의 오류 정보를 파일 폴더에 씁니다. 배포된 사이트에서 ASP.NET 실행되는 계정에 이 폴더에 대한 쓰기 권한이 있는지 확인해야 하며 이 폴더를 배포에서 제외해야 합니다. 그렇지 않으면 테스트 환경의 오류 로그 데이터가 프로덕션 및/또는 프로덕션 오류 로그 파일에 배포될 수 있습니다.
  • 애플리케이션에는 대상 환경(테스트, 스테이징 또는 프로덕션)에 따라 배포된 Web.config 파일에서 변경해야 하는 일부 설정과 빌드 구성(디버그 또는 릴리스)에 따라 변경해야 하는 기타 설정이 포함됩니다.
  • Visual Studio 솔루션에는 클래스 라이브러리 프로젝트가 포함됩니다. 이 프로젝트에서 생성하는 어셈블리만 프로젝트 자체가 아니라 배포해야 합니다.

요약

시리즈의 첫 번째 자습서에서는 샘플 Visual Studio 프로젝트를 다운로드하고 애플리케이션 배포 방법에 영향을 주는 사이트 기능을 검토했습니다. 다음 자습서에서는 이러한 항목 중 일부를 자동으로 처리하도록 설정하여 배포를 준비합니다. 다른 사용자는 수동으로 처리합니다.