다음을 통해 공유


동적 속성 소개(Visual Studio)

업데이트: 2007년 11월

참고:

동적 속성에 대한 사용자 인터페이스는 Visual Studio 2005에서 제거되었으나 동적 속성은 여전히 지원됩니다. 이전 버전의 Visual Studio에서 프로젝트를 가져오는 경우 동적 속성 설정은 코드에 보존되어 런타임에 작동합니다. 그러나 프로젝트 디자이너를 대신 사용하여 응용 프로그램 설정을 지정하는 것이 좋습니다. 자세한 내용은 프로젝트 디자이너, 설정 페이지응용 프로그램 설정 관리를 참조하십시오.

동적 속성을 사용하면 응용 프로그램의 일부 또는 모든 속성 값이 응용 프로그램의 컴파일된 코드가 아니라 외부 구성 파일에 저장되도록 구성할 수 있습니다. 응용 프로그램이 배포된 후에 관리자가 시간이 지남에 따라 변경해야 하는 속성 값을 업데이트하여 전체 유지 보수 비용을 줄일 수 있습니다. 예를 들어, 개발하는 과정에서 테스트 데이터베이스를 사용하는 응용 프로그램을 빌드하고 이 프로그램을 배포할 때 상품 데이터베이스로 전환한다고 가정합니다. 속성 값을 응용 프로그램 안에 저장한 경우 배포하기 전에 모든 데이터베이스 설정을 직접 변경한 후 소스 코드를 다시 컴파일해야 합니다. 이 값을 응용 프로그램 외부에 저장한 경우 외부 파일에서 한 번만 변경하면 다음에 응용 프로그램을 실행할 때 새 값을 사용할 수 있습니다.

보안 정보:

구성 파일에 저장된 속성 값은 보안이 유지되지 않습니다. 암호 및 신용 카드 정보와 같은 중요한 데이터는 동적 속성으로 저장하지 마십시오.

.exe 파일로 컴파일되는 모든 응용 프로그램에서 동적 속성을 사용할 수 있습니다. DLL을 컴파일하는 프로젝트에서는 동적 속성을 직접 사용할 수 없지만 .dll을 참조하는 .exe에서는 DLL 속성을 동적으로 설정할 수 있습니다. 이 응용 프로그램의 모든 구성 요소, 폼 또는 컨트롤의 속성을 동적으로 처리할 수 있지만 특히 동적 속성으로 처리하기에 적합한 속성이 있습니다. 대부분의 경우 데이터베이스, 이벤트 로그 또는 성능 카운터와 같이 변경되는 외부 리소스에 연결된 속성을 저장하고 검색합니다. 이러한 속성은 기본적인 동적 속성으로 분류됩니다.

참고:

이 항목의 예제 코드에서는 SqlConnection 개체와 구성 파일이 있다고 전제합니다. 이 두 가지가 없으면 컴파일 오류가 발생합니다.

동적 속성 및 구성 파일

속성을 구성할 수 있도록 설정하면 속성 값이 구성 파일에 쓰여지고 코드가 클래스에 삽입되어 외부 리소스에서 속성 값을 검색해야 한다는 것을 나타냅니다. 구성 파일은 응용 프로그램의 형식에 따라 다양합니다. 웹 기반 응용 프로그램에서는 Web.config 파일을 사용하고 Windows 기반 응용 프로그램에서는 .config 확장명을 가진 유사한 파일이 사용됩니다. 응용 프로그램에서 모든 폼과 구성 요소는 하나의 구성 파일을 사용합니다. 한 응용 프로그램에서 다른 구성 파일로 전환하거나 여러 파일을 사용할 수 없습니다.

구성 파일에서 속성은 XML로 저장됩니다. 예를 들어, 데이터 연결의 ConnectionString 속성이 구성 파일에 저장되어야 한다고 가정합니다. 코드 편집기에서 값이 외부에 저장되는 것을 나타내는 다음과 같은 코드를 볼 수 있습니다.

Me.SqlConnection1.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")
     this.sqlConnection1.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString");
보안 정보:

보안 데이터 연결을 만드는 방법에 대한 자세한 내용은 연결 정보 보호(ADO.NET)을 참조하십시오.

구성 파일에서 이 속성 값은 폼의 코드에 나타나는 키를 사용하여 XML로 저장됩니다.

<configuration>

<appSettings>

<add key="sqlConnection1.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

</appSettings>

</configuration>

구성 파일의 각 값에는 값을 저장하고 검색하는 데 사용되는 키가 할당됩니다. 키의 처음 부분은 값이 생성된 구성 요소를 나타냅니다. 예를 들어, 다음 두 키는 단일 응용 프로그램 내의 서로 다른 두 데이터 연결에 대한 ConnectionString 속성을 나타냅니다.

<configuration>

<appSettings>

<add key="sqlConnection1.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

<add key="sqlConnection2.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

</appSettings>

</configuration>

응용 프로그램에서 속성 값을 동적으로 업데이트하려면 구성 파일을 직접 수정합니다. 그러면 다음에 응용 프로그램이 시작될 때 값이 업데이트됩니다.

구성 파일과 리소스 파일은 둘 다 컴파일된 응용 프로그램 외부에 값을 저장하는 데 사용되며 XML로 정보를 저장한다는 점에서 비슷합니다. 그러나 두 파일의 용도는 전혀 다릅니다. 리소스 파일은 문자열 및 기타 지역화할 수 있는 리소스를 변환하기 위해 저장하는 데 사용되지만 구성 파일(동적 속성의 경우)은 속성 값을 업데이트하는 데 사용됩니다. 리소스 파일의 값은 변환하기 위해 사용되면서 일반적으로 변경되지 않는 반면에 구성 파일의 동적 속성 값은 필요에 따라 변경됩니다. 또한 여러 리소스 파일을 프로젝트에 연결할 수 있지만 하나의 구성 파일만 응용 프로그램에 사용할 수 있습니다. 리소스 파일에 대한 자세한 내용은 지역화를 위한 리소스의 계층적 구성을 참조하십시오.

여러 속성을 동일한 키로 설정

구성 파일에서 여러 속성이 동일한 키-값 쌍을 참조할 수 있습니다. 예를 들어, 클래스의 세 구성 요소가 모두 동일한 데이터베이스에 액세스하는 경우 각 구성 요소의 ConnectionString 속성을 동일한 키-값 쌍으로 저장할 수 있습니다. 이 경우 데이터베이스가 변경되면 설정 파일에서 하나의 값을 업데이트하여 3개의 구성 요소 모두에 변경 내용을 적용할 수 있습니다. 이렇게 하려면 다음과 같이 각 속성을 동일한 키로 설정합니다.

Me.SqlConnection1.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")

Me.SqlConnection2.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")

Me.SqlConnection3.ConnectionString = _
  System.Configuration.ConfigurationManager. _
  AppSettings.Get("SqlConnection1.ConnectionString")
     this.sqlConnection1.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString");

        this.sqlConnection2.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString"); 

        this.sqlConnection3.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString"); 

사용되는 구성 요소는 서로 다르지만 모두 sqlConnection1.ConnectionString의 키를 참조합니다.

여러 속성에 대해 동일한 키를 선택하면 구성 파일에 하나의 엔트리만 만들어집니다. 저장된 초기 값은 해당 키가 지정된 첫 번째 속성의 값입니다.

데이터 형식 및 동적 속성

XML은 모든 데이터를 문자열로 저장합니다. 저장할 속성 값이 문자열이 아닐 경우 코드 편집기에서 속성 값의 데이터 형식을 나타내는 추가 정보를 볼 수 있습니다. 예를 들어, Timer 구성 요소의 IntervalEnabled 속성 값을 동적으로 저장한다고 가정합니다. 구성 파일에서 이 속성은 다음과 같이 저장됩니다.

<appSettings>

<add key=timer1.Interval" value="100" />

<add key=timer1.Enabled" value="True" />

</appSettings>

코드 편집기에서 다음 코드는 검색한 값을 Double 데이터 형식(Visual Basic)으로 변경해야 한다는 것을 나타냅니다.

Me.Timer1.Enabled = (New System.Configuration. _
AppSettingsReader()).GetValue("timer1.Enabled", GetType(Boolean))

Me.Timer1.Interval = (New System.Configuration. _
AppSettingsReader()).GetValue("Timer1.Interval", GetType(Double))
     this.timer1.Enabled = (bool)(new System.Configuration.
          AppSettingsReader().GetValue("timer1.Enabled", typeof(bool)));

        this.timer1.Interval = (System.Double)(new System.Configuration.
          AppSettingsReader().GetValue("timer1.Interval", typeof(System.Double)));
참고:

프로그래밍 모델에는 약간 다른 두 개의 타이머, 즉 Windows Forms을 위한 타이머와 서버 기반 응용 프로그램을 위한 타이머가 있습니다. 이 예제에서는 서버 기반 타이머를 사용합니다. 사용 가능한 두 타이머에 대한 자세한 내용은 서버 기반 타이머 소개를 참조하십시오.

동적 속성의 성능 및 보안 관련 사항

동적 속성을 사용하려면 다음 두 가지 사항을 고려해야 합니다. 첫째, 동적 속성 저장 및 검색이 응용 프로그램의 성능에 영향을 줄 수 있습니다. 컴파일된 응용 프로그램에서 속성 값을 검색하는 속도는 구성 파일에서 속성 값을 검색하는 것보다 약간 빠릅니다. 응용 프로그램에서 구성 파일 값에 처음 액세스하는 경우 파일을 읽을 때 성능에 약간의 영향을 줍니다. 이러한 영향은 매우 작지만 무시해서는 안 됩니다. 그러나 계속해서 해당 속성이나 다른 속성을 검색하면 해시 테이블에서 값을 읽는 것과 비슷하게 성능에 미치는 영향은 점차 줄어듭니다.

둘째, 사용자 ID 및 암호와 같은 속성 값을 외부 파일에 저장하는 경우 이 파일에 포함된 값과 파일에 액세스할 수 있는 사람을 제어할 수 있습니다. 이를 위한 한 가지 방법은 Windows ACL(액세스 제어 목록)을 사용하여 파일의 보안을 유지하는 것입니다. 액세스 제어 목록은 여러 사용자가 특정 파일이나 디렉터리에 대해 수행할 수 있는 작업을 지정합니다. 또한 웹 기반 응용 프로그램을 만드는 경우 Windows, IIS(인터넷 정보 서비스) 및 SQL Server에서 제공하는 통합된 보안 옵션을 활용할 수 있습니다. 이 모델에서는 데이터베이스 리소스에 액세스하기 위해 로컬 네트워크에 대한 사용자의 인증 자격 증명도 사용되며, 연결 문자열에는 명시적인 사용자 이름이나 암호를 사용하지 않습니다.

보안에 대한 자세한 내용은 Windows 설명서나 다음 페이지를 참조하십시오.

참고 항목

기타 리소스

동적 속성을 사용하여 응용 프로그램 구성