안녕하세요 삽잡이입니다.
이번시간에도 어김없이 어셈블리에 대해서 알아보려고합니다.
그 중에서 바로 핵심중 하나인 '구성 파일' 에 대한 개념을 알아보겠습니다.
실행파일을 전혀 변경시키지않고 불과 몇줄만의 코드 수정으로도
내가 하고자하는 프로그램의 성질을 완전히 바꿀 수 있다면 얼마나 편리할까요?
이 편리함을 바로 '구성 파일'이 제공해주는 것입니다.
코드 몇줄만으로도 똑같은 라이브러리인데, 버전이 다를 경우
한 곳에선 이전 버전, 또 다른 곳에서는 최신 버전을 사용하게 만들 수 있다 이겁니다.
즉, 구성 파일은 실행 파일이 실행되기 직전에
자기 자신과 관련성이 있는 실행 파일의 구성이 있는 지를 확인해주는 파일입니다.
어셈블리를 proving 할 때에
다섯가지의 강력한 이름을 비교하여 구분한다고 했습니다.
*proving 이란,
이전에도 언급드렸지만, .NET 런타임이 어셈블리의 위치를 찾기 위한 방법이라고 했습니다.
자...
아무튼 본격적으로 구성 파일에 대해서 알아보겠습니다.
구성 파일은 Configration을 한국어로 표현한 것입니다.
만약, 내 프로그램의 실행 파일이 App.exe라면,
Config 파일은 무조건 App.exe.config로 만들어지게 됩니다.
즉, App.exe는 파일의 이름일 뿐이고 확장자가 config라는 것입니다.
이 구성 파일은 설정 파일이라고도합니다.
즉, 실행 파일을 건드리지않고,
실행 파일의 동작을 아주 쉽고 편하게 변경할 수 있는 파일입니다.
또한, XML 언어로 되어 있습니다.
참고로, 컴파일 시 작성을 해도 되고,
텍스트파일이기에 메모장에서 작성해도 상관없습니다.
XML을 왜 사용했을까요?
해당 언어는 뭐하는지 다 보이고 읽혀집니다.
따라서 선언 언어로써 사용되는 것입니다.
선언 언어란,
미리 언어를 만들어 놓게 되면,
모든 것들이 동작하는게 사용자 눈에 보인다 이겁니다.
참고로 이는, UI를 정의할 때 많이 사용하게 됩니다.
뭐... 이 config 파일은 텍스트 파일이기에
메모장에서 작성해도 확장자만 지켜준다면 상관 없습니다.
아무튼, config 파일을 사용해서
서로 다른 공유 어셈블리를 사용할 수 있게 됩니다.
정리하자면,
config 파일은 MS에서 만든 XML 표준을 따르는 mark up언어를 사용하는 것입니다.
*Mark Up 언어란,
Mark Up을 정의할 수 있는 언어로써, 내용물에 '표식'을 다는 언어입니다.
결론은, App.exe라는 실행 파일을 만들어 쓴다면,
실행 프로그램의 확장자 뒤에 config라는 확장자를 가진 파일을 만들어낸다 이겁니다.
만약, 내가 직접 실행파일이 있는 곳에 config 파일을 만들고 싶다면
메모장을 통해 쉽게 직접 만들 수 있습니다.
해당 파일에 들어가게 되면 여러가지 속성들이 보이게 됩니다.
그 중에서도 맨 아래쪽에 가보면,
잘 보시면 파일, 어셈블리 버전을 따로 따로 같이 보관합니다.
파일은 물리적으로 보관하고,
어셈블리는 여러개의 파일을 묶어 유지할 수 있기 때문에 따로 보관한 것입니다.
라이브러리를 업데이트하고,
property 의 속성에서 버전을 변경시던지
솔루션의 속성에 있는 어셈블리 정보에서 정보를 변경하게 된다면
똑같은 라이브러리지만 버전이 다른 라이브러리를 설치할 수 있게 되는 것입니다.
즉, 버전이 변경되어 다시 GAC에 설치를 하게 되면,
똑같은 파일일지라도 GAC에서 설치할 수 있다는 것이지요.
간단하게 텍스트 파일을 사용해 config 파일 하나를 만들어 내용을 적는다면,
config 파일이 만들어지는 것입니다.
여러 버전의 라이브러리를 만들어 놓고 실행 프로그램을 수정할 필요 없이
구 버전에서 업데이트 된 라이브러리를 사용하고 싶다는 것을 명시해주면 됩니다.
프로그램을 업그레이드 시킬 수 있다는 것이지요.
즉, 프로그램을 건드리지도 않고,
config 파일만을 수정해서 라이브러리를 선택할 수 있게 되는 것입니다.
예를 들어 실행파일이 완벽하게 동일하더라도
config 파일이 없다면 기존 버전을 사용하지만,
config 파일에 버전명을 명시하게 되면 다른 버전의 라이브러리를 사용할 수 있게 되는 것이지요.
이렇게 config 파일을 통해 이런 일을 할 수 있게 됩니다.
즉, 기존의 실행파일이 완벽하게 동일한데
만약, config 파일이 있다면 버전 업된 어셈블리를 실행시켜줄 수 있다는 것입니다.
지금까지 알아본 구성파일이란 특정 응용프로그램에만 적용된다는 것입니다.
구성파일은 실행파일이 실행되기 직전에
자기 자신과 관련성 있는 실행파일의 구성이 있는지 확인합니다.
예를 들어, exe 어셈블리 파일이 실행되기 직전에
해당 exe 어셈블리의 config 파일이 있는지 확인하고,
만약 있다면 그와 같은 내용을 읽어들여 실행파일이 실행된다는 이야기입니다.
그런데 사실 구성파일은 또 한 종류가 더 있습니다.
바로, '머신 구성 파일'입니다.
'machine.config'라는 파일입니다.
exe 파일이 실행될 때 exe의 config만이 실행되는 것이 아니라,
machine.config 파일도 로드를 해본다 이겁니다.
그리고 이 머신 구성 파일은 위치하는 곳이 정해져있습니다.
여기서 머신이란 '로컬 컴퓨터'를 뜻하는 것입니다.
이 머신 수준 내에서 설정값들이 해당 위치에 저장이 되는 것입니다.
그리고 여기서 설정값을 사용자가 바꿀 수도 있지요.
그러니 정리를 해보자면,
우선 exe config 파일을 한번 싹 뒤지고,
그 다음에 머신 config도 뒤진다 이겁니다.
그리고 둘 중 하나라도 반영할 것이 있다면 반영을 하게 되는 것이지요.
만약 두 파일에 모두 있다면 가까운 것을 적용시키게 됩니다.
이번 시간은 여기까지 알아보겠습니다.
이상 삽잡이였습니다!
'삽질의 현장 > - .NET' 카테고리의 다른 글
#073_닷넷(.NET)_.Net Framework 기본 - 동적 어셈블리 로딩 (0) | 2015.11.11 |
---|---|
#072_닷넷(.NET)_.Net Framework 기본 - Type 클래스 & 리플렉션 (0) | 2015.11.11 |
#070_닷넷(.NET)_.Net Framework 기본 - 어셈블리 (공유 어셈블리) (0) | 2015.11.10 |
#069_닷넷(.NET)_.Net Framework 기본 - 어셈블리(assembly) (1) | 2015.11.07 |
#068_닷넷(.NET)_.Net Framework 기본 - Software Component (0) | 2015.11.06 |