lecture Home > Professional Secrets

유수석의 MS 기술관련 메모장

   강좌 최초 작성일 : 2007년 03월 26일
   강좌 최종 수정일 : 2007년 03월 27일

   강좌 읽음 수 :

   작성자 : Loner(유 경상)
   편집자 : Taeyo(김 태영)

   강좌 제목 : IE 7.0 Auto Update에 즈음하여..

강좌 전 태오의 잡담>

유수석은 현재 드원 소프트웨어의 수석 컨설턴트로 근무하고 계시며, .NET 아키텍처 및 컨설팅과 관련한 일을 하고 있습니다. 고수들 사이에서는 이미 알려져 있는 유명인이며, 제가 아는 한 김현승(닷넷엑스퍼트)과 더불어 국내 .NET 기술분야의 최고 고수로 평가받고 있는 둘째가라면 서러워 할 인물입니다.
(특이하게도 본인은 서러워하지 않음. 이상하게 주변 사람들이 더 서러워함)

장기간의 회유와 커피접대를 거쳐..

드디어, 절대로!! 다른 사이트나 블로그에 퍼감질을 허용하지 않는 그분의 글을 태오 사이트에서도 함께 하기로 하였습니다. 쉽게 알수 없는 고급스러운 비법 강좌들이 이어진다고 기대해도 좋습니다.

더불어, 이 강좌는 외부 펌 금지 글이기도 합니다
페이지 링크는 가능하나, 내용 자체를 퍼가서 자신의 블로그에 올리는 것은 금지하고 있습니다.
양해해 주시기 바랍니다.

참고로, 유수석님의 블로그는 http://www.simpleisbest.net 입니다
현재 강좌의 원본 글의 링크는 http://www.simpleisbest.net/archive/2007/03/26/1672.aspx 입니다.



머지 않아 Internet Explorer 7.0 (IE7)이 윈도우 업데이트를 통해 자동으로 배포되게 됩니다. IE7은 이전 버전에 비해 호환성을 깨뜨리는 여러 가지 보안적인 기능이나 HTML 처리 방법, 팝업 처리 방법을 포함하고 있기 때문에 웹 어플리케이션에 호환성 문제를 유발할 수도 있음에 주의해야 합니다. 이러한 IE7이 2007년 2사분기에 윈도우 업데이트를 통해 자동 배포되기 시작하면 지금까지의 IE7에 대한 웹 어플리케이션 호환성 문제는 커질 수 있습니다. 그런 의미에서 몇 마디 적어봅니다.

IE7 will be deployed automatically! 

Firefox에 거센 추격을 받던 Internet Explorer(IE)의 새로운 버전인 Internet Explorer 7.0(IE7)이 등장한지는 상당한 시간이 흘렀다. IE7이 정식으로 출시된 것은 지난해 10월(2006년 10월)으로 기억하고 있다. IE7에 대한 사용자들의 반응은 그다지 폭발적이지는 않은 듯 한데 필자 역시 IE7이 IE6에 비해 Wow 라는 감탄사가 나올 정도의 변화는 아닌 것으로 받아 들이고 있으며 주변의 반응도 대략 그러하다. 내심 필자는 IE7에 닷넷 프레임워크 2.0이 포함되길 바랬지만, 또 다른 독점 문제를 유발할 수도 있는 민감한 사항이어서 그런지 Microsoft는 그러한 모험을 하지 않았다.

IE7 Logo

뻘 소리는 그만하고... 오늘의 주제는 IE7의 자동 업데이트가 코 앞으로 다가왔다는 것이다. IE7 자동 업데이트가 무슨 의미를 갖는지 모르는 독자들을 위해 필자가 뻘 소리를 시작해 보겠다.

IE7 Screen

IE7 Compatibility Issue

IE7은 이전 버전에 비해 외형적인 변화 뿐 아니라 HTML을 다루고 처리하는 방법이 변화했으며 더욱 더 강화된 보안을 가지고 있다. 중요한 것은 IE7의 변화사항이 이전의 IE 버전들과 호환성을 깨드리는 요소도 포함하고 있다는 것이다. 다시 말해 IE6 에서 잘 보이고 아무런 문제가 없이 작동하는 웹 페이지들이 IE7에서는 스크립트 오류가 발생하거나 화면이 깨지는 페이지로 둔갑할 수 있다는 것이다.

이 글에서 IE7의 바뀐 사항들이나 호환성 이슈를 구구절절이 설명하지 않겠다(사실 필자도 모든 내용을 속속들이 알고 있지 않으며 문서로 작성할 능력도 없다). Microsoft의 IE7 기술 자료 사이트의 문서들에 IE7에 대한 기술 개요 등의 자료를 찾아 볼 수 있을 것이다. 특히, IE7의 호환성에 대한 상세한 기술은 정성태씨가 작성한 Internet Explorer 7.0 호환성 백서 문서는 훌륭한 IE7에 대한 호환성 지침을 가져다 줄 것이다. 만약 Windows Vista까지 고려한다면 호환성 문제가 더욱 복잡해 지지만 아직 Vista가 널리 사용되지 않는다는 점을 고려하면 조금 시간적인 여유가 있지만 지금부터 준비하지 않는다면 낭패를 볼 수도 있다.

어찌 되었건 IE6를 사용할 때는 멀쩡하게 잘 작동하는 웹 사이트/페이지가 IE7으로 브라우징 할 때는 모양이 깨진다거나 정상적으로 기능이 작동하지 않거나 스크립트 오류가 발생한다던가 심지어는 IE를 다운 시키는 현상이 발생할 수 있다는 것을 인지해야 한다는 것이 중요한 포인트가 되겠다.

IE7 Auto Update

이렇게 호환성 문제를 내포하고 있는 IE7이 아직까지 큰 이슈가 되지는 않고 있다. 그 이유는 IE7이 아직 광범위하게 퍼져있지 않기 때문이다. IE7을 설치하고자 하는 사용자 만이 Microsoft 다운로드 사이트에서 최신 버전의 IE7를 다운로드하고 설치하기 때문이다. IE7을 다운로드 하여 설치한 사용자는 스스로의 선택으로 IE7을 사용하는 것이며 IE7에서 호환성 문제가 유발되더라도 그것을 인지하는 경우가 많다.

하지만 곧 이야기가 달라지게 된다. Microsoft가 2006년 6월에 게시한 "Internet Explorer 7 is being delivered through Automatic Updates" 라는 자료에 의하면 보다 안전한 인터넷 액세스와 최신 기술(?)을 사용하는 IE7을 윈도우 업데이트(Windows Update)의 자동 업데이트를 통해 배포할 것이며 이 업데이트는 높은 우선 순위를 가지게 될 것이라는 얘기이다. 쉽게 말해서 자동으로 다운로드 되고 업데이트 될 것이라는 얘기가 되겠다.

이 자료에는 구체적으로 왜 자동 업데이트를 통해 IE7을 배포하려고 하는 가에 대해 간략히 설명하고 있을 뿐이지만, 인터넷 상에서 갈 수록 보안 위험이 커지는 상황에서 사용자들이 보다 안전(?)하게 인터넷을 사용할 수 있도록 하기 위함으로 추측할 수 있다. 특히 IE6가 피싱(phishing) 사이트에 대한 대처가 거의 없다 보니 피싱 사이트에 대한 피해가 늘어가기 때문으로 생각할 수도 있다. 피싱 사이트의 위협은 근본적으로 제거할 수 없지만 IE7에서는 피싱 사이트에서 주로 사용하는 기법들을 막기 위한 기능과 피싱 사이트에 대한 데이터 베이스를 조회하는 기능을 보유하고 있다.

독자들이 Microsoft가 의도하는 바에 동의하건 동의하지 않건 필자는 관심이 없다. 현실은 머지 않아 IE7이 윈도우 업데이트를 통해 일반 사용자 들에게 자동으로 배포되기 시작할 것이며 가정이나 PC에 대해 전문 지식이 부족한 일반 사용자들이 IE7을 사용하기 시작할 것이라는 얘기이다. 이미 영문판을 비롯한 서유럽, 아랍의 여러 언어의 IE7은 2006년 11월과 2007년 1월에 자동 업데이트를 시작했다. 그리고 한국, 일본, 중국에 대한 자동 업데이트가 2007년 2사분기로 계획되어 있다. 한국, 일본, 중국이 다른 언어에 비해 자동 업데이트가 느린 이유는 ActiveX와 복잡한 HTML, 방대한 스크립트를 사용하는 국가적인 특색 때문으로 필자는 알고 있다. 어찌 되었건 빠르면 다음달, 운이 좋으면 6월에 IE7은 일반 사용자들에 의해 사용되기 시작할 것이다.

Language Version of IE7 Readiness Dates for distribution of Internet Explorer 7
English 1-Nov-06
German, French, Spanish, Finnish, Brazilian Portuguese, Arabic 15-Nov-06
Italian, Dutch, Russian, Sweden, Danish, Norwegian, Polish, Hebrew 1-Jan-07
Turkish, Portuguese, Czech, Hungarian, ELL 22-Jan-07
Japanese, Korean, Simplified and Traditional Chinese Calendar Year Q2 2007

자동 배포는 일단 설치 프로그램을 자동으로 다운로드 받고 사용자가 업데이트를 승인하면 설치 프로그램이 IE7의 설치 패키지를 추가로 다운로드 받는 방식으로 진행된다. 한가지 위안으로 삼을 수 있는 것은 IE7이 자동 업데이트를 통해 설치되면 설치 여부를 물어 본다는 것이다. (아놔... 조낸 고맙네... -_-) 따라서 부지 불식간에 IE가 7.0으로 업그레이드 되는 일은 없다. 그리고 IE6와는 달리 IE7은 일단 설치된 후 Uninstall 이 가능하다는 점도 자위(응큼한 생각하지 마시라...)로 삼을 만 하다. 하지만 Uninstall 이 되고 난 후에는 다시 자동 업데이트를 통해 설치 여부를 물어보게 된다.


자동 업데이트 시 설치 여부를 묻는 대화 상자

Preparing IE7

IE7에 대처하는 방법으로 가장 좋은 것은 웹 사이트 혹은 웹 어플리케이션의 컨텐츠를 IE7과 호환되게 수정하는 것이다. 하지만 당분간은 IE6를 사용하는 사용자도 대단히 많을 것이므로 IE6와 IE7에서 모두 잘 작동하도록 수정해야 할 것이다(이런 줴길슨...). 인터넷 상에서 불특정 다수의 사용자에 대해 서비스를 하는 사이트라면 대안이 없다. IE7이 자동 배포되기 전까지 IE7이 자사의 웹 페이지와 호환성 문제를 일으키는지 꼼꼼히 살펴보고 필요하다면 문제를 해결해야 할 것이다.

기업의 인트라넷 내에서 사용되는 웹 어플리케이션 이라면 웹 어플리케이션을 수정하는 것 외에 하나의 옵션이 더 있다. 사용자들로 하여금 IE7을 사용하지 않도록 하는 것이다. 즉, 사내 표준 브라우저로서 IE7 이전 버전을 유지한다는 것이다. 하지만 사내 표준으로 IE6를 유지하려면, IE7이 윈도우 업데이트를 통해 자동으로 배포되는 것을 막을 수 있어야 한다. 앞서 "Internet Explorer 7 is being delivered through Automatic Updates" 문서는 IE7의 자동 배포를 막는 방법을 설명하고 있다.

Blocking Auto Update of IE7

이 방법을 설명하고자 글을 쓴 것인데... 서론이 좀 긴 듯 하다. 생각보다 IE7의 자동 업데이트를 막는 방법은 쉽다. 특정 레지스트리에 값을 기록해 넣기만 하면 된다. 레지스트리 설정은 다음과 같다.

Registry key: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0
Key value name: DoNotAllowIE70

Value Result
Key is not defined 자동설치 허용
0 자동설치 허용
1 자동설치 허용하지 않음

요는 이 레지스트리 설정을 어떻게 사내 사용자들에게 자동으로 배포할 것인가 이다. 사용자들에게 이러한 설정을 regedit.exe를 수행시켜서 수작업으로 수행하도록 할 수는 없지 않은가?

Internet Explorer 7 Blocker Toolkit

IE7의 자동 업데이트를 막기 위한 툴킷으로써 Microsoft가 배포하는 것이 바로 Internet Explorer 7 Blocker Toolkit 이다. 이 툴킷은 간단하게 4개의 파일을 포함하는 Self-extract exe 이다. 포함된 파일 4개는 다음과 같다.

  • IE70Blocker.adm : Active Directory의 Group Policy를 통해 도메인에 참여한 컴퓨터들의 상기 레지스트리 설정을 변경할 수 있는 정책 파일
  • IE70Blocker.cmd : 로컬 컴퓨터 혹은 원격 컴퓨터에 상기 레지스트리 설정을 변경할 수 있는 배치 파일
  • IE70BlockerHelp.htm, IE70BlockerHelp-GPFilteringDialog.jpg : Blocking Toolkit 사용법에 대한 도움말

.ADM 파일은 Active Directory(AD)의 Group Policy Administrative Template 으로서 AD 환경에서 도메인에 조인된 컴퓨터들에 대해 IE7의 자동 업데이트를 막거나 허용을 손쉽게 제어할 수 있다. 이 .ADM 파일이 특별한 작업을 해주는 것이 아니다. 그룹 정책에 의해 앞서 말한 레지스트리 설정이 자동으로 바뀌는 것이므로 근본적인 원리는 같다.

AD 환경을 구축하고 있는 곳이라면 이것을 사용하는 것이 가장 좋은 대안이 될 것이다. 웹 어플리케이션이 아직 IE7에 대한 준비가 안되어 있다면 이를 통해 자동 업데이트를 막아두고 웹 어플리케이션을 IE7에서도 잘 작동하도록 수정한다. 준비가 완료되면 다시 자동 업데이트를 허용하여 IE7을 사용자가 사용할 수 있도록 해주면 되는 것이다. 이 모든 작업이 사용자의 관여 없이 AD에 의해 작동되는 것이다.

AD를 사용함에 있어서 문제가 되곤 하는 것은 많은 기업들이 AD 환경을 사용하면서도 AD를 자유자제로 제어할 사람이 부족하거나 없다는 것이다. 사실 AD 관리자가 없이 AD를 운영하는 곳도 본적이 있다. 대략 난감한 곳이다. 이런 경우 AD의 로그온 스크립트를 사용하는 것도 하나의 방법이 되겠다. 왜냐면 쉬우니까... 로그온 스크립트를 통해 앞서 언급한 레지스트리 설정을 수행하면 IE7의 자동 업데이트를 막거나 허용할 수도 있다.

.CMD 파일은 명령 프롬프트에서 사용할 수 있는 배치 파일로서 앞서 설명한 레지스트리 설정을 바꾸어 주는 기능이다. 이 배치 파일은 REG.exe라는 유틸리티를 써서 레지스트리의 값을 변경하는데 매우 쉬운 배치 파일이므로 한 번 열어 보는 것도 나쁘진 않을 것이다. REG.exe의 특징은 원격 컴퓨터의 레지스트리 값도 변경할 수 있다는 것인데(사실, regedit.exe 도 가능한 기능이다), 이를 위해서는 원격 컴퓨터에 대해 관리자 권한이 있어야만 한다.

3rd Party Tool

Microsoft 외에 IntelliAdmin(http://www.intelliadmin.com) 에서 제공하는 IE 7 BlockingTool 이란 것을 사용할 수도 있다. 이 유틸리티는 IE7의 자동 업데이트를 막거나 허용하는 UI 를 제공하는 툴로써 Free 버전과 Pro 버전이 있다. Free 버전이 무료이고 Pro 버전은 유료이다. Free 버전은 로컬 컴퓨터의 자동 업데이트를 막아주지만 Pro 버전은 원격 컴퓨터의 설정을 바꿀 수 있을 뿐더러 컴퓨터를 찾기 위해 컴퓨터를 브라우징 하는 등의 관리자적인 기능이 포함되어 있다. 다른 도구들이 더 있을지 모르겠다. 귀차니즘에 쩔어 사는 독자가 이정도 도구를 찾아 준 것만으로도 감사히 여기길 바란다. (필자의 싸가지는 암튼 알아줘야 한다... 흐흐흐)

IE7 Blocking Tool
IE7 Blocking Tool의 Free 버전

Custom Solution

IE7의 자동 업데이트를 막거나 허용하는 원리를 확실히 알기 때문에 굳이 남이 만들어 놓은 도구들을 사용할 필요는 없다. 기업의 환경이나 내 입맛에 맞도록 별도의 도구를 작성할 수도 있을 것이다. 첫째로 생각해 볼 수 있는 것은 사이트에 안내 페이지를 만들고 사용자들이 IE7을 설치 하지 말 것을 가이드 하는 것이다. 즉, 자동 설치 여부를 묻는 대화상자가 나타나면 설치하지 말도록 하는...... 음냐.... 뭐 대략 욕을 무지하게 얻어 쳐먹을 각오를 해야 할 것이다. -_-

두 번째로 생각해 볼 수 있는 것은 간단한 exe나 vbscript (.vbs) 혹은 .bat/.cmd 파일 심지어는 .reg 파일을 만들어서 배포하는 것이다. 다운로드 하고 그냥 수행만 하면 IE7의 자동 업데이트를 막을 수 있을 것이다. 물론 이러한 절차를 가이드 하는 웹 페이지가 제공되어야 할 것임은 물론이다. 이 방법 역시 욕 좀 먹을 각오를 해야 할 것이다.

사용자가 부지 불식 간에 IE7의 자동 업데이트를 막아버리려면 AD의 로그온 스크립트나 그룹 정책을 사용하는 것이 좋겠지만, AD를 구축하고 있는 기업은 많지 않다. 이 때문에 죽으나 사나 레지스트리를 건드리는 ActiveX를 만드는 것을 세 번째 방법으로 생각해 볼 수 있겠다. 사용자의 수작업이 전혀 필요 없고 현재 IE7의 자동 업데이트가 허용되어 있는지 검사를 수행할 수도 있으므로 정말로 입맛에 맞는 대로 코드를 작성할 수 있겠다.

ActiveX를 사용하는 방법은 상당히 구미가 당기지만 작성이 어렵다. 다른 런타임 DLL에 대한 의존성을 최소화 하기 위해 ATL(Active Template Library)을 이용하여 ActiveX를 만드는 것이 가장 좋으나 C/C++은 물론이요 ATL에 대해 잘 아는 개발자는 상당히 드물다. 그뿐인가? CAB으로 말아야지 서명해야지... 등등 절라 손이 많이 가는 작업 중 하나이다.

ActiveX는 그다지 권장하고 싶지 않은데... 이렇게 저렇게 ActiveX를 쓰다 보면 점점 ActiveX에 대한 의존성이 높아지기 마련이고 Microsoft가 점점 ActiveX에 태클을 거는 행태를 봐도 그렇다. 게다가 Windows Vista가 사용되는 경우에는 ActiveX가 레지스트리에 값을 쓰기 위해서는 복잡한 "권한 상승"을 수행해야 한다는 문제가 유발 될 수도 있다는 점을 잘 기억해 두자.

Conclusion

IE 7의 자동 업데이트가 2007년 2사 분기로 예정되어 있으므로 IE 7에 대한 호환성 문제를 그 전에 대부분 해결하는 것이 가장 좋다. 인터넷 상에서 불특정 다수를 대상으로 하는 웹 어플리케이션은 반드시 이렇게 해야만 한다. 인트라넷 상의 웹 어플리케이션도 호환성 문제를 해결하는 것이 좋을 것이다. 그렇지 못한 경우, IE 7의 자동 업데이트를 전사적으로 막을 수는 있다.

IE 7의 자동 업데이트를 막기 위해서는 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Setup\7.0 레지스트리 키에 DoNotAllowIE70 값을 1로 설정하면 된다.

이 레지스트리 설정은 Active Directory의 그룹 정책이나 로그온 스크립트를 이용하여 자동으로 수행할 수도 있다. 만약 Active Directory 환경이 갖추어져 있지 않다면 공지 사항 등을 통해 IE 7에 대한 개요, 호환성 문제를 소개하는 웹 페이지를 게시하고 이 웹 페이지에서 상기 레지스트리 설정을 수행해 주는 유틸리티를 다운로드 하여 수행하도록 유도하는 것이 좋다. IE7의 자동 업데이트를 막는 유틸리티는 Microsoft에서 제공하는 배치 파일 혹은 3rd party에서 제공하는 유틸리티를 사용할 수도 있겠지만 매우 간단하므로 회사의 로고 이미지 정도가 표시되는 간단한 프로그램을 제작하는 것이 상사에게 좋은 점수를 따는 길이라 본다.

레지스트리 설정을 수행하는 ActiveX를 제작하는 것도 하나의 방법일 수도 있다. ActiveX를 사용한 방법은 사용자의 수동 작업이 전혀 없다는 장점이 있지만 ActiveX의 제작과 패키징(packaging), 배포의 복잡도가 높고 ActiveX에 의존하는 것은 점차로 ActiveX에 대한 제약을 늘려가는 Microsoft의 행보를 고려했을 때 단점도 많다.


여러분은 IE7에 대한 준비가 되어 있습니까? 텨~텨~텨~

 

강좌 목록으로..