{"id":47303,"date":"2026-10-06T11:50:30","date_gmt":"2026-10-06T02:50:30","guid":{"rendered":"https:\/\/jore2.com\/?p=47303"},"modified":"2026-10-06T11:50:30","modified_gmt":"2026-10-06T02:50:30","slug":"tips-21275-making-a-gtk-application-in-haskell-part-1","status":"publish","type":"post","link":"https:\/\/jore2.com\/?p=47303","title":{"rendered":"\ud504\ub791\uc2a4 \uac1c\ubc1c\uc0ac Flor\u00e9al Technologies, Haskell \uae30\ubc18 GTK4 \ud22c\ub450 \uc571 \uc81c\uc791 \ud29c\ud1a0\ub9ac\uc5bc \uacf5\uac1c"},"content":{"rendered":"<div class=\"jore2-editor-byline\">\n<p><strong>\uc774\uac00\uc740<\/strong><\/p>\n<\/div>\n<p>\ud504\ub791\uc2a4 \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uac1c\ubc1c \ud68c\uc0ac Flor\u00e9al Technologies\uac00 Haskell \uc5b8\uc5b4\ub85c GTK4 \uae30\ubc18 \ub370\uc2a4\ud06c\ud1b1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \uad6c\ucd95\ud558\ub294 \ud29c\ud1a0\ub9ac\uc5bc \uc2dc\ub9ac\uc988\ub97c \uc2dc\uc791\ud588\ub2e4. \uc774\ubc88 \uc2dc\ub9ac\uc988\ub294 Feriel Choutri de Tarl\u00e9\uac00 \uc9d1\ud544\ud588\uc73c\uba70, \ub2e8\uc21c\ud55c \ud560 \uc77c \ubaa9\ub85d \uc571\uc744 \ub9cc\ub4e4\uc5b4\uac00\ub294 \uacfc\uc815\uc744 \ud1b5\ud574 \ud604\ub300\uc801\uc778 UI \ub514\uc790\uc778 \uc6d0\uce59\uc744 \ucf54\ub4dc\uc5d0 \uc801\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \uc124\uba85\ud55c\ub2e4.<\/p>\n<p>\ud29c\ud1a0\ub9ac\uc5bc\uc758 \ud575\uc2ec\uc740 GNOME \ud504\ub85c\uc81d\ud2b8\uc758 \ub514\uc790\uc778 \uc5b8\uc5b4\uc778 Adwaita \ub77c\uc774\ube0c\ub7ec\ub9ac \ud65c\uc6a9\uc5d0 \uc788\ub2e4. Adwaita\ub294 \uc811\uadfc\uc131\uacfc \uc2a4\ud0c0\uc77c \uac00\uc774\ub4dc\ub77c\uc778\uc744 \ucf54\ub4dc\ub85c \uad6c\ud604\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c, \ub77c\uc774\ud2b8 \ubaa8\ub4dc\uc640 \ub2e4\ud06c \ubaa8\ub4dc \uc804\ud658 \uc2dc \ub7f0\ud0c0\uc784\uc5d0 \uc0c9\uc0c1\uacfc \ub808\uc774\uc544\uc6c3\uc774 \uc790\ub3d9\uc73c\ub85c \uc870\uc815\ub418\ub294 \ubc18\uc751\ud615 \ub514\uc790\uc778\uc744 \uc9c0\uc6d0\ud55c\ub2e4. \uac1c\ubc1c\uc790\ub294 \uc774 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ud1b5\ud574 \ubcf5\uc7a1\ud55c \uc2a4\ud0c0\uc77c\ub9c1 \uc791\uc5c5 \uc5c6\uc774\ub3c4 \uc138\ub828\ub41c \uc0ac\uc6a9\uc790 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\uc131\ud560 \uc218 \uc788\ub2e4.<\/p>\n<p>Haskell\uc5d0\uc11c GTK\ub97c \ub2e4\ub8e8\uae30 \uc704\ud574 haskell-gi \ud234\ud0b7\uc774 \uc0ac\uc6a9\ub41c\ub2e4. \uc774 \ub3c4\uad6c\ub294 C API \uae30\ubc18\uc758 GTK \ub77c\uc774\ube0c\ub7ec\ub9ac\ub85c\ubd80\ud130 Haskell \ubc14\uc778\ub529\uc744 \uc790\ub3d9 \uc0dd\uc131\ud558\uc5ec, \uae30\uc874 C \uc5b8\uc5b4 \uac1c\ubc1c\uc790\ub4e4\ub3c4 \uce5c\uc219\ud558\uac8c \ub290\ub084 \uc218 \uc788\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc81c\uacf5\ud55c\ub2e4. \uc800\uc790\ub294 \uac00\ub3c5\uc131\uc744 \uc704\ud574 \uc804\uccb4 \ucf54\ub4dc\ub97c \ub098\uc5f4\ud558\uc9c0 \uc54a\uace0 \uc8fc\uc694 \uac1c\ub150 \uc704\uc8fc\ub85c \uc608\uc81c\ub97c \uad6c\uc131\ud588\uc73c\uba70, \uc644\uc131\ub41c \ud504\ub85c\uc81d\ud2b8 \uc18c\uc2a4\ub294 GitHub \uc800\uc7a5\uc18c\uc5d0\uc11c \ud655\uc778\ud560 \uc218 \uc788\ub3c4\ub85d \uc548\ub0b4\ud588\ub2e4.<\/p>\n<p>\uc544\ud0a4\ud14d\ucc98 \uce21\uba74\uc5d0\uc11c\ub294 Elm Architecture \ud328\ud134\uc744 \ub3c4\uc785\ud574 \uba85\ub839\ud615 UI \ub85c\uc9c1\uc744 \uad00\ub9ac\ud55c\ub2e4. \uc0c1\ud0dc \ubcc0\uacbd\uacfc \ubdf0 \uc5c5\ub370\uc774\ud2b8\ub97c \uba85\ud655\ud788 \ubd84\ub9ac\ud558\ub294 \uc774 \ubc29\uc2dd\uc740 Haskell\uc758 \uc21c\uc218 \ud568\uc218\ud615 \ud2b9\uc131\uacfc \uc798 \ub9de\ubb3c\ub824 \ubcf5\uc7a1\ud55c \uc0c1\ud638\uc791\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc744 \uc548\uc815\uc801\uc73c\ub85c \uc81c\uc5b4\ud558\ub3c4\ub85d \ub3d5\ub294\ub2e4. \ucd08\uae30 \ub2e8\uacc4\uc5d0\uc11c\ub294 \ube48 \ucc3d\uc5d0 \uc81c\ubaa9\uacfc \ud06c\uae30\ub97c \uc124\uc815\ud558\ub294 \uae30\ubcf8 \uad6c\uc870\ubd80\ud130 \ucc28\uadfc\ucc28\uadfc \uc313\uc544\uc62c\ub9b0\ub2e4.<\/p>\n<p>\uae30\uc220 \ucee4\ubba4\ub2c8\ud2f0 Hacker News\uc5d0\uc11c\ub294 \ud574\ub2f9 \ud29c\ud1a0\ub9ac\uc5bc\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \ubc18\uc751\uc774 \uc774\uc5b4\uc84c\ub2e4. \uc77c\ubd80 \uc0ac\uc6a9\uc790\ub294 Haskell\uc774 \uba85\ub839\ud615 \uc5b8\uc5b4\ucc98\ub7fc \ub290\uaef4\uc9c4\ub2e4\ub294 \ub18d\ub2f4 \uc11e\uc778 \uce6d\ucc2c\uc744 \ub0a8\uacbc\uc73c\uba70, \ub2e4\ub978 \uc774\ub4e4\uc740 GTK4\ub85c\uc758 \ub9c8\uc774\uadf8\ub808\uc774\uc158 \uacfc\uc815\uc5d0\uc11c \uacaa\uc5c8\ub358 \ud638\ud658\uc131 \ubb38\uc81c\ub098 Wayland \uc804\uc6a9 \ud658\uacbd\uc5d0\uc11c\uc758 \uc81c\uc57d\uc810\uc744 \ud1a0\ub85c\ud558\uae30\ub3c4 \ud588\ub2e4. \ud2b9\ud788 \ube44-GNOME \ud658\uacbd \uc0ac\uc6a9\uc790\ub4e4 \uc0ac\uc774\uc5d0\uc11c\ub294 \uc5ec\uc804\ud788 \uad6c\ubc84\uc804 GTK\uc774\ub098 \ub2e4\ub978 \ud234\ud0b7\uc744 \uc120\ud638\ud558\ub294 \ubaa9\uc18c\ub9ac\uac00 \uc874\uc7ac\ud568\uc744 \ubcf4\uc5ec\uc900\ub2e4.<\/p>\n<p>\uc774\ubc88 \uae00\uc740 \uc2dc\ub9ac\uc988\uc758 \uc11c\ub860 \uaca9\uc73c\ub85c, \uc2e4\uc81c \uae30\ub2a5 \uad6c\ud604\ubcf4\ub2e4\ub294 \ud504\ub85c\uc81d\ud2b8 \uad6c\uc870\uc640 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc120\ud0dd \uc774\uc720\uc5d0 \ucd08\uc810\uc744 \ub9de\ucdc4\ub2e4. \ud6c4\uc18d \ud3b8\uc5d0\uc11c\ub294 \uad6c\uccb4\uc801\uc778 \uc704\uc82f \ubc30\uce58\uc640 \uc774\ubca4\ud2b8 \ud578\ub4e4\ub9c1 \ub4f1 \ub354 \uc2ec\ud654\ub41c \ub0b4\uc6a9\uc774 \ub2e4\ub904\uc9c8 \uc608\uc815\uc774\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Flor\u00e9al Technologies\uac00 Haskell\uacfc GTK4, Adwaita \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uacb0\ud569\ud574 \ub124\uc774\ud2f0\ube0c \ub370\uc2a4\ud06c\ud1b1 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc744 \ub9cc\ub4dc\ub294 \uacfc\uc815\uc744 \ub2f4\uc740 \uc2dc\ub9ac\uc988\uc758 \uccab \ubc88\uc9f8 \ud3b8\uc744 \uac8c\uc2dc\ud588\ub2e4.<\/p>\n","protected":false},"author":4,"featured_media":47302,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jore2_quality_policy":"people-first-v2","footnotes":""},"categories":[387],"tags":[31051,31050,12668,31052,16458],"class_list":["post-47303","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it","tag-adwaita","tag-gtk4","tag-haskell","tag-31052","tag-16458"],"featured_image_urls":{"full":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-scaled.jpg",1440,2560,false],"thumbnail":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-150x150.jpg",150,150,true],"medium":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-169x300.jpg",169,300,true],"medium_large":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-768x1365.jpg",640,1138,true],"large":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-576x1024.jpg",576,1024,true],"1536x1536":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-864x1536.jpg",864,1536,true],"2048x2048":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-1152x2048.jpg",1152,2048,true],"morenews-large":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-825x575.jpg",825,575,true],"morenews-medium":["https:\/\/jore2.com\/wp-content\/uploads\/2026\/10\/paper-draft-590x410.jpg",590,410,true]},"author_info":{"info":["\uc774\uac00\uc740"]},"category_info":"<a href=\"https:\/\/jore2.com\/?cat=387\" rel=\"category\">IT&amp;\uc0dd\ud65c\uafc0\ud301<\/a>","tag_info":"IT&amp;\uc0dd\ud65c\uafc0\ud301","comment_count":"0","_links":{"self":[{"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/posts\/47303","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=47303"}],"version-history":[{"count":0,"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/posts\/47303\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=\/wp\/v2\/media\/47302"}],"wp:attachment":[{"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=47303"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=47303"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jore2.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=47303"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}