PGR21.com
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
Date 2014/10/01 16:21:24
Name 랜덤여신
Subject 거짓말을 일삼는 소프트웨어 버전들
우리 모두는 버전 번호에 익숙합니다. 1.0, 2.0, 3.0, 3.5, 4.0, ... 이런 식으로 점점 커지는 게 버전 번호죠. 그리고 우리는 일반적으로 버전이 높으면 높을수록, 더 좋진 않더라도 더 최신이긴 하다는 것도 알고 있습니다.

하지만 기계가 보기엔 어떨까요.

----

얼마 전에 이런 일이 있었습니다. 어떤 사용자가 '테스트 스튜디오'라는 프로그램을 사용하던 중, 버그를 발견했다고 제보해 왔습니다. 인터넷 익스플로러 11로 업그레이드한 이후, 저 프로그램이 사용자 브라우저를 IE 11로 인식하는 게 아니라 [IE 9.11]로 인식하더라는 겁니다.

왜 이런 일이?

IE의 버전을 확인하기 위해 레지스트리를 열어 보았습니다. 그런데 레지스트리에 따르면, IE 11의 실제 버전은 11.0이 아닙니다. [9.11.9600.17278]이죠. (직접 확인해 보고 싶으신 분들은 직접 HKLM/Software/Microsoft/Internet Explorer 를 살펴 보세요.)



왜 IE는 버전으로 거짓말을 하고 있는가... 간단합니다. 멍청한 개발자들 때문이죠 과거에 짠 코드들 때문이죠.

많이들 보셨을 겁니다. '이 사이트에 접속하려면 IE 7 이상을 써야 합니다.' 같은 문구요. 그런데 유감스럽게도, IE 버전 번호가 두 자리로 증가하리라는 것을 예상하지 못한 과거의 개발자들이, 버전을 확인하는 코드를 짜면서 단순히 [버전 번호의 첫 글자만 확인하도록] 만든 겁니다. 그래서 IE 11 사용자가 그런 사이트에 가면...

[IE 7 이상이 필요합니다. 당신의 브라우저는 IE 1입니다.]

그렇다고 이미 퇴사했을지도 모를 그 사이트 개발자들을 욕해봤자 소용이 없습니다. 그래서 MS는 눈물을 머금고, 실제 버전 번호 앞에 '9.' 를 붙여서 나타내기로 했습니다. [10 대신 9.10로, 11 대신 9.11로] 쓰기 시작한 것이죠. 아마 12가 나오면 9.12가 되겠죠... 그놈의 ['하위 호환성']을 위해서 말입니다.

----

얼마 전에 PGR21에 'IE 11부터는 자기가 IE가 아닌 척 한다'는 글을 올린 적이 있습니다. https://pgr21.com/pb/pb.php?id=freedom&no=53882

하지만, 사실은 다른 브라우저도 자신의 버전에 대해 크고 작은 거짓말을 합니다. 크롬을 예로 들어 볼까요?

[Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36]

1. Mozilla/5.0: '모질라'는 먼 옛날 '넷스케이프'라는 브라우저가 설치고 다니던 시절에 나온 이름입니다. 넷스케이프의 코드 네임이 모질라죠. 90년대에 나온 웹 브라우저들은 살아 남기 위해, 자기가 넷스케이프랑 호환된다는 것을 적극적으로 어필해야 했습니다. 안 그러면 서버에서 거부하는 경우도 있었기 때문이죠. 그래서 오늘날까지 거의 모든 브라우저는 자기가 넷스케이프랑 호환된다는 거짓말을 하고 다닙니다. 이미 넷스케이프는 망하고 없는데도!
2. Windows NT 6.3: 윈도 8.1은 엄밀히 따지면 '윈도 NT'가 아니죠. MS는 이미 윈도 2000 시절부터 NT라는 이름을 버렸습니다. 또한 윈도 '8.1'인데 윈도 NT '6.3'이라고 되어 있죠. 참고로 윈도 '7'은 윈도 NT '6.1'입니다. 여기도 위의 IE 9.11 이슈랑 비슷한 문제가 있는 겁니다.
3. like Gecko: '게코' 역시 파이어폭스가 사용하는 엔진 이름입니다. 크롬은 파이어폭스보다 후발 주자이기 때문에, 자기가 파이어폭스랑 호환된다고 우길 필요가 있었습니다. 1번과 같은 이유죠.
4. Safari: 사파리! 그렇습니다. 애플의 브라우저인 사파리입니다. 비록 크롬과 사파리가 동일한 엔진을 쓰고 있긴 하나, 엄연히 다른 브라우저입니다. 그렇지만 이 역시... 후발 주자였던 크롬이 사파리의 이름 값을 빌리기 위해 넣은 거죠.



다른 브라우저도 사정은 비슷합니다. '오페라'라는 브라우저는 12.17 버전까지도 자기가 9.8 버전이라고 주장했습니다. 이 역시 버전 번호가 두 글자로 늘어나면서 생기는 문제점들을 방지하기 위한 것이었죠.

파이어폭스는 Gecko/20100101 라는 엔진 버전 번호를 쓰고 있는데, 그냥 임의로 2010년 1월 1일이라고 정한 겁니다.

----

이러한 버전 카오스는 상당히 심각한 문제를 일으킬 수도 있습니다.

'아파치'라는 유명한 웹 서버가 있습니다. 이 웹 서버를 최적화하기 위한 온갖 팁이 개발자들 사이에서 돌아다니는데, 그 중 하나는 사용자의 IE 웹 브라우저가 최신 버전일 때만 최신 기술(Keep-Alive)을 사용하여 빠른 속도로 동작하고, IE 구 버전을 쓰고 있다면 구식 기술을 쓰라는 것이었습니다. 그런데 사용자의 IE 버전을 감지하는 방법이 하필 앞서 말한 '버전 번호의 첫 글자만 확인하기'였던 것입니다.

BrowserMatch ".*MSIE [1-5].*"  
nokeepalive ssl-unclean-shutdown  
downgrade-1.0 force-response-1.0

덕분에 IE 10이랑 IE 11이 IE 구 버전으로 인식되었고, 느린 속도로 동작하게 된 것이죠... 웹 사이트 운영자들 사이에서 저 팁이 완전히 사라질 때까지는 완벽하게 해결하는 게 불가능한 문제죠.

또한, 버전 번호가 길어지는 것 자체가 성능상 문제이기도 합니다. 위에서 보이듯, 크롬의 버전 번호는 이미 상당히 깁니다. 요즘처럼 몇 밀리초 단위로 로딩 속도에 목숨 거는 시대에는 수십 바이트를 처리하는 속도조차 아까워질 수 있습니다. 그래서 요즘 차세대 웹 기술로 밀고 있는 HTTP/2.0에서는, 이러한 버전 번호를 압축해서 보내거나, 요청이 반복될 경우 아예 보내지 않고 기존 것을 재활용하는 기술이 들어가기도 했습니다.

----

일견 단순해 보이는 버전 번호조차, 부주의한 개발자들에 의해 온갖 문제를 발생시키곤 합니다. 이것은 '버전'이라는 게 기본적으로 호환성 이슈이고(호환성은 참 어렵죠!), 또한 미래를 관리하려는 노력이기 때문이죠. 소프트웨어라는 것이 앞으로 어디로 튀어 나갈지 개발자 자신도 잘 예측하기 어렵기 때문에, 버전을 일관되게 정하고 관리하는 게 어렵습니다. 결국 어느 정도는 현실에 타협하며 살아야겠죠!

ps: 만일 인류가 10진법 대신 12진법이나 14진법을 썼다면 문제가 좀 덜 발생했겠죠? 하지만 8진법을 쓰게 된다면...

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
14/10/01 16:24
수정 아이콘
재밌는 글 잘 읽고 있습니다~
14/10/01 16:24
수정 아이콘
오늘도 선추천후 읽습니다..

요즘 자게에 글 보는 재미가 쏙쏙...
설탕가루인형형
14/10/01 16:26
수정 아이콘
어제 집에 가서 클릭커히어로즈를 할라고 하는데 버전이 낮아서 안된다고 하던데 이거 때문이라고 하기엔 너무 유명한(!) 게임 같고...
그냥 크롬으로 하고 있는 중입니다.
트릴비
14/10/01 16:30
수정 아이콘
얼마전부터 이쪽 분야 글 올려주시는거 재미있게 읽고 있습니다
자주자주 올려주세요 크크
아스트랄
14/10/01 16:36
수정 아이콘
부주의한 개발자라니... 억울합니다.
날고 긴다는 sun도 Date 와 Calendar 설계를 잘 못해서 그렇게 욕을 먹는데요.

그냥 호환성은 어려운겁니다. 미래를 예측하는 것도 힘들고요.
절대 개발자 탓이 아닙니다!! 크크크크

- 지나가던 뜨끔한 개발자.
OnlyJustForYou
14/10/01 16:38
수정 아이콘
이야 재밌게 읽었습니다. 윈도우 8.1이 6.3이라는 걸 오늘 유게에선가 보고 그런가보다 했는데 이런 이유가 있는 거였군요.

그런데 읽고 추천하려고 눌렀는데 왜 추천이 안 될까요 ㅜㅜ
랜덤여신
14/10/01 16:49
수정 아이콘
네. 윈도 비스타가 6.0이었는데, 함부로 메이저 버전을 올렸다가 무슨 호환성 문제가 발생할지 모르니 버전 번호를 올리는 데 소극적이 되는 것이죠. 그래서 윈도 7, 윈도 8, 윈도 8.1을 거치면서 마이너 버전만 1씩 쪼잔하게 올렸습니다.

심지어 윈도 8.1은 기묘한 기술을 도입했는데, 앱 개발자가 윈도 8.1에 맞춰 개발했다고 명시적으로 앱 내부에 적어두지 않는 이상(이를 '매니페스트'라고 합니다), 앱에 제공되는 윈도 버전은 '윈도 8.1'이 아니라 무조건 '윈도 8'이 됩니다. 즉, 앞으로 윈도 10이 나오든 윈도 11이 나오든, 예전에 개발된 소프트웨어들은 자기가 윈도 8에서 실행되는 줄 알게 된다는 것입니다. 호환성을 위해서죠. 이쯤 되면 사실상 버전 번호가 의미가 없어진 상태라고 볼 수 있죠.
MagnaDea
14/10/01 17:01
수정 아이콘
호환성 문제 때문은 아니었을겁니다. 그랬다면 비스타도 5.2로 할당되었겠죠.(XP 다음 버전이니)
MS 내부에서 윈도우는 커널이 대대적으로 바뀌지 않는 한 메이저 버전을 바꾸지 않는 걸을 기조로 삼고 있고, 그 일관성에 맞추어 버전을 할당하고 있습니다. 자세한 내용은 아래 리플로 달았습니다.
MagnaDea
14/10/01 16:55
수정 아이콘
윈도우즈 버전은 그냥 내부 일관성 때문으로 알고 있습니다. Windows 2000은 NT 4.0 다음에 만들어진 아이이고, 2000년을 기념하기 위해 네이밍만 바꿨을 뿐, 내부버전은 순서대로 나갔기 때문에 NT 5.0이라는 버전이 할당되었습니다. NT라는 이름이 버려지긴 했지만, NT 커널이 Windows Server를 위한 커널이었고, NT 4.0이 Windows 3.1 Network Edition에서 발전된 버전이라는 점에서, 이 버전할당은 일견 일관성 있다고 볼 수 있습니다.

헌데, Windows 2000(NT 5.0)까지는, 윈도우는 서버용 NT 커널과 클라이언트용 윈도우 커널이 분리되어 있었습니다. 하지만 윈도우 커널이 너무 지저분했기 때문에, 마지막인 Windows Me 이후 NT커널을 이용하여 서버/클라이언트 버전을 모두 만들기로 결정합니다.

이후 NT 5.0 커널을 내부적으로 약간 개선하고 클라이언트 호환성을 추가한 NT 5.1로 Windows XP를 만들고, 이를 추가적으로 개선하여 NT 5.2로 Windows 2003을 발표합니다. 이 성공을 바탕으로, MS는 윈도우 커널을 완전히 정리하여, 제대로 한번 만들어 보겠다는 야심찬 계획을 품습니다.

하지만 이때 웜 바이러스 관련 대란이 터지고, 이거 수습하는데 시간이 너무 오래걸리는 바람에 새로운 커널은 제대로 마무리 되지 못한채 시장에 나옵니다. 이게 비운의 커널인 NT 6.0(Window Vista, Windows Server 2008)입니다.

비스타의 실패 이후, NT 6.0 커널을 좀 발전시켜, 최초에 만들고 싶었던 제대로 된 커널을 만들어 시장에 내놓는데 사실상 이 버전이 NT 7.0 되지 않을까 생각했지만 MS는 6.0에서 그렇게 많은 변화가 생겨났다고 생각하지는 않았는지 이게 NT 6.1(Windows 7, Windows Server 2008 R2)이 되었습니다. 해당 커널은 조금 더 개선되어 NT 6.2라는 버전이 할당되고, Windows 8, Windows Server 2012가 됩니다. 이후 Windows 8.1과 Windows Server 2012 R2는 NT 6.3을 할당받게 되었구요.

역사를 보면, 윈도우가 내부적으로 NT 버전명을 유지해 가는 건 별로 문제가 없어보입니다. 대외적으로 크게 홍보해야 하므로 대외 버전은 Window 7이나 8 같이 그때 그때 마케팅 정책에 맞게 바뀌지만, 내부 버전은 큰 변화가 있었을 때 Major Version을 Update하고, 작은 변화가 있었을 때 Minor Version을 Update하며, 내부 버전은 마케팅용 네이밍과 별개로 간다. 가 MS 내부 정책입니다. 이는 Visual Studio 2012의 내부버전이 VS 11라던가 하는 걸로 확인 할 수 있고, 개발 버전 번호를 어떻게 할당할 것인가는 각 개발팀에 일임한 것으로 보입니다. (Visual Studio가 Major Version만으로 Update하는 것에 비해 IE팀이나 하는 OS 팀은 Minor 버전까지 써가면서 차등을 두는 등, 뭐 이건 Unix쪽과 약간 닿아있기도 한 OS팀의 자존심 같은 것으로 보이기도 하지만요. )
랜덤여신
14/10/01 17:04
수정 아이콘
오, 생각해 보니 버전 번호로 major.minor 를 쓰는 것 자체가 MS 제품 중에서 상당히 특이한 일이군요. (물론 내부 버전만 그렇긴 합니다만) 비주얼 스튜디오도 그렇고 오피스도 그렇고 IE도 요즘은 다 메이저만 쓰는군요. 재밌네요.

제가 커널에 대해 잘 모르지만, 소문을 듣자 하니 윈도 8.1도 커널쪽에서 상당한 부분이 바뀌었다고 합니다. 그런데도 메이저 버전을 올리지 않는 걸 보니 버전 올리는 데 소극적이 된 게 아닌가 하는 생각이 든 것이죠. 어차피 마이너 버전만 바뀌면 구별하는 건 문제가 없으니까요. (어찌 보면 다른 제품이랑 비슷하게 되는 거죠. IE가 major.minor 쓰다가 지금은 숫자 하나로만 관리하듯...) 게다가 매니페스트까지 도입했고... 그래서 개인적으로 궁금한 게 윈도 10의 버전 번호를 과연 몇일까 하는 점입니다. 여기서도 6.4를 쓴다면 MS가 진짜로 버전 올리는 데 소극적인 거겠죠.
MagnaDea
14/10/01 17:21
수정 아이콘
5.0에서 6.0으로의 변화는 정말 대대적이긴 했습니다. 바뀐 것만으로 따지자면 사실 6.1 -> 6.2(그니까 제 기준으로는 2008 R2 -> 2012)도 RIO의 도입이라던가, 메모리 할당 알고리즘의 변경 등 상당한 변화가 있었습니다만, 5.0에서 6.0에서의 변화만큼 크지는 않았으니까요. (Windows Vista 부터 지원하는 API들이 생겨나고, UAC인지 뭐시깽인지가 등장하고, 덕분에 Security 관련한 개념이 싸그리 몽창 뒤바뀌고....)
뭔가 개념을 뒤엎는 수준의 기능 추가가 생기지 않고서는, 당분간은 계속 마이너 버전만 업데이트 할 것으로 보입니다. 사실 내부 버전 체크 함수는 삼백년 전부터 0x0501 >= _WIN32_WINNT 같이 비교하도록 권장하고 있어서 버전 때문에 호환성 문제가 생길 것 같지는 않구요.

물론 그 모든 것과 별개로, NT 버전이 3.1부터 시작한 것은 호환성 문제가 맞긴 하지만 말이죠. :P
랜덤여신
14/10/01 17:27
수정 아이콘
아, 그러고 보니 NT 버전도 호환성 맞추려고 버전을 건너 뛰었다는 얘기를 들은 것 같군요. 과연...
MagnaDea
14/10/01 17:30
수정 아이콘
네. NT 3.1이야 말로 호환성을 위해 버전을 건너 뛴 아이죠. NT 커널은 사실상 윈도우랑 전혀 상관 없이 시작한 프로젝트임에도 불구하고, 윈도우와의 호환성을 위해 NT 3.1부터 시작했으니까요.
영원이란
14/10/01 17:22
수정 아이콘
아마 6.4일겁니다. 7.0이 될려면 커널을 대대적으로 갈아엎어야 하는데 (XP -> Vista 의 변화처럼) 윈도우 10에서도 그러한 변화는 안 보이니까요.
14/10/01 17:18
수정 아이콘
http2는 참 묘하더라구요.

개발자나 사용자 입장에서는 그닥 달라지는 게 없겠지만, 브라우저 web / was 서버 개발 및 네트워크 장비 단에서는 대격변이 몰아칠 듯합니다.
랜덤여신
14/10/01 17:28
수정 아이콘
그나마 IPv6보다는 훨씬 부드럽게 받아들여지고 있는 것 같아 다행입니다. IPv6은 대체 언제쯤...
영원이란
14/10/01 17:21
수정 아이콘
윈도우 버전은 호환성 문제가 아니다 라는 리플을 달려고 했는데 이미 다른분이 다셨군요..
MagnaDea
14/10/01 17:26
수정 아이콘
13년동안 윈도우 서버만 다루다가 지금 리눅스 서버 작업을 해야 할 일이 생겨서 잠시 현실 도피 겸 정리 좀 해봤습니다. 흐흐
랜덤여신
14/10/01 17:31
수정 아이콘
저는 전형적인 리눅스 꼰대인데, 예전에 IOCP가 생각보다 무척 위대한 기술인 것을 깨닫고 왜 이런 게 리눅스에는 없는지 안타까웠던 기억이 있습니다.

제 아무리 epoll이라도 기본적으로는 폴링인데, 그보다는 IOCP가 훨씬 엘레강스한 것 같아요. 빌 게이츠 형님이 최고시다...
MagnaDea
14/10/01 17:38
수정 아이콘
안그래요.;;; RIO 관련문서 보시면 아시겠지만, 일단 개념상으로는 IOCP가 되게 엘레강스 해보이는데, 얘가 문제가 좀 있습니다. IOCP가 아시다시피 버퍼를 물고 들어갔다가 IO가 끝났을 때 GQCS에서 튀어나오는 아이인데, 저 물고들어가는 버퍼가 page out되면 안되니까 버퍼에 락을 겁니다. 그리고 튀어나올때 락을 풉니다. 매번 들어가고 나올때 마다요.;;;; 덕분에 IOCP로 서버 짜서 vtune같은거 돌려보면 CPU 대부분이 버퍼 락 비용으로 들어가요. 그래서 MS가 모든 걸 버리고 RIO를 추가했고, 직접 테스트 해 본 결과 IOCP 대비 CPU 비용이 1/3로 줄어드는 기적을 보았습니다. 폴링이 최고시다.....
랜덤여신
14/10/01 17:48
수정 아이콘
헉 크크 페이지 록을 거는군요. 하긴 페이지 아웃되면 곤란하니까 어쩔 수 없는 선택이었겠네요.

RIO는 아직 살펴보지도 못했지만, 그게 그렇게 좋다니 놀랍네요. 제가 편향된 벤치마크를 본 것일 수도 있지만, 트윅 안 한 epoll은 IOCP보다도 약간 성능이 안 좋던데... RIO랑 비교하면 과연...
MagnaDea
14/10/01 17:52
수정 아이콘
그냥 거의 커널 API를 오픈한 수준이예요. Multi Thread 지원도 안해서 손으로 한땀한땀 lock까지 걸어줘야 하는(내가 무슨 이태리 장인도 아닌데!!)...

근데 그만큼 쥐어 짜낼 수 있어서 확실히 성능은 잘 나와요.
14/10/01 17:29
수정 아이콘
공교롭게도 윈도우가 9 건너뛰고 10으로 나온 시점에 이 글이 올라왔네요.
잘 봤습니다.
랜덤여신
14/10/01 17:33
수정 아이콘
사실 저도 윈도 10 나왔다는 소식 듣고 생각이 난 거예요. 하하
패닉상태
14/10/01 18:11
수정 아이콘
나..이과 출신인데..

무슨말인지 모르니 가만있어야겠다..-_-;;
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
공지 [공지]2024년 4월 총선을 앞두고 선거게시판을 오픈합니다 → 오픈완료 [53] jjohny=쿠마 24/03/09 26509 6
공지 [공지] 정치카테고리 운영 규칙을 변경합니다. [허들 적용 완료] [126] 오호 20/12/30 249391 0
공지 자유게시판 글 작성시의 표현 사용에 대해 다시 공지드립니다. [16] empty 19/02/25 325571 8
공지 [필독] 성인 정보를 포함하는 글에 대한 공지입니다 [51] OrBef 16/05/03 448521 28
공지 통합 규정(2019.11.8. 개정) [2] jjohny=쿠마 19/11/08 318686 3
101302 이스라엘이 이란을 또다시 공격했습니다. [86] Garnett215070 24/04/19 5070 4
101301 웹소설 추천 - 이세계 TRPG 마스터 [17] 파고들어라2557 24/04/19 2557 2
101300 문제의 성인 페스티벌에 관하여 [125] 烏鳳8087 24/04/18 8087 52
101299 쿠팡 게섯거라! 네이버 당일배송이 온다 [34] 무딜링호흡머신6177 24/04/18 6177 4
101298 MSI AMD 600 시리즈 메인보드 차세대 CPU 지원 준비 완료 [2] SAS Tony Parker 2600 24/04/18 2600 0
101297 [팁] 피지알에 webp 움짤 파일을 올려보자 [9] VictoryFood2749 24/04/18 2749 8
101296 뉴욕타임스 3.11.일자 기사 번역(보험사로 흘러가는 운전기록) [9] 오후2시4782 24/04/17 4782 5
101295 추천게시판 운영위원 신규모집(~4/30) [3] jjohny=쿠마5075 24/04/17 5075 5
101290 기형적인 아파트 청약제도가 대한민국에 기여한 부분 [80] VictoryFood10554 24/04/16 10554 0
101289 전마협 주관 대회 참석 후기 [19] pecotek5390 24/04/17 5390 4
101288 [역사] 기술 발전이 능사는 아니더라 / 질레트의 역사 [30] Fig.15356 24/04/17 5356 12
101287 7800X3D 46.5 딜 떴습니다 토스페이 [37] SAS Tony Parker 5481 24/04/16 5481 1
101285 마룬 5(Maroon 5) - Sunday Morning 불러보았습니다! [6] Neuromancer2869 24/04/16 2869 1
101284 남들 다가는 일본, 남들 안가는 목적으로 가다. (츠이키 기지 방문)(스압) [46] 한국화약주식회사7478 24/04/16 7478 46
101281 떡볶이는 좋지만 더덕구이는 싫은 사람들을 위하여 [31] Kaestro6851 24/04/15 6851 8
101280 이제 독일에서는 14세 이후 자신의 성별을 마음대로 결정할 수 있습니다. [302] 라이언 덕후19129 24/04/15 19129 2
101278 전기차 1년 타고 난 후 누적 전비 [55] VictoryFood12029 24/04/14 12029 7
101277 '굽시니스트의 본격 한중일세계사 리뷰'를 빙자한 잡담. [38] 14년째도피중8265 24/04/14 8265 8
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로