CertNote/ 출퇴근 학습 노트
로드맵
KOEN
리눅스마스터 2급 · 2급리눅스마스터 2급
  • Week 1
    • 1.운영체제와 커널: 리눅스가 하는 일
    • 2.리눅스의 탄생: 유닉스에서 리누스까지
    • 3.자유 소프트웨어와 오픈소스: 라이선스가 정하는 것
    • 4.배포판: 커널과 도구를 하나로 묶어 파는 단위
    • 5.Week 1 종합 복습: 리눅스라는 이름의 정체
  • Week 2
  • Week 3
  • Week 4
  • Week 5
  • Week 6
  • Week 7
  • Week 8
    • 1.X 윈도의 구조와 발전
    • 2.라이브러리와 툴킷 계층
    • 3.윈도 매니저 · 디스플레이 매니저 · 데스크톱 환경
    • 4.X 실행과 원격 화면
    • 5.Week 8 종합 복습: X 윈도 이름표
  • Week 9
  • Week 10
  • Week 11
리눅스마스터 1급 · 1급리눅스마스터 1급
합격 후기

© CertNote · 주간랩스

  • 소개
  • 수정 기록
  • 문의
  • 이용약관
  • 개인정보처리방침
← 리눅스마스터 2급/Week 8/Day 2

기준: 리눅스마스터 2급 출제 기준·오류 제보

리눅스마스터 2급· AssociateWeek 8 · Day 2읽기 약 11분
핵심 정리
  • X 클라이언트는 두 층을 거쳐 X 서버와 대화한다 — 저수준 라이브러리와 그 위의 툴킷.
  • 저수준 라이브러리는 Xlib과 XCB 둘이다. XCB가 X 서버에 더 가까운 저수준이다.
  • 툴킷은 GTK+ · Qt · FLTK · Motif · Tk 가 대표다.
  • GTK+는 C 언어로 만들어져 GNOME이, Qt는 C++로 만들어져 KDE가 쓴다.
  • 짝을 이룬다 — Xlib ↔ XCB(저수준 라이브러리), GTK+ ↔ Qt(툴킷).

Day 2 - 라이브러리와 툴킷 계층

네 개의 층

응용 프로그램·툴킷·저수준 라이브러리·X 서버로 이어지는 X 윈도 계층 구조

  • 아래로 갈수록 X 서버에 가깝고 저수준이다. 이 위아래 관계를 그대로 묻는다.
  • 툴킷 없이 Xlib만으로도 프로그램을 만들 수 있지만, 버튼 하나를 그리는 데도 선을 일일이 그려야 한다.

"확인" 버튼 하나가 화면에 나오기까지

층이 층에서 하는 말맡은 일
응용 프로그램"여기에 '확인' 버튼을 둔다"무엇을 보여 줄지 정한다
툴킷 (GTK+ · Qt)"버튼은 둥근 사각형에 글자, 누르면 색이 바뀐다"위젯의 모양과 동작을 만든다
저수준 라이브러리 (Xlib · XCB)"좌표 (10,20)에 사각형, 그 안에 글자"그리기 지시를 X 프로토콜 메시지로 바꿔 보낸다
X 서버(받은 대로 화면에 그린다)실제 화면 출력과 입력 장치를 맡는다
  • 위 세 층(응용 프로그램·툴킷·저수준 라이브러리)은 모두 X 클라이언트 쪽이다. Xlib과 XCB를 "X 클라이언트 라이브러리" 라고 부르는 이유이며, X 서버의 일부로 오해하면 안 된다.
  • 마우스로 버튼을 누르면 반대 방향으로 올라온다 — X 서버가 이벤트를 보내고, 저수준 라이브러리가 받아, 툴킷이 "버튼이 눌렸다"로 해석해 프로그램에 알린다.
  • 층을 나눈 덕에 아래가 바뀌어도 위는 그대로 쓸 수 있다. GTK+와 Qt는 Wayland에서도 동작하므로, 툴킷으로 만든 프로그램은 X에서도 Wayland에서도 돈다. Xlib을 직접 부르는 옛 프로그램은 어제 본 XWayland가 필요하다.

저수준 라이브러리 — Xlib과 XCB

구분XlibXCB
풀네임X LibraryX protocol C-language Binding
등장전통적, 오래됐다나중에 나온 대체품
계층X 프로토콜을 감싼 라이브러리더 얇다 — X 서버에 더 가깝다
통신동기(synchronous) 중심비동기(asynchronous)
크기무겁다가볍다

"X 서버에 가장 가까운 저수준 X 클라이언트 라이브러리는?" 이라는 문제의 답은 XCB 다. Qt·GTK+·FLTK는 그보다 위층의 툴킷이므로 답이 될 수 없다.

  • XCB는 Xlib을 대체하려고 만든 것이다. 프로토콜에 더 가깝고 지연이 적다.
  • 지금은 Xlib 내부도 XCB 위에서 동작하도록 재구현되어 있다.

동기와 비동기가 무슨 차이인가

   Xlib (동기)                          XCB (비동기)
   요청 1 보냄                           요청 1 보냄
     … 응답 올 때까지 기다림              요청 2 보냄
   응답 1 받음                           요청 3 보냄
   요청 2 보냄                             … 다른 일을 한다
     … 기다림                            응답 1 · 2 · 3 을 필요할 때 받음
   응답 2 받음
  • 위 그림은 창의 크기를 묻는 것처럼 응답이 필요한 요청을 보낼 때의 차이다.
  • X 서버가 네트워크 건너편에 있으면 응답 하나에 시간이 걸린다. 하나씩 기다리는 방식은 요청이 많을수록 느려지고, 한꺼번에 보내 두는 방식은 기다리는 시간을 겹쳐 쓴다. XCB가 "지연이 적다"는 말의 속뜻이다.
  • "더 저수준"은 "더 불편하지만 X 프로토콜에 더 가깝다" 는 뜻이다. XCB는 프로토콜의 메시지를 거의 그대로 함수로 옮겨 놓았고, Xlib은 그 위에 편의 기능을 더 얹었다. 성능이 낮다는 뜻이 아니다.
헷갈리는 표현맞는 답
"X 서버에 가장 가까운", "가장 저수준의" 라이브러리XCB
"전통적인", "가장 오래된" 저수준 라이브러리Xlib
"Xlib을 대체하려고 만든"XCB
"비동기" 방식XCB
"위젯을 제공하는"툴킷 (GTK+ · Qt …) — 둘 다 아니다
  • 옛 X 프로그램 가운데에는 Xlib과 툴킷 사이에 Xt(X Toolkit Intrinsics) 라는 층을 두는 것이 있다. 위젯을 만들 뼈대만 주는 층으로, Motif와 X 기본 프로그램(xterm·xclock)이 쓰는 Athena 위젯(Xaw) 이 이 위에 만들어졌다.

툴킷

버튼·메뉴·체크박스 같은 위젯(widget) 을 만들어 주는 라이브러리다.

툴킷풀네임 · 유래언어쓰는 곳
GTK+GIMP ToolkitCGNOME, GIMP, Xfce
Qt(큐트라고 읽는다)C++KDE, VLC
FLTKFast Light ToolkitC++가벼운 프로그램
Motif—CCDE, 전통적인 상용 유닉스
TkTcl/Tk의 그래픽 부분Tcl스크립트용
XForms—C예전 툴킷

외워야 할 짝

짝무엇이 같은가
Xlib ↔ XCB둘 다 저수준 라이브러리
GTK+ ↔ Qt둘 다 대표 툴킷
GNOME ↔ Xfce둘 다 GTK+ 를 쓰는 데스크톱 환경
KDE ↔ QtKDE는 Qt로 만들어졌다

"나머지와 종류가 다른 것" 형태로 묻는다. 예를 들어 Xlib · XCB · GTK+ 중에서는 GTK+가 툴킷이라 다르고, GTK+ · Qt · FLTK · XCB 중에서는 XCB가 저수준 라이브러리라 다르다.

GTK+와 Qt

구분GTK+Qt
언어CC++
유래GIMP를 만들려고 개발노르웨이 Trolltech
대표 데스크톱GNOME, Xfce, LXDEKDE, LXQt
대표 프로그램GIMP, FirefoxVLC, Krita
  • GTK+ = GIMP Toolkit 이라는 유래를 묻는 문제가 있다. 이미지 편집기 GIMP를 만들려고 개발한 것이 독립 툴킷이 되었다.
  • 언어가 C인지 C++인지도 묻는다. GTK+는 C, Qt는 C++ 다.

왜 진영이 둘로 갈렸나

   1996  KDE 시작      Qt 를 골랐다 — 그런데 당시 Qt 는 자유 소프트웨어 라이선스가 아니었다
     │
   1997  GNOME 시작    "완전히 자유로운 데스크톱"을 내걸고 GTK+ 를 골랐다
     │
   이후   Qt 도 GPL · LGPL 로 공개 — 라이선스 문제는 해소됐지만 두 진영은 그대로 남았다
  • GNOME이 생긴 직접적인 계기가 Qt의 라이선스였다. 그래서 "GNOME ↔ GTK+", "KDE ↔ Qt"는 우연한 조합이 아니라 출발부터 묶인 짝이다.
  • 이 사정이 GTK+는 GNU 프로젝트의 일부라는 점, 라이선스가 LGPL이라는 점과 이어진다.
구분GTK+Qt
라이선스LGPLGPL · LGPL과 상용 라이선스를 함께 제공
만든 곳의 변천GIMP 개발자들 → GNOME 프로젝트Trolltech → 노키아 → 지금의 The Qt Company
동작하는 곳리눅스 중심, 윈도·macOS도 지원리눅스·윈도·macOS·모바일까지 폭넓게
이름 표기최근 버전부터 +를 떼고 GTK 로 쓴다—
  • 시험 보기에는 여전히 GTK+ 로 나온다. GTK와 같은 것이다.
  • "C로 만든 툴킷"이지 "C로만 쓸 수 있는 툴킷"이 아니다. GTK+도 Qt도 파이썬 등 다른 언어에서 불러 쓸 수 있다. 문제가 묻는 것은 툴킷 자체를 작성한 언어다.

프로그램을 보고 툴킷 맞히기

프로그램종류툴킷
GIMP이미지 편집기GTK+ (이 툴킷의 출발점)
gedit · NautilusGNOME의 편집기 · 파일 관리자GTK+
Firefox (리눅스판)웹 브라우저GTK+
Dolphin · Konsole · KateKDE의 파일 관리자 · 터미널 · 편집기Qt
VLC · Krita동영상 재생기 · 그림 도구Qt
xterm · xclock · xeyesX 기본 프로그램툴킷 없이 Xlib·Xt·Athena 위젯
  • GNOME에 딸린 프로그램은 GTK+, KDE에 딸린 프로그램은 Qt 로 묶어 기억한다. KDE 프로그램은 이름에 K가 들어간 것이 많다.
  • 툴킷이 달라도 같은 화면에 함께 뜬다. GNOME에서 Qt 프로그램인 VLC를 실행해도 된다. 결국 둘 다 같은 X 서버에 그려 달라고 요청하기 때문이다. 다만 버튼·메뉴의 생김새가 서로 달라 보인다.

Motif

  • 1980년대 후반의 상용 툴킷으로 전통적인 유닉스 워크스테이션의 표준이었다.
  • CDE(Common Desktop Environment) 가 Motif로 만들어졌다.
  • 이후 오픈소스로 공개되어 OpenMotif 가 되었고, 호환 구현으로 LessTif 가 있었다.
  • 지금은 거의 쓰이지 않지만 이름은 시험에 나온다.

계층 정리

   응용 프로그램
        │
   ┌────┴──────────────────────────┐
   │  툴킷                          │   GTK+(C) · Qt(C++) · FLTK · Motif · Tk
   └────┬──────────────────────────┘
        │
   ┌────┴──────────────────────────┐
   │  저수준 라이브러리              │   Xlib · XCB   ← XCB 가 더 아래
   └────┬──────────────────────────┘
        │  X 프로토콜
        ▼
     X 서버

나머지 툴킷을 한 줄씩

툴킷기억할 한 가지함께 나오는 이름
FLTK작고 빠른 것이 목표. "풀틱"이라 읽는다Fast Light Toolkit
Motif상용 유닉스 시절의 표준. Xt 위에 만들어졌다CDE, OpenMotif, LessTif
Tk스크립트 언어 Tcl과 짝. 파이썬의 tkinter도 이것을 쓴다Tcl/Tk
XForms예전의 가벼운 툴킷. Xfce가 처음에 이것으로 만들어졌다—

이름을 층에 꽂아 넣기

이름층틀리기 쉬운 이유
XCB저수준 라이브러리낯선 이름이라 툴킷으로 착각
Xlib저수준 라이브러리X 서버의 일부로 착각 — 클라이언트 쪽이다
GTK+툴킷GNOME(데스크톱 환경)과 혼동
Qt툴킷KDE(데스크톱 환경)와 혼동
FLTK · Motif · Tk툴킷이름이 생소함
GIMP응용 프로그램"GIMP Toolkit" 때문에 툴킷으로 착각
GNOME · KDE데스크톱 환경툴킷과 한 묶음으로 외우다 층을 섞음
X11프로토콜 버전라이브러리 이름으로 착각
X.org ServerX 서버—
  • 한 보기 안에 층이 다른 이름을 일부러 섞는다. "툴킷이 아닌 것"을 물으면 Xlib·XCB(아래층)나 GNOME·KDE(위층)가 답이 되고, "저수준 라이브러리가 아닌 것"을 물으면 툴킷 가운데 하나가 답이 된다.
  • 순서를 묻기도 한다. X 서버에서 가까운 순으로 XCB → Xlib → 툴킷(GTK+·Qt) → 응용 프로그램 이다.
외우는 실마리내용
이름이 X로 시작하면 아래층Xlib, XCB는 저수준 라이브러리 (단, XForms는 툴킷)
끝이 tk·TK면 툴킷GTK+, FLTK, Tk — toolkit의 줄임이다
C는 G, C++은 QGTK+ = C = GNOME, Qt = C++ = KDE
CB는 C BindingXCB = X protocol C-language Binding

내일은 이 위에 얹히는 윈도 매니저 · 디스플레이 매니저 · 데스크톱 환경의 구분을 다룬다.

📖 용어

  • Xlib : X 프로토콜을 함수로 감싼 전통적인 저수준 라이브러리.
  • XCB : X protocol C-language Binding. Xlib보다 얇고 X 서버에 더 가까운 저수준 라이브러리.
  • 툴킷(toolkit) : 버튼·메뉴 같은 위젯을 제공하는 상위 라이브러리.
  • GTK+ : GIMP Toolkit. C 언어로 만들어졌으며 GNOME이 사용한다.
  • Qt : C++로 만들어진 툴킷. KDE가 사용한다.
  • FLTK : Fast Light Toolkit. 가볍고 빠른 것을 목표로 한 C++ 툴킷.
  • Motif : 전통적인 상용 유닉스에서 쓰이던 툴킷. CDE가 이것으로 만들어졌다.
  • 위젯(widget) : 버튼, 메뉴, 스크롤바처럼 화면을 구성하는 개별 요소.

📝 연습 문제

선택지를 클릭하면 정답·해설이 펼쳐집니다.

문제 1

다음 중 X 서버에 가장 가까운 저수준 X 클라이언트 라이브러리로 알맞은 것은?

문제 2

다음 중 GTK+ 툴킷을 작성하는 데 사용된 프로그래밍 언어로 알맞은 것은?

문제 3

다음 중 KDE 데스크톱 환경의 기반이 되는 툴킷으로 알맞은 것은?

문제 4

다음 중 나머지 셋과 계층이 다른 것으로 알맞은 것은?

문제 5

다음 중 GTK+ 툴킷 이름의 유래가 된 프로그램으로 알맞은 것은?

이전X 윈도의 구조와 발전Week 8 · Day 1다음 윈도 매니저 · 디스플레이 매니저 · 데스크톱 환경Week 8 · Day 3

참고 공식 자료

  • 리눅스마스터 2급 공식 출제 기준(새 탭에서 열림)

이 페이지

  • 네 개의 층
  • 확인" 버튼 하나가 화면에 나오기까지
  • 저수준 라이브러리 — Xlib과 XCB
  • 동기와 비동기가 무슨 차이인가
  • 툴킷
  • 외워야 할 짝
  • GTK+와 Qt
  • 왜 진영이 둘로 갈렸나
  • 프로그램을 보고 툴킷 맞히기
  • Motif
  • 계층 정리
  • 나머지 툴킷을 한 줄씩
  • 이름을 층에 꽂아 넣기
  • 용어
  • 연습 문제