Microsoft MVP성태의 닷넷 이야기
Windows: 39. IE8 표준 모드 [링크 복사], [링크+제목 복사]
조회: 21626
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 


IE8 표준 모드


1. 호환 모드/표준 모드


웹 표준이라... ^^ IE8의 등장으로, 드디어 고민안할래야 안할 수 없는 상황에 와 버렸습니다. 점유율이 상대적으로 낮았던 다른 웹 브라우저의 표준 지원과는 사뭇 다른 상황이 펼쳐지고 있죠.

미리 말씀드리면, 이번 글은 아래의 2가지 내용을 정리한 것입니다.

Introducing IE=EmulateIE7
; https://docs.microsoft.com/en-us/archive/blogs/ie/introducing-ieemulateie7

Introducing Compatibility View
; https://docs.microsoft.com/en-us/archive/blogs/ie/introducing-compatibility-view

자, 그럼 현실적으로 다가서서 IE8과 웹 표준 과의 관계를 알아보겠습니다.

사실, 간단하지요. IE8은 현재 시점에 인트라넷 사이트에 대해서는 호환 모드를 기본 설정으로 보여주지만, 인터넷 사이트에서 대해서는 표준 모드를 강요하고 있습니다. 무슨 말이냐면, URL 기준으로 볼때 내부망에 있는 서버를 접근하는 경우와 외부망에 있는 서버를 접근하는 경우로 나눈다는 것인데, 그 기준으로 컴퓨터 명이냐 도메인 형식이냐를 보고 결정하는 것입니다. 예를 들어 아래의 주소는 "인트라넷 사이트" 접근입니다.

http://serverName/default.html

하지만, 아래의 경우는 "인터넷 사이트" 접근입니다.

http://www.serverName.co.kr/default.html
http://164.124.101.2/default.html

2가지 접근에 대해 IE8이 표현해주는 방식이 다른데, 아래는 IE8이 인터넷 사이트를 방문한 경우의 주소창 모습입니다.

[그림 1: 인터넷 사이트 방문 - 표준 모드]
ie8_compatibilityview_button_2.PNG

주소 창 우측으로 "찢겨진 문서" 이미지가 보이시죠. 구분이 명확하지는 않은데 위의 상황이 바로 "표준 모드"로 웹 사이트를 렌더링하고 있다는 것을 나타내주는 것입니다. 만약, 이 모드에서 해당 웹 사이트가 정상적으로 보여지지 않는다면 "호환 모드"로 전환할 수가 있는데 "찢겨진 문서" 아이콘을 한번 눌러주면 됩니다.

[그림 2: 인터넷 사이트 방문 - 호환 모드]
ie8_compatibilityview_button_3.PNG

위의 그림을 잘 보시면 "찢겨진 문서(이하, 호환 모드 변경 버튼이라고 부름)" 이미지가 색상이 다소 바뀐 것을 볼 수 있습니다. "호환 모드"로 전환되었다는 것을 알려주는 것이고, IE 탭에도 같이 "Compatibility View"라는 풍선 도움말을 함께 띄워주고 있습니다.

반면에, 인트라넷 사이트를 방문한 경우에는 아래에서 보는 것처럼 아예 "호환 모드 변경 버튼" 자체가 보이지 않게 됩니다.

[그림 3: 인트라넷 사이트 방문 - 호환 모드]
ie8_compatibilityview_button_1.PNG

이렇게 안 보이는 경우 현재 모드가 어떤 것이 적용되고 있는지 확인하고 싶을 수 있는데 아쉽게도 이 부분은 명시적으로 제공되고 있지는 않습니다. 대신에 "F12" 키를 눌러서 나오는 "Developer Tools"에서 아래와 같이 "Browser Mode IE8 Compat View" 메뉴가 어떤 것으로 선택되었는지를 보고 판단할 수는 있습니다. (굳이 방법이 또 하나 있다면, "Page" 메뉴의 "Compatibility View" 활성 여부가 있긴 합니다.)

[그림 4: IE8 개발자 툴 메뉴로 "Browser Mode" 확인]
ie8_compatibilityview_button_4.PNG




2. Browser Mode 와 Document Mode


Browser Mode와 Document Mode에 대한 설명은 아래의 글을 읽지 마시고, "
http://blogs.msdn.com/b/ie/archive/2010/10/19/testing-sites-with-browser-mode-vs-doc-mode.aspx?wa=wsignin1.0" 글을 참고하십시오.


"1. 호환 모드/표준 모드" 에서 설명한 내용은 엄밀히 "Browser Mode"를 말합니다. 즉 웹 브라우저의 내부 렌더링 엔진 개선을 의미하는 것입니다. 달리 설명하면 "호환 모드"는 IE 7 이전의 웹 페이지 렌더링 엔진을 사용해서 보여준다는 것이고, "표준 모드"는 개선된 IE8의 웹 페이지 렌더링 엔진을 사용하겠다는 것입니다. (개인적인 추측입니다. 이에 대한 공식문서는 없습니다.)

그렇다면 "Document Mode"는 무엇일까요? 말 그대로 문서의 HTML이 따르는 서식 유형을 나타냅니다. 문제가 되고 있는 "Quirks" 모드라는 것은 HTML 문서의 내용이 아주 ^^; 자유분방하게 배치되었다는 것을 의미하죠. HTML 태그들이 정상적인 규칙이 없다 보니 "Quirks" 모드에서는 브라우저들마다 각각 구현한 내부 알고리즘으로 다시 문서 태그를 정형화 시켜서 표현해 주게 됩니다. 결과적으로 "Quirks" 모드의 문서들은 제 아무리 웹 표준을 지키는 브라우저라 할지라도 각각의 브라우저마다 다르게 보여질 수밖에 없습니다.

그런 것을 개선하려고 나온 것이 바로 W3C와 IETF에서 정의한 "표준 모드"입니다. 이것은 지금까지 언급했던 IE8의 렌더링과 관련된 "표준 모드"와는 의미가 다릅니다. HTML 페이지마다 가지고 있는 DocType이 이것을 결정하게 되는데, HTML 문서 양식을 정의하는 표준은 꽤나 다양해서 ... 웹 사이트 프로그래머만큼이나 웹 브라우저 제작자들이 불쌍하다는 생각이 들 정도입니다.

[표 1: DocType 종류 - http://en.wikipedia.org/wiki/Quirks_mode 문서 참조]
  • None
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
  • <!DOCTYPE html>
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
  • <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

아마도 더 나오겠지요. ^^;
위에서 None은 DocType이 지정되어 있지 않은 경우를 의미하고, "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">" 이것과 함께 아주 기본적인 양식으로 자유롭게 제작된 HTML 문서임을 나타내므로 대부분의 브라우저들이 "Quirks" 모드로 판단하고 문서 정형화를 나름대로 정해진 알고리즘에 따라 행합니다. (JavaScript로 HTML DOM 모델을 다뤄보면 알겠지만, "View Source"로 보는 문서와 document.body.innerHTML이 다른 것이 바로 정형화 과정의 예입니다.)

최소한 다양한 웹 브라우저에서도 동일한 모습을 보여주고 싶은 웹 사이트라면 "Quirks" 모드가 아닌 이외의 DocType을 따르는 문서를 제작해야 합니다. 쉬운 예로 xhtml 규격은 모든 태그가 열림과 닫힘이 있어야 합니다.(예를 들어, <P></P> 쌍)

Document Mode와 Browser Mode는 그럼 어떤 관계가 있을까요?

예를 들어, 웹 서버에서 test.html이라는 문서를 웹 브라우저가 열은 경우를 가정하면,

  1. [Document Mode] test.html의 DOCTYPE 을 보고 문서 유형을 판단.
  2. [Document Mode] DOCTYPE에 따라 렌더링 할 수 있는 유형으로 정형화(영어로 표현하자면, Canonicalization이나 Normalization 정도가 좋겠군요.)
  3. [Browser Mode] 정형화된 내용에 따라 웹 브라우저가 구현한 렌더링 엔진으로 화면에 표현

이쯤에서 다시 한번 곱씹어보면, IE8이 기본적으로 인터넷 웹 사이트에서 IE8 표준 모드를 적용한다는 것은 렌더링 엔진이 개선되어졌다는 것을 의미합니다.

현재 보여지고 있는 웹 페이지에 대한 Browser Mode와 Document Mode를 알아보는 방법은 역시 "F12"를 통한 "Developer Tools"를 통해서 가능합니다. "[그림 4]"에서 이미 Browser Mode는 확인해 보았고, 아래는 Document Mode를 보여주고 있습니다.

[그림 6: IE8 개발자 툴 메뉴로 Document Mode 확인]
ie8_compatibilityview_button_6.PNG

위에서 보면 "Quirks Mode", "Internet Explorer 7 Standards", "Internet Explorer 8 Standards" 3가지 메뉴가 있는데, 아마도 HTML 원본 파일에 지정된 DocType을 해석하는 엔진도 개선이 된 것이 아닌가 예상해 봅니다. 그로 인해 IE7 표준 모드와 IE 8 표준 모드가 나눠졌겠지요. 어차피 프로그램 코드는 수정되기 마련이니까!




3. 호환 모드와 표준 모드를 명시


문제는!
IE7 까지는 잘 보이던 웹 사이트가 IE8에서 깨져 보이는 웹 사이트는 어떻게 해야 하느냐 입니다. 버전이 다른 IE 웹 브라우저가 동일한 화면을 다르게 보여주는 데에는 2가지 이유가 있을 수 있습니다. Browser Mode의 렌더링 차이이거나, Document Mode 정규화 차이일 것입니다.

만약, 표준을 전혀 고려하지 않은 웹페이지 저작자라면 (즉, Quirks 모드의 웹 페이지) IE8에서도 IE 7과 똑같이 웹 페이지를 다루도록 하고 싶다면 "BrowserMode = IE 8 Compatibility View" / "DocumentMode = Quirks"로 설정하면 됩니다. 반면에 표준에 맞게 (지정된 DocType에 충실하게) 제작된 웹 페이지라면 "BrowserMode = IE 7" / "DocumentMode = Internet Explorer 7 Standards"로 설정하면 되는 것이고.

그런데, 아쉽게도 웹 사이트 측에서는 "Browser Mode"를 조정할 수 있는 권리가 없습니다. IE8은 무조건 인터넷 사이트에 대해서는 Browser Mode를 IE8 표준 모드로 설정하고 보여줍니다. 물론, 클라이언트 측에서는 "Browser Mode"를 자유롭게 제어할 수 있습니다. "호환 모드 선택 버튼"을 이용해서 그때그때 설정하거나 아래와 같은 "Compatibility View Settings" 대화창을 통해서 특정 사이트에 대해서 "호환 모드" 렌더링 엔진을 선택하도록 하거나, 심지어 "모든 공용 사이트"에 대해서 호환 모드를 사용하도록 지정하는 것이 가능합니다.

[그림 7: 호환 모드 설정]
ie8_compatibilityview_button_7.PNG

"Introducing IE=EmulateIE7"문서에 의하면, Document Mode는 웹사이트 측에서 제어할 수 있는 것으로 나옵니다. 기본값은 IE8 표준 모드이지만, "X-UA-Compatible" 속성을 사용해서 IE8로 하여금 Document Mode를 "Internet Explorer 7 Standards"로 설정한다는 것입니다.

---- 방법 1. 웹 페이지마다 메타 태그 지정 ----
<meta http-equiv="X-UA-Compatible" content="IE=7" />

---- 방법 2. 웹 서버에 HTTP 헤더 지정 - 모든 페이지에 영향 ----
X-UA-Compatible: IE=7

"IE=7" 값이 지정되면 Quirks 모드인 문서조차도 "IE7 Standards"로 처리하는 문제가 있어 별도로 "IE=EmulateIE7" 모드가 추가되었습니다.

정리해 보면, IE7로는 잘 보이던 웹 페이지가 IE8로 깨져 보인다면 웹 사이트 입장에서는 "Document Mode"만을 설정하는 범위에서 호환성을 설정해 줄 수 있습니다. "Browser Mode" 변경은 사용자의 명시적인 설정이 요구된다는 것!




4. 웹 표준을 지켜서: 잘 보인다. != 잘 동작한다.


IE8 웹 표준 모드에서 특정 웹 사이트를 정상적으로 "이용했다"고 해서 다른 웹 브라우저에서도 정상적으로 "이용할 수 있다"는 의미가 성립하는 것은 아닙니다. IE8 표준 모드는 단지 "보여주는" 방식이 표준을 지킨다는 것이지 ActiveX 등을 포함한 웹 페이지에서 ActiveX를 동작시키지 않도록 만든다는 것은 아닙니다. 아래에서 보시는 것처럼 IE8 표준 모드에서도 정상적으로 ActiveX 설치가 진행되고 있습니다.

[그림 8: IE8 표준 모드에서의 ActiveX 활성화]
ie8_compatibilityview_button_8.PNG

아시겠지요! ^^




5. IE8 Acid 테스트


IE8이 웹 표준을 지킨다는 말에 새삼 주목을 받고 있는 웹 사이트가 있다면 바로 ^^ Acid 테스트 페이지인데요. IE8이 아직 베타 버전이긴 하지만 Acid 테스트 결과를 한번 볼까요! 우선, Acid2 테스트는 아래의 웹 페이지에서 할 수 있습니다. (IE 7로는 방문하지 마십시오. 민망합니다.)

Acid2 테스트
; http://webstandards.org/files/acid2/test.html

마이크로소프트에서 약속한대로 IE8 베타에서도 Acid2 테스트는 아래와 같이 잘 보이고 있습니다.

[그림 5: IE8 베타에서 본 Acid2 테스트]
ie8_compatibilityview_button_5.PNG

반면, Acid3 테스트 결과는 아직 낮은 수준입니다.

Acid3 테스트
; http://acid3.acidtests.org/

IE7의 경우 12점인데, IE8 베타1 은 21점입니다. 최근 공개된 IE8 RC1은 아직 설치해보진 않았는데, 웹에서 검색해 보니 20 점을 받았다고 나오네요. 어떻게 뒷걸음질을. ^^;

Acid3 test IE8 RC1
; http://geeks.pirillo.com/photo/acid3-test-ie8-rc1




6. 기타...


한국 소프트웨어 진흥원에서 웹 표준 가이드를 무료로 배포하고 있습니다. 비록 2005년 12월 문서이긴 하지만. (소프트웨어 만큼이나 문서 역시 업데이트 관리를 해야 하는 대상이 아닐런지! 매번 새로운 문서를 만들 것이 아니라 이렇게 한번 만들어 놓은 문서에 지속적으로 버전 업데이트를 하면 좋을 텐데... 라는 생각입니다. ^^)

실전 웹 표준 가이드 (한국소프트웨어진흥원)
; http://www.iabf.or.kr/Pds/WalView.asp?board=wal&pg=1&bseq=2242&md=&sf=&ss=

마지막으로! 웹 표준은 IE8 표준모드에서 잘 보인다고 해서 지켜진 것은 아닙니다. 그렇다고 해서 간단한 웹 페이지(또는 재사용되지 않을 웹 페이지) 하나 만들면서 TABLE 태그로 하면 될 것을 굳이 DIV/CSS로 할 필요는 또 없다고 봅니다. 중요한 것은, 여러분들의 상황에 맞게 조율하는 것이 중요합니다. 기술은 기술일 뿐!

(이 글은, Windows 7 빌드 7000에 있는 IE 8 베타를 기준으로 작성된 것입니다. 여담으로, Windows 7 정말 마음에 드네요. ^^)



[이 토픽에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/27/2021]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2009-02-02 09시38분
[Roaming] 결과보고 후에 저도 이 부분에 대해서 좀 알아봤는데, 저 Compatibility view 아이콘이 안생기는 사이트는 왜 그런건지.. 호환모드와 표준모드가 똑같이 보여서 그런건지- 궁금합니다!
[guest]
2009-02-02 01시12분
저도 정확한 정책은 잘 모르겠습니다.
단지, 다음과 같은 2가지 경우에 나타나지 않았습니다.

1. 인트라넷 사이트인 경우.
2. <meta http-equiv="X-UA-Compatible" /> 태그가 있는 경우.

아이콘이 안 생기는 사이트의 소스를 확인해 보시면 X-UA-Compatible 메타 태그가 지정되어 있을 것입니다.
kevin25
2009-02-15 11시06분
[문서 변경] X-UA-Compatible에 관한 내용이 변경되었습니다.
kevin25
2009-02-17 09시16분
Document Mode가 Browser Mode와의 관계가 틀린 것 같습니다.

Just The Facts: Recap of Compatibility View
; https://docs.microsoft.com/en-us/archive/blogs/ie/just-the-facts-recap-of-compatibility-view

위의 글에 보면, "The X-UA-Compatible tag completely overrides Compatibility View settings on the client"라는 말이 나오는데, X-UA-Compatible 옵션이 Document Mode를 결정하고 Compatibility View 설정이 Browser Mode를 결정하기 때문에 결국 Document Mode가 Quirks이면 Browser Mode가 IE 8 표준이라 나와도 별 영향이 없다는 것이겠죠. ... 음... 레이아웃 모드와 렌더링 모드가 서로 같다는 것인데,,, 이에 대해서는 좀 궁금해지는군요. ^^
kevin25

1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
13535정성태1/22/20242430닷넷: 2208. C# - GCHandle 구조체의 메모리 분석
13534정성태1/21/20242249닷넷: 2207. C# - SQL Server DB를 bacpac으로 Export/Import파일 다운로드1
13533정성태1/18/20242462닷넷: 2206. C# - TCP KeepAlive의 서버 측 구현파일 다운로드1
13532정성태1/17/20242353닷넷: 2205. C# - SuperSimpleTcp 사용 시 주의할 점파일 다운로드1
13531정성태1/16/20242246닷넷: 2204. C# - TCP KeepAlive에 새로 추가된 Retry 옵션파일 다운로드1
13530정성태1/15/20242199닷넷: 2203. C# - Python과의 AES 암호화 연동파일 다운로드1
13529정성태1/15/20242058닷넷: 2202. C# - PublishAot의 glibc에 대한 정적 링킹하는 방법
13528정성태1/14/20242183Linux: 68. busybox 컨테이너에서 실행 가능한 C++, Go 프로그램 빌드
13527정성태1/14/20242127오류 유형: 892. Visual Studio - Failed to launch debug adapter. Additional information may be available in the output window.
13526정성태1/14/20242211닷넷: 2201. C# - Facebook 연동 / 사용자 탈퇴 처리 방법
13525정성태1/13/20242162오류 유형: 891. Visual Studio - Web Application을 실행하지 못하는 IISExpress
13524정성태1/12/20242225오류 유형: 890. 한국투자증권 KIS Developers OpenAPI - GW라우팅 중 오류가 발생했습니다.
13523정성태1/12/20242033오류 유형: 889. Visual Studio - error : A project with that name is already opened in the solution.
13522정성태1/11/20242198닷넷: 2200. C# - HttpClient.PostAsJsonAsync 호출 시 "Transfer-Encoding: chunked" 대신 "Content-Length" 헤더 처리
13521정성태1/11/20242263닷넷: 2199. C# - 한국투자증권 KIS Developers OpenAPI의 WebSocket Ping, Pong 처리
13520정성태1/10/20242005오류 유형: 888. C# - Unable to resolve service for type 'Microsoft.Extensions.ObjectPool.ObjectPool`....'
13519정성태1/10/20242096닷넷: 2198. C# - Reflection을 이용한 ClientWebSocket의 Ping 호출파일 다운로드1
13518정성태1/9/20242362닷넷: 2197. C# - ClientWebSocket의 Ping, Pong 처리
13517정성태1/8/20242202스크립트: 63. Python - 공개 패키지를 이용한 위성 이미지 생성 (pystac_client, odc.stac)
13516정성태1/7/20242314닷넷: 2196. IIS - AppPool의 "Disable Overlapped Recycle" 옵션의 부작용
13515정성태1/6/20242590닷넷: 2195. async 메서드 내에서 C# 7의 discard 구문 활용 사례 [1]
13514정성태1/5/20242263개발 환경 구성: 702. IIS - AppPool의 "Disable Overlapped Recycle" 옵션
13513정성태1/5/20242188닷넷: 2194. C# - WebActivatorEx / System.Web의 PreApplicationStartMethod 특성
13512정성태1/4/20242153개발 환경 구성: 701. IIS - w3wp.exe 프로세스의 ASP.NET 런타임을 항상 Warmup 모드로 유지하는 preload Enabled 설정
13511정성태1/4/20242175닷넷: 2193. C# - ASP.NET Web Application + OpenAPI(Swashbuckle) 스펙 제공
13510정성태1/3/20242106닷넷: 2192. C# - 특정 실행 파일이 있는지 확인하는 방법 (Linux)
1  2  3  [4]  5  6  7  8  9  10  11  12  13  14  15  ...