파트 5: 연결 문자열 생성 및 SQL Server LocalDB 구성하기

등록일시: 2015-05-11 08:00,  수정일시: 2015-05-11 08:00
조회수: 15,016
이 문서는 ASP.NET MVC 기술을 널리 알리고자 하는 개인적인 취지로 제공되는 번역문서입니다. 이 문서에 대한 모든 저작권은 마이크로소프트에 있으며 요청이 있을 경우 언제라도 게시가 중단될 수 있습니다. 번역 내용에 오역이 존재할 수 있고 주석은 번역자 개인의 의견일 뿐이며 마이크로소프트는 이에 관한 어떠한 보장도 하지 않습니다. 번역이 완료된 이후에도 대상 제품 및 기술이 개선되거나 변경됨에 따라 원문의 내용도 변경되거나 보완되었을 수 있으므로 주의하시기 바랍니다.

이전 단계에서 작성했던 MovieDBContext 클래스는 데이터베이스의 연결, 데이터베이스 레코드와 Movie 개체의 매핑 작업 등을 처리하게 됩니다. 그러면 이제 자연스럽게 한 가지 궁금증이 생겼을 텐데, 이 클래스가 연결하게 될 데이터베이스는 어떻게 지정할 수 있을까요? 기본적으로 Entity Framework는 LocalDB를 사용하기 때문에 사실 사용할 데이터베이스를 반드시 지정해야만 할 필요는 없습니다. 본문에서는 응용 프로그램의 Web.config 파일에 명시적으로 연결 문자열을 추가해보도록 하겠습니다.

SQL Server Express LocalDB

LocalDB는 요청에 의해서 실행되고(On-Demand) 사용자 모드에서 동작하는, 경량화된 SQL Server Express Database Engine의 한 버전입니다. LocalDB는 .mdf 파일을 데이터베이스처럼 사용할 수 있는 SQL Server Express의 특수한 실행 모드에서 동작합니다. LocalDB 데이터베이스 파일은 일반적으로 웹 프로젝트의 App_Data 폴더에 위치합니다.

그러나 실제 운영용 웹 응용 프로그램에서는 SQL Server Express를 사용하지 않는 것이 좋습니다. 특히 LocalDB는 IIS에 적합하게 설계되지 않았기 때문에 운영용 웹 응용 프로그램에서는 사용하면 안됩니다. 다만 LocalDB 데이터베이스는 SQL Server나 SQL Azure로 손쉽게 마이그레이션이 가능합니다.

그리고 Visual Studio 2013(그리고 2012)에서는 LocalDB가 Visual Studio와 함께 기본 설치됩니다.

기본적으로 Entity Framework는 개체 컨텍스트 클래스(본 자습서의 경우 MovieDBContext 클래스)와 동일한 이름을 갖고 있는 연결 문자열을 찾습니다. 이에 대한 보다 자세한 정보는 SQL Server Connection Strings for ASP.NET Web Applications을 참고하시기 바랍니다.

먼저 예제 프로젝트에서 다음 그림에 보이는 응용 프로그램의 루트에 위치한 Web.config 파일을 엽니다. (Views 폴더에 있는 Web.config 파일이 아니라는 점의 유의하시기 바랍니다.)

그리고 <connectionStrings> 요소를 찾습니다:

Web.config 파일의 <connectionStrings> 요소에 다음과 같은 연결 문자열을 추가합니다.

<add name="MovieDBContext"
     connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True"
     providerName="System.Data.SqlClient"
/> 

다음은 새로운 연결 문자열이 추가된 Web.config 파일의 해당 부분을 보여주고 있습니다:

<connectionStrings>
  <add name="DefaultConnection" 
       connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-MvcMovie-20130603030321.mdf;Initial Catalog=aspnet-MvcMovie-20130603030321;Integrated Security=True" 
       providerName="System.Data.SqlClient" />
  <add name="MovieDBContext"
       connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" 
       providerName="System.Data.SqlClient" />
</connectionStrings>

이 두 가지 연결 문자열들은 서로 매우 비슷합니다. 우선 첫 번째 연결 문자열의 이름은 DefaultConnection으로 응용 프로그램에 접근할 수 있는 사용자를 제어하기 위한 멤버십 데이터베이스에 사용됩니다. 그리고 직접 추가한 두 번째 연결 문자열은 App_Data 폴더에 위치하는 Movie.mdf 라는 이름의 LocalDB 데이터베이스를 지정하고 있습니다. 본 자습서에서는 멤버십 데이터베이스에 관해서는 살펴보지 않을 것입니다. 멤버십, 인증, 보안 등에 관한 보다 자세한 정보들은 Create an ASP.NET MVC app with auth and SQL DB and deploy to Azure App Service 자습서를 참고하시기 바랍니다.

이 연결 문자열의 이름은 반드시 DbContext 클래스의 이름과 일치해야만 합니다.

using System;
using System.Data.Entity;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }

    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }
}

그러나 반드시 MovieDBContext 연결 문자열을 추가해야만 하는 것은 아닙니다. 만약 연결 문자열을 지정하지 않으면, Entity Framework가 사용자 디렉터리에 DbContext 클래스의 정규화된 이름(본 자습서의 경우 MvcMovie.Models.MovieDBContext)으로 LocalDB 데이터베이스를 생성합니다. 데이터베이스의 이름은 .MDF 로 끝나기만 하면 어떤 이름이든 원하는 대로 지정할 수 있습니다. 가령 MyFilms.mdf 같은 이름을 지정해도 전혀 무방합니다.

다음 단계에서는 영화 데이터를 출력하고 사용자가 영화 정보를 등록할 수 있게 해주는 MoviesController 클래스를 작성해보겠습니다.

이 기사는 2013년 10월 17일에 최초 작성되었습니다.