소스 제어에서 사용 중인 웹 사이트 파일

Visual Studio 2010

업데이트: 2007년 11월

웹 사이트에서 사용하는 일부 파일은 소스 코드 제어로 작업할 때 특별한 주의가 필요합니다.

Web.config 파일은 응용 프로그램 차원의 구성 설정이 저장되는 중앙 위치이므로 개별 페이지에 비해 여러 개발자가 동시에 체크 아웃할 가능성이 큽니다. 여러 개발자가 동일한 설정을 동시에 변경하지 않는다면 체크 인 프로세스 중에 소스 제어 시스템의 병합 기능을 사용하여 변경 내용을 통합할 수 있습니다.

Web.config 파일을 직접 열어 편집할 수 있습니다. 이런 경우에는 먼저 파일을 명시적으로 체크 아웃하거나, ASP.NET 페이지와 마찬가지로 파일을 편집할 때 암시적 체크 아웃을 사용할 수 있습니다. 또한 Visual Web Developer의 다양한 유틸리티를 사용하여 Web.config 파일을 변경합니다. 예를 들어 Visual Web Developer의 참조 추가 대화 상자를 사용하여 클라이언트 프로젝트, 웹 서비스 또는 GAC(전역 어셈블리 캐시)의 어셈블리에 대한 참조를 만들면 새 참조가 Web.config 파일에 저장됩니다. 대부분의 경우 Visual Web Developer에서는 필요에 따라 Web.config 파일을 자동으로 체크 아웃합니다. 예를 들어 Web.config 파일을 체크 아웃하지 않고 웹 응용 프로그램에 새 참조를 추가하는 경우 참조 추가 명령을 선택하면 Web.config 파일이 체크 아웃된 다음 참조가 추가됩니다.

그러나 Web.config 파일에 적용되는 일부 프로세스의 경우 파일을 자동으로 체크 아웃하지 않을 수도 있습니다. 다음은 응용 프로그램 구성을 편집하기 전에 Web.config 파일을 체크 아웃해야 하는 유틸리티 목록입니다.

  • 웹 사이트 관리 도구(웹 사이트 메뉴의 ASP.NET 구성 명령)는 Web.config 파일을 자동으로 체크 아웃하지 않습니다. 먼저 Web.config 파일을 체크 아웃하지 않고 웹 사이트 관리 도구에서 변경 내용을 저장하려고 하면 Web.config 파일이 읽기 전용임을 나타내는 오류가 표시됩니다. 웹 사이트 관리 도구를 사용하기 전에 Web.config 파일을 명시적으로 체크 아웃하면 문제를 해결할 수 있습니다.

  • ASP.NET MMC 스냅인은 Web.config 파일을 자동으로 체크 아웃하지 않으므로 이 파일을 체크 아웃하기 전에 구성 변경 내용을 저장하려고 하면 오류가 표시됩니다.

Web.config 파일의 암호화된 섹션

암호화된 섹션을 사용하여 Web.config 파일을 구성한 경우에는 병합 기능을 더 이상 사용할 수 없습니다. 병합하기 전에 구성 설정의 암호화를 해제해야 합니다.

Web.config 파일의 섹션을 암호화하는 데 대한 자세한 내용은 보호되는 구성을 사용하여 구성 정보 암호화를 참조하십시오.

Global.asax 파일은 Web.config 파일과 마찬가지로 전체 웹 사이트에 적용되는 정보를 저장하고 웹 사이트의 루트에 있습니다. 특히 Global.asax 파일에는 응용 프로그램이나 세션에 대해 발생하는 이벤트의 이벤트 처리 코드가 포함됩니다. 일반적으로 여러 명의 개발자가 Global.asax 파일을 아무 문제 없이 체크 아웃할 수 있으며 체크 인할 때 소스 제어 공급자의 병합 기능을 사용하여 충돌을 해결할 수 있습니다.

리소스 파일(.resx)에는 정보가 XML 형식으로 저장됩니다. 리소스 파일은 개별 페이지에만 해당하는 로컬 파일이거나 웹 응용 프로그램 전체에 해당하는 전역 파일일 수 있습니다. 로컬 페이지 리소스 파일은 연결된 페이지의 이름을 기반으로 하는 이름을 사용하여 App_LocalResources 폴더에 저장됩니다. 예를 들어 Default.aspx 페이지에는 Default.aspx.resx라는 로컬 리소스 파일이 대응됩니다. 전역 리소스 파일은 App_GlobalResources 폴더에 저장됩니다. 이러한 전역 리소스 파일에는 어떤 이름이든 .resx 확장명을 포함하여 할당할 수 있습니다.

로컬 리소스 파일은 페이지를 체크 아웃할 때 자동으로 체크 아웃되지 않습니다. 따라서 해당 리소스 파일은 편집하기 전에 명시적으로 또는 암시적으로 체크 아웃해야 합니다. 전역 리소스 파일도 개발자 간에 경합 가능성이 커질 수 있다는 점을 제외하면 로컬 리소스 파일과 비슷합니다. 전역 리소스 파일을 사용하는 페이지를 체크 아웃하기 전에 소스 제어에서 다른 사람이 전역 리소스 파일을 체크 아웃했는지 확인해야 합니다.

두 리소스 파일 모두 XML 형식이므로 체크 인할 때 발생하는 충돌 문제를 병합을 통해 해결할 수 있습니다.

ASP.NET 멤버 자격, 역할 관리 또는 프로필을 사용하는 경우 이러한 서비스에 대한 응용 프로그램 정보가 데이터베이스에 저장됩니다. 기본적으로 이 데이터베이스는 웹 응용 프로그램에 대해 로컬이고 웹 응용 프로그램의 App_Data 폴더에 데이터베이스 파일로 저장됩니다. 또한 이러한 서비스를 사용하려면 Web.config 파일에 해당 항목이 있어야 합니다. 자세한 내용은 SQL Server용 응용 프로그램 서비스 데이터베이스 만들기 및 구성을 참조하십시오.

웹 사이트가 소스 제어에서 사용 중인 경우 응용 프로그램 데이터를 로컬 데이터베이스에 저장하면 다음과 같은 이유로 인해 문제가 발생할 수 있습니다.

  • 응용 프로그램을 로컬에서 디버깅하는 경우 각 개발자가 데이터베이스 파일을 체크 아웃해야 합니다. 읽기 전용 버전의 데이터베이스 파일로는 응용 프로그램을 디버깅할 수 없습니다. 읽기 전용 데이터베이스 파일을 사용하면 런타임 오류가 발생합니다.

  • 데이터베이스는 소스 제어 리포지토리에 이진 파일로 저장됩니다. 따라서 여러 명의 개발자가 데이터베이스 파일을 체크 아웃한 경우에는 소스 제어 시스템에서 변경 내용을 병합할 수 없습니다. 대신 각 개발자가 체크 인하면 이전 버전을 덮어씁니다.

소스 제어에서 사용 중인 웹 응용 프로그램으로 작업하는 경우, 소스 제어에서 사용되지 않는 공유 데이터베이스 파일을 사용하여 응용 프로그램 서비스 데이터를 저장하는 것이 가장 좋습니다. 예를 들어 Microsoft SQL Server를 실행하는 중앙 서버를 응용 프로그램 데이터에 사용할 수 있습니다. 그러면 모든 개발자는 최신 라이브 데이터로 작업하게 됩니다. 또한 데이터베이스의 백업 기능을 사용하여 응용 프로그램 데이터를 관리할 수도 있습니다. 응용 프로그램 데이터에 사용할 데이터베이스를 선택하는 데 대한 자세한 내용은 SQL Server용 응용 프로그램 서비스 데이터베이스 만들기 및 구성을 참조하십시오.

어셈블리(.dll 파일)를 웹 사이트의 Bin 폴더에 추가한 다음 코드에서 어셈블리를 참조할 수 있습니다. 최신 버전의 어셈블리로 덮어쓰지 않으려면 .dll 파일을 체크 아웃할 필요가 없습니다.

두 명 이상의 개발자가 이진 .dll 파일을 동시에 변경하는 경우 소스 제어 시스템에서 변경 내용을 병합할 수 없습니다. 따라서 파일을 업데이트하고 다시 체크 인하려면 .dll 파일에 대해 다중 체크 아웃을 허용하지 않는 것이 가장 좋습니다. 체크 아웃하는 동안 현재 사용자가 소유한 파일을 다른 사람이 체크 아웃할 수 없도록 옵션을 설정할 수 있습니다.

웹 응용 프로그램으로 작업하는 동안 클라이언트 또는 클래스 라이브러리 프로젝트를 솔루션에 추가하고 라이브러리 프로젝트에서 컴파일 가능한 구성 요소를 만들 수 있습니다. 그런 다음 웹 응용 프로그램에서 프로젝트 간 참조를 만들어 라이브러리 프로젝트의 컴파일된 출력을 참조할 수 있습니다. 예를 들어 클래스 라이브러리 프로젝트를 만드는 경우 이 프로젝트 내에서 유틸리티 클래스 또는 사용자 지정 컨트롤이 포함된 어셈블리를 만든 다음 웹 응용 프로그램에서 이러한 어셈블리를 참조할 수 있습니다.

다른 프로젝트에 대한 참조를 만드는 경우 Visual Web Developer에서는 해당 프로젝트의 컴파일된 출력을 복사합니다(있는 경우). 따라서 다른 프로젝트에서 이 프로젝트에 대한 참조를 만들려면 먼저 프로젝트를 빌드해야 합니다. 클라이언트 프로젝트의 컴파일된 출력은 소스 제어에서 사용되지 않으므로 개발자는 이전 버전의 이진 파일이 삭제되거나 소스 제어에서 사용 중인 버전을 빌드하고 덮어쓰는 문제에 대해 걱정할 필요가 없습니다.

표시: