11-3-2. 자원관리 - 레지스트리(Registry)
까만색 화면 하면 DOS를 떠올리는 독자들이 있을 것이다. 그 시절 우리는 컴퓨터에서 사용하는 프로그램, 시스템 환경설정 등을 하기 위해 Autoexec.bat Config.sys와 같은 파일을 이용했던 것을 기억할 것이다. Windows에서 역시 이러한 파일이 사용되었으며 Win.ini, System.ini 등의 정보파일들도 환경설정과 관련된 파일이다.
윈도우 서버 2000 & 2003에서는 시스템의 환경설정을 위해서 이러한 파일들을 사용하지 않는다. 시스템, 하드웨어, 소프트웨어 등의 모든 구성을 레지스트리(registry)라고 부르는 데이터베이스에 저장하는 방법을 사용하고 있다. 우리가 TCP/IP등록정보를 열어서 시스템의 IP Address를 변경했다거나, 오피스XP라는 새로운 어플리케이션을 추가했다거나, 화면을 1024*768로 변경했다거나 하는 등의 모든 작업을 했을 때 이 결과는 레지스트리에 반영된다. 시스템은 부팅을 할 때 이 레지스트리로부터 설정을 읽어서 화면에 보여주고 제어하는 방식으로 동작하고 있다.
이해를 돕기 위해 다음을 확인해 본다. 레지스트리 편집도구인 regedt32.exe 를 실행창에서 입력해서 레지스트리를 연다.
<그림11-44 레지스트리 편집기 – 값 변경 1>
“HKEY_LOCAL_MACHINE > SOFTWARE > Microsoft > Windows NT > CurrentVersion” 을 순서대로 찾아가 보라<그림11-44>.
레지스트리 편집기에서 왼쪽패널에 보이는 것이 “키(Key)”이고 오른쪽 패널에 보이는 것이 “값(Value)”들이다. 오른쪽 패널에서 몇가지 정보를 찾아볼 수 있는데, 우리에게 익숙한 내용이 많이 보일 것이다. RegisteredOwner 라는 값을 찾아서 더블클릭한다.
<그림11-45 레지스트리 편집기 – 값 변경 2>
<그림11-45>의 예제에서는 ‘wonsuk’이라는 문자열 대신에 ‘Song won suk’을 입력하여 변경하였다. [확인]을 눌러서 변경사항을 저장한다. 그 다음에 바탕화면의 ‘내 컴퓨터’의 등록정보나, 윈도우탐색기를 열고 도움말 메뉴의 “Windows 정보”를 클릭하면 레지스트리를 통해서 바꾼 설정을 확인할 수 있다. 처음 OS를 설치할 때 입력했던 사용자 이름을 직접 레지스트리를 편집함으로써 변경한 것이다.
사소한 것 하나를 확인해 봤는데, 이렇듯 레지스트리는 시스템의 처음부터 끝까지, 결국 모든 내용을 담고 있는 하나의 데이터베이스라고 할 수 있다.
이러한 레지스트리를 잘 관리하는 일은 매우 중요한 일이다. 위의 과정을 그대로 따라해 본 독자라면 조금 까다롭다는 생각이 들 것이다. Windows 라는 이름의 OS는 ‘인터페이스가 무척 쉽다’라는 것이 큰 특징중의 하나인데, 이렇게 원시적으로 일일이 레지스트리를 찾아다니며 모든 작업을 해야만 할까? 라는 의문이 생긴다. 정답은 ‘아니오’이다.
실제로 관리자가 레지스트리 편집기를 띄워서 직접 값을 추가한다든지 변경하는 일은 레지스트리 관리작업에 있어서 아주 일부분에 지나지 않는다. 물론 관리자라면 이것의 사용방법에 대해서는 알고 있어야겠지만 레지스트리를 해부(?)하려는 노력보다는 Windows 시스템에서 하드웨어, 소프트웨어 등의 각종 설정에 대한 흐름을 이해하는 편이 더 나을 것이다.
그렇다면 어떻게 이 레지스트리를 관리하는 것일까? 그것은 바로 우리에게 너무나 익숙한 ‘제어판(Control Panel)’이다. 제어판이라구? 뜻밖의 답이라고 생각될 수 있겠지만, 우리는 제어판을 통해서 시스템에 관련된 거의 대부분의 설정을 할 수 있다는 것을 잊는 경우가 많다.
바탕화면에서 ‘내 컴퓨터’아이콘의 등록정보를 열면 ‘시스템 등록정보’가 뜨게 되는데 이것은 사실 제어판에 있는 하나의 설정이다. 또, 바탕화면을 마우스 오른쪽 클릭하고 등록정보를 열면 ‘디스플레이 등록정보’가 열리는데 이것 역시 제어판의 일부일 뿐이다. 바탕화면의 다른 것들도 마찬가지이다. 인터넷 익스플로러 아이콘의 등록정보를 열어서 ‘인터넷 옵션’을 수정한다거나, 네트워크 환경의 등록정보를 열어서 프로토콜을 추가하고, IP Address를 변경하는 등의 작업을 한다거나,,, 이 모든 작업들은 결국 제어판을 건드린다는 것을 의미한다.
<그림11-46. 제어판>
제어판에서 무엇이든지 설정을 변경하면 그것은 결국 레지스트리의 데이터베이스를 변경하는 효과를 가지게 된다. 이렇듯 제어판이라고 하는 도구는 레지스트리를 관리하기 위한 간접적인 관리도구인 셈이다. 제어판을 통해서 할 수 없는 작업들은 레지스트리를 직접 편집해야 하는 경우도 있는데, 그때 그때 필요한 경우에 찾아서 작업할 수 있을 것이다.
레지스트리를 건드릴 수 있는 또 다른 방법은 어떤 것이 있을까? 또, 당신이 관리하는 시스템이 한두대가 아니라 많은 수의 시스템의 레지스트리를 관리해야 한다면? 그때 바로 정책(Policy)이 사용될 수 있는데, Active Directory와 연계하여 그룹정책(Group Policy)를 사용하면 효율적으로 도메인의 전체 사용자 및 컴퓨터에 대한 레지스트리를 간접적으로 변경하는 효과를 주기 때문에 유연성 있는 관리방법을 제공한다. 그룹정책에 대해서는 14장에서 자세히 다룬다.
몇대의 PC의 레지스트리를 일관성있게 구성해야 하는 경우라면 템플릿을 활용할 수도 있다. 먼저 한대의 시스템의 레지스트리를 구성한다음, 값을 구성한 Key(폴더와유사)를 마우스 오른쪽 클릭하여 ‘내보내기’를 선택한다. 그러면 레지스트리값이 ‘reg’확장자를 가지는 파일로 추출된다. 이 파일을 구성하고자 하는 다른 PC에서 실행하여 레지스트리값을 변경할 수 있다. |
지금까지 레지스트리가 관리되는 방법에 대해서 이야기했다. 이 레지스트리를 직접 관리하는 경우를 위해 간단한 사용방법에 대해서 알아본다.
레지스트리 편집기는 2가지가 제공된다. Regedit.exe와 Regedt32.exe 가 있는데, regedt32.exe를 권장한다. Regedit.exe는 Windows 9x 에서 사용되는 편집기인데 Windows Server 2003에서도 제공되고 있다. 데이터베이스는 동일하다. 편집기는 이 데이터베이스를 건드리는 도구일 뿐이니까. Regedit.exe는 레지스트리를 Key와 Value, Data등으로 검색이 가능하여 상대적으로 검색기능이 좋은 편이다. 그렇지만 레지스트리의 권한설정이나, 읽기 전용모드가 지원되지 않기 때문에 Regedt32를 사용하는 편이 좋다.
레지스트리 편집기를 실행하면 레지스트리 데이터베이스가 열린다. <그림11-47>와 같은 화면을 얻을 수 있다.
<그림11-47. 레지스트리 편집기>
레지스트리는 계층구조로 되어 있다. 윈도우 탐색기의 구조와 아주 유사하다. 가장 크게 나누면 5개의 서브트리로 구성되어 있는데 각각이 하나의 창을 이루고 있는 것을 알 수 있다. HKEY_LOCAL_MACHINE, HKEY_CLASSES_ROOT, HKEY_CURRENT_CONFIG, HKEY_CURRENT_USER, HKEY_USERS라는 이름을 가진 5개의 서브트리가 있다. 이것을 C: D: 등의 루트폴더로 이해하면 쉽다.
뭐가 이렇게 복잡한가 싶지만 사실 그렇지만은 않다. 구분지어 본다면 HKEY_CURRENT_USER, HKEY_USERS는 시스템에서 로그온 하는 사용자에게 주어지는 설정을 담은 레지스트리이고, 나머지는 로그온하는 사용자와는 상관없이 시스템 자체에 주어지는 설정을 담고 있다. 예를 들어서 우리가 컴퓨터에서 TCP/IP설정을 변경했다면 이것은 로그온 하는 사용자와는 상관없는 시스템 설정이 변한 것이다. 이것들은 HKEY_LOCAL_MACHINE 이라는 서브트리에 저장되는 정보이다.
5개의 서브트리중에서 관리자가 직접 이 레지스트리 편집기를 통해서 작업을 하는 대부분의 경우는 HKEY_LOCAL_MACHINE 서브트리에서 이루어진다. 줄여서 “HKLM”이라고도 부르는 이 서브트리의 이름은 기억을 해 두기 바란다. 다른 서브트리의 경우는 직접 편집기로 편집하는 경우는 극히 드물다.
각 서브트리마다 키(KEY)들이 존재하고, 키 아래에는 서브키들이 있다. 최종적으로 가장 아래에 위치한, 윈도우 탐색기를 예를 들면 파일에 해당하는 값(VALUE)이 오른쪽 패널에서 펼쳐진다. 이 값들은 저마다 고유한 데이터를 가지고 있게 되며 데이터의 형식에 따라서 5가지 데이터 타입으로 구분할 수 있다.
<참고> 레지스트리 값(Value) 데이터 형식 - REG_BINARY (이진값) : 16진수 문자열이며 2개가 하나의 바이트로 처리된다. - REG_DWORD (DWORD 값) : 최대 8자리의 16진수 문자열이 입력된다. - REG_EXPAND_SZ (확장가능한 문자열 값) : 문자열 자체로 처리된다. REG_SZ에 비해서 변수를 포함할 수 있다는 차이가 있다. - REG_MULTI_SZ (다중 문자열 값) : 여러 개의 문자열을 입력할 수 있다. - REG_SZ (문자열 값) : 문자열 자체로 처리된다. * 레지스트리에 값을 추가할 때 위의 다섯가지 형태로 데이터 형식이 정의되는데 형식은 마음대로 지정하는 것은 아니다. 다만 레지스트리에 값을 추가하는 작업을 할 때 형식을 올바르게 지정하도록 유의해야 할 것이다. (영문옆의 괄호안의 표기는 한글 Windows XP의 레지스트리 편집기의 표기를 그대로 인용한 것이다.) |
레지스트리에 특별한 값을 하나 추가하는 작업을 예제로 알아보자. 당신은 Windows Server 2003를 테스트중이다. 시스템을 재시작하는 일을 반복해야 하는데 그때마다 로그온을 하기가 번거로워 자동으로 시스템에 로그온 하는 방법을 찾다 보니, 레지스트리를 직접 수정하면 가능하다는 것을 알게 되었다. HKLM > Software > Microsoft > Windows NT > CurrentVersion > Winlogon 키(KEY) 아래에 ‘AutoAdminLogon’이라는 값(VALUE)을 추가하고 ‘REG_SZ’데이터형식으로 “1”이라는 데이터를 입력하면 된다고 한다. 작업을 해 보자. 같은 방법으로 DefaultPassword라는 값(Value)을 추가하고 'REG_SZ'데이터형식으로 '실제 패스워드'를 데이터로 입력한다.
먼저 레지스트리 편집기를 열고, 값을 추가하고자 하는 키까지 찾아서 이동한다<그림11-48>
<그림11-48. 레지스트리 편집기를 이용한 값 추가 1>
값을 추가하고자 하는 키를 클릭한 상태에서 편집메뉴의 ‘값 추가’를 선택한다.
<그림11-49. 레지스트리 편집기를 이용한 값 추가 2>
‘값 추가’화면에서 ‘값 이름’에는 AutoAdminLogon이라고 입력하였다. 조금이라도 틀리면 원하는 대로 동작하지 않는다. 데이터 형식은 REG_SZ 를 선택했다. 역시 이것도 형식이 다르면 해당 값은 의미가 없다.
<그림11-50. 레지스트리 편집기를 이용한 값 추가 3>
값 이름’을 지정한 후 [확인]을 누르면 ‘문자열 편집기’가 나온다. 문자열에 ‘활성화’를 의미하는 레지스트리 데이터인 ‘1’을 입력하고 [확인]을 눌러서 작업을 마친다.
<그림11-51>을 보면 AutoAdminLogon이라는 값(VALUE)가 추가된 레지스트리를 볼 수 있다.