오늘날 PC에서 명맥을 유지하며 살아있는 데스크톱용 운영체제는 역시나 윈도우, 맥, 리눅스 3관왕이다. 다만 이들이 대등한 점유율이 절대 아니며, 셋의 점유율은 공비가 무려 10에 육박하는 등비수열을 이룬다.

맥이야 x86 계열 CPU로 갈아타고 기계의 가격도 내리면서, 옛날에 비해서야 정말 많이 대중화가 되었다. 또한 아이폰/아이패드가 모바일에서 워낙 큰 성공을 거둔 덕분에 맥북/아이맥까지 반사 이익을 보고 있기도 하다. 아이폰/아이패드에서 돌아가는 소프트웨어를 만들려면 결국 그 계열의 PC가 필요하니까 말이다.

그래도 윈도우에 비하면야 맥 사용자는 정말 10% 이내의 소수이다. 맥OS를 작정하고 써 볼 의향이 있는 게 아니라면, 맥 계열 기계는 비슷한 사양의 일반 컴퓨터보다 여전히 비싸며 구입 후에 서비스도 구리고 키보드· 마우스의 일부 동작 방식이 이질적이기 때문에 덥석 권할 게 못 된다. 솔직히 나도 지금의 맥북 살 돈으로 일반 노트북을 샀다면 아마 화면이 두 배 정도 더 큰 걸 살 수 있었지 싶다. 그러나 ‘스잡빠’, ‘앱등이’로 대표되는 굳건한 추종자도 있는 마당에, 이쪽 진영은 결코 없어지지는 않을 것이다.

맥은 소수이지만 인지도라도 있지 리눅스는 그조차도 없다. 리눅스를 서버도 아닌 데스크톱 로컬 환경의 주 운영체제로 쓰는 사람은 가히 소수 중의 소수이다. 작정하고 MS 진영을 반대하고 철저한 copyleft 정신으로 무장한 컴덕후 해커이거나, 잡스를 숭배하는 것처럼 리처드 스톨먼을 숭배하는(최소한 그의 인격이 아니면 그의 이념을) 사람 정도만이 리눅스를 쓰지 않을까 싶다.

물론, 맥이 예전보다 접근성이 개선된 것만큼이나 리눅스도 옛날에 비해서는 초보자가 쓰기 정말 편해지긴 했다. 하지만 그래도 초보자가 쓰기엔 리눅스는 인지도 있는 응용 프로그램이 부족하고, 뭘 세팅하고 바꾸려면 유닉스 명령줄을 다뤄야 하는 등 생소한 면모가 적지 않다.

사용자 삽입 이미지
(연구 목적으로 2010년 무렵에 VM을 만들어서 돌려 본 우분투 리눅스 9.x의 화면이다. 한때 리눅스의 그래픽 셸은 GNOME이냐 KDE냐로 갈라져 혼란스러운 편이었으나, 요즘은 결국 둘 다 지원하는 쪽으로 가는 추세라 한다.)

20년이 넘게 도스와 윈도우에만 길들여지고 10년이 넘게 윈도우 프로그래밍만 해 본 본인의 입장에서 맥 OS에 존재하는 주목할 만한 특징을 간추려 보면 다음과 같다.

가장 먼저, 운영체제의 시스템 메뉴와 응용 프로그램의 메뉴가 한데 완전히 통합되어 있다는 점이 매우 인상적이다.
Windows는 운영체제의 시스템 메뉴에 해당하는 시작 메뉴가 task bar에 있다. 이것은 응용 프로그램의 창에 소속된 메뉴하고는 당연히 완전히 별개이다. CreateWindowEx 함수는 창을 생성할 때 메뉴 핸들도 별개로 받는다.

그러나 맥은 화면 상단에 항상 고정되어 있는 시스템 메뉴에 응용 프로그램의 메뉴가 얹힌 형태로 나타난다. 이런 건 윈도우에서는 OLE 개체 embedding 상태에서나 어렴풋이 볼 수 있는 모습이다.

사용자 삽입 이미지
(제목은 워드패드인데 도움말에 나와 있는 건 그림판. 어?)

응용 프로그램 메뉴는 파일이나 도움말 같은 기본적인 것만 남고, 그 사이엔 개체를 제공하는 프로그램의 메뉴가 뜨는 것 말이다. 요즘은 이런 디자인도 과거 유물로 치부되어 별도의 프로그램 창이 따로 뜨는 형태로 바뀌고 있지만. (MS부터가 자기네들이 만든 표준 메뉴 인터페이스를 구닥다리로 치부하고 안 쓰려 하니 말이다)

맥에서는 시스템 전체를 통틀어 pull-down 메뉴는 하나만 있으며, 한 순간에 현재 활성화되어 있는 프로그램의 메뉴 하나만 볼 수 있다. 문서 창에 메뉴가 따로 달려 있지 않다. 그리고 맥에서 돌아가는 GUI 응용 프로그램이라면 반드시 이런 디자인을 따라야만 한다.

윈도우에서는 대화상자 하나만 달랑 띄우고 따로 메뉴를 만들기는 곤란한 프로그램의 경우, 대화상자의 시스템 메뉴를 customize해서 보통 ‘이동 / 닫기’만 있는 그 메뉴에다가 About이라든가 Always on top 같은 추가 명령을 넣는 경우가 있다. 그러나 맥은 어떤 프로그램에게라도 무조건 기본 메뉴가 주어지니 그런 식의 테크닉이 존재하지 않는다.

맥은 그런 기본적인 인터페이스가 모든 응용 프로그램에서 무조건 동일하기 때문에 윈도우처럼 무슨 오피스 200x 스타일 메뉴나 도구모음줄을 만들어 주는 GUI 툴킷이라는 게 존재하지 않는다. 윈도우에서야 보급 메뉴 대신에 그 자리에다 싸제 메뉴 창을 얹어서 보급 메뉴처럼 동작하게만 만들면 custom UI를 손쉽게 만들 수 있지만, 맥은 그렇게 할 수 없으니 말이다.

비주얼 C++의 MFC 프로젝트 마법사를 보면, GUI 응용 프로그램을 전통적으로 MDI, SDI, 대화상자라는 세 형태로 분류한다. 그런데 맥에서는 어떤 형태의 프로그램도 일단은 가장 범용적인 MDI에서 시작한다고 볼 수 있다. 실제로 문서 창은 하나밖에 생성하지 않는 프로그램이라 할지라도 말이다. ‘<날개셋> 타자연습’을 맥용으로 만든다면, 프로퍼티 페이지의 밖에 존재하는 ‘사용자 로그인’이나 ‘종합 환경설정’ 같은 명령은 응당 메뉴에서 내리는 명령으로 바뀌어야 할 것이다.

또한 맥은 동일 프로그램의 중복 실행에 대한 개념이 Windows와는 다르다. 같은 프로그램은 한 번만 실행되고 그 동일한 프로그램이 여러 문서를 담당한다는 MDI 사고방식이 맥은 더욱 엄격하다. 그래서 맥 OS의 task bar에 해당하는 dock은 프로그램이 실행됐냐 안 됐냐의 여부만 표시되어 있지만, 이 아이디어를 차용한 윈도우 7의 task bar는 프로그램의 중복 실행 개수도 살짝 표시하고 있는 것이다.

이런 디자인 때문에, 맥에서 프로젝트 단위로 문서를 다루는 프로그램은 내부 구조가 많이 복잡해진다. 개발툴이 그런 예 중 하나이다. 비주얼 C++이야 여러 개를 실행해서 제각기 프로젝트를 열면 되지만, xcode는 프로젝트별로 각각의 문서창을 차지하고 있으면서 그 내부에서 또 파일을 편집하는 창을 관리해야 한다.

맥 응용 프로그램은 마지막 문서 창이 닫혀서 문서가 하나도 없는 상태에서 키보드 포커스가 다른 프로그램으로 넘어갈 때 자동으로 종료되는 편이다. 이런 동작 방식은 Windows에서는 볼 수 없던 모습이다.
물론 모든 프로그램이 그러는 건 아니다. 대표적으로 Finder도 파일 표시(윈도우로 치면 탐색기 창 같은) 창이 하나도 없이 포커스가 바뀌더라도 종료되지 않고 언제나 실행되어 있는다. 내장 웹브라우저인 사파리도 마찬가지이다.

키보드로는 Alt+F4에 해당하는 Cmd+Q를 누르면 언제나 프로그램이 종료된다. 단, 윈도우의 Alt+F4는 그냥 창을 닫는다는 보편적인 용도도 포함하는 단축키인 반면, Cmd+Q는 언제 어디서나 해당 응용 프로그램을 완전히 종료시킨다는 의미 차이가 있다.

윈도우 프로그래머라면, 맥에서는 저런 것뿐만이 아니라 응용 프로그램의 파일 구성까지 상상도 못 할 정도로 다르다는 사실에 더욱 놀라게 될 것이다. 단순 실행 파일 말고 GUI 응용 프로그램은 아이콘, 리소스, 구성 파일이 한데 담긴 패키지 형태로 배포된다. 파일 시스템상으로는 디렉터리 구조이지만 운영체제 내부에서는 가상적인 단일 패키지 파일로 취급된다.

맥에서는 그럼 레지스트리가 없으면 응용 프로그램의 설정 저장을 위해 어떤 기법을 쓰는지? 프로그램 추가/제거는 어떻게 하는지? 동일 개발자가 만든 여러 프로그램이 동일 코드를 공유하려면 DLL 같은 건 어느 디렉터리에다 집어넣으면 되는지? 맥은 윈도우 같은 32/64비트 코드 혼용 문제는 없는지?

알고 싶은 게 한두 가지가 아닌데 그런 걸 윈도우 프로그래머의 입장에서 잘 설명해 놓은 인터넷 사이트나 책은 아직까지는 난 못 봤다. 아무래도 둘은 서로 달라도 너무 달라서 두 플랫폼의 사고방식에 모두 완전히 통달한 개발자는 거의 없으리라 예상된다.;;

이렇듯, 그토록 쉽게 다가설 수 없는 이질감에도 불구하고, 맥 OS는 좀 써 보면 윈도우에서는 느낄 수 없는 참을 수 없는 고급스러움, 미적 감각이 느껴지는 건 부인할 수 없다. 맥 같은 녀석이 존재함으로써 IT 세계가 좀 더 다양해지고 MS의 독점을 약간이나마 견제하는 효과가 난 건 인류 전체의 관점에서는 그래도 이익이긴 한 것 같다.

Posted by 사무엘

2012/07/10 08:11 2012/07/10 08:11
, , ,
Response
No Trackback , 10 Comments
RSS :
http://moogi.new21.org/tc/rss/response/705

Trackback URL : http://moogi.new21.org/tc/trackback/705

Comments List

  1. 주의사신 2012/07/10 09:30 # M/D Reply Permalink

    1. MS가 PC 점유율을 이용해 광고 몇 번 해서 맥을 완전히 죽일 수 있지만 그렇게 하지 않는 이유는 그냥 놔 두는 것이 독점 법망을 피하는데 좋기 때문이라고 주장하는 사람도 봤습니다...

    2. Mac같은 경우에는 UNIX가 밑에 있습니다. 다만 폴더 이름도 다 바꾸고 해서 UNIX가 밑에 있음을 알아 차리기 어렵게 되어 있지요.

    그래서 Windows보다는 작업 자동화하기가 더 낫다고 합니다.

    1. 사무엘 2012/07/10 10:33 # M/D Permalink

      1. 예전에 미국에 지금 같은 독점 금지법이 생기기 전엔, 지금의 MS보다 더 크고 더 돈 많고 더 독점 횡포를 부리는 기업도 있었지요. (그 이름도 유명한 록펠러 아저씨의 스탠더드 오일이라든가...)

      2. 그래서 텍스트 파일에서 줄 바꿈 문자 \r 관행도 사실상 없어졌지요. 이제는 맥도 유닉스처럼 \n을 쓰니까요.

      3. 본문에서는 언급을 안 했는데, 맥은 UI 디자인에서 '취소'라는 개념이 윈도우보다 덜한 것 같습니다. 대화상자에서 설정을 바꾼 건 대부분 곧바로 적용되어 효과가 나타나 버리며, 철회가 되지 않는 편이더군요.

      그러고 보니 맥OS에 대해서 글을 쓰면서 정작 맥OS 스크린샷은 한 장도 안 집어넣었습니다. 재부팅하기 귀찮아서 빼먹은 것입니다. =_=

  2. dlunch 2012/07/10 21:17 # M/D Reply Permalink

    1. 프로그램 설정은 홈 폴더의 Library/Preference에 보통 저장합니다.
    2. 프로그램은 App Store 설치, 압축파일을 통하여 /Application이나 ~/Application에 .app를 통째로 복사하여 설치하는 방식, 설치 패키지를 통하여 설치하는 방식이 있습니다.
    3. dll같은 공용 라이브러리는 보통 Framework라는 개념으로 설치됩니다
    4. 32/64bit 문제는 한 바이너리에 32/64bit 코드를 모두 집어넣는 방식으로 해결합니다. Universal binary라고 불릴 겁니다.

    1. 사무엘 2012/07/11 09:44 # M/D Permalink

      오옷, 도움 주셔서 대단히 고맙습니다. ^^
      universal binary는 x86과 파워피씨 공용 포맷인 줄 알았는데 x86 안에서도 32/64비트를 모두 포함할 수 있는 포맷인가 봅니다?

  3. 김진 2012/07/12 22:17 # M/D Reply Permalink

    맥은 써 본 적이 없는데 윗분 말씀을 들어 보니 윈도보다는 유닉스에 가깝지만 또 다르네요. 혹시 리눅스 환경에 관심이 생기시면 beginning linux programming 같은 책을 보시면 기본적인 개념을 잡으실 수 있을 겁니다. 맥쪽에도 이런 책이 있지 않을까 싶네요

    1. 사무엘 2012/07/13 10:10 # M/D Permalink

      그렇습니다. 윈도우보다야 유닉스에 더 가깝긴 하지만 다른 점도 적지 않습니다.
      맥OS가 설치된 디스크 볼륨엔 bin, dev, usr 등의 유닉스 고유 디렉터리도 있지만, 그건 형식에 불과하며 실제로 새로운 파일들은 맥OS의 고유 디렉터리에 주로 설치된다고 그러다군요.

      말씀하신 그 유명한 책은 저도 좀 옛날 에디션의 PDF를 구해서 틈틈이 보고는 있습니다. vi(m) 에디터를 단축키만으로 현란하게 다루고 셸 스크립트를 자유자재로 구사하는 건 제게는 완전 별나라 얘기여서 말이죠.
      자랑은 아닙니다만, 윈도우 플랫폼에서 이 정도로 프로그래밍을 할 줄 알면서(날개셋을 혼자 다 만듦) 유닉스/맥은 이 정도로 무경험인 사람은 흔치 않을 겁니다. ^^ 하지만 결국 자기가 동기 부여를 받고 필요를 느끼는 분야만 공부하다 보면 그렇게 되지 말라는 법도 없는 거겠죠?

  4. tolkien 2012/07/14 23:42 # M/D Reply Permalink

    어쩌다보니 그 세가지 환경을 다 쓰고 있습니다.
    linux는 개발을 주로 쓰고, 가끔 office쪽으로.
    windows는 outlook + office (회사 server가 outlook... + 기본OS)
    mac은 개발, email + office, 가끔 취미.

    각각의 UI는 고유의 철학을 가지고 있고, 그것을 알고 쓰면 그렇게까지 이해못할 것은 아닙니다.
    mac의 답답함이야, BSD나 debian쪽의 엄격함에 비한다면야... 그리고, 그래서인지 간단한 것을 짜는 것은 비교적 쉬운 편이라고 생각합니다. (선택할 것이 많지 않죠.)

    1. 사무엘 2012/07/15 09:09 # M/D Permalink

      오옷, 그렇군요.
      단순히 쓰는 것 이상으로, 그리고 콘솔 프로그램 이상으로
      세 환경에서 모두 운영체제들의 고유 API 기반으로 GUI 애플리케이션을 만들 줄 아는 사람은 얼마나 될까요? (qt 같은 공용 프레임워크를 쓰는 것도 아니고요.)

      PC는 몰라도 모바일 환경을 아이폰과 안드로이드, 윈도우 모바일을 한꺼번에 다룰 줄 아는 개발자는 몸값이 상당히 비쌀 것 같습니다. ^^

  5. Lyn 2012/07/15 22:28 # M/D Reply Permalink

    의외로 모바일은 3개 다 다루는사람이 흔해요. 데스크탑이 거의 없지...(라기보단 사실 맥이나 리눅스용으로 만들일이 없으니 =_=;;;)

    일단 셋다 이전의 OS에서 벗어나서 새로운 툴킷을 가지고 갔는데 이게 다 비슷비슷하고 ...
    셋다 모바일이라는 특성상 OS에서 제공하는게 뻔하고 할수잇는게 별로 없어서 (...) 보통 2개(안드로이드, 아이폰) 은 기본으로 다루고 좀 더 신경쓰는 사람은 윈폰까지 다룬다는

    1. 사무엘 2012/07/15 23:10 # M/D Permalink

      네, 그렇습니다. PC는 여러 플랫폼을 동시에 지원해야 할 일 자체가 모바일보다 드뭅니다.

Leave a comment
« Previous : 1 : ... 1519 : 1520 : 1521 : 1522 : 1523 : 1524 : 1525 : 1526 : 1527 : ... 2131 : Next »

블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/03   »
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Site Stats

Total hits:
2634189
Today:
987
Yesterday:
1754