본문 바로가기
파이썬/PySide6

[PySide6] 데스크탑 프로그래밍 입문하기

by Devry 2023. 6. 24.

안녕하세요. 그동안 프런트 개발과 알고리즘에 대한 글을 쓰다가 개인적으로 좋아하는 주제인 데스크톱 프로그래밍에 대한 저의 생각과 왜 입문해야 되는지에 대해 써보려고 합니다.(Pyside6에 대한 글을 쓰기 전에 제 생각을 정리해 보는 글이기 때문에 가볍게 작성해 보겠습니다.)

 

내가 GUI 프로그래밍에 빠져든 이유?

어릴 적부터 컴퓨터로 게임, 엑셀, 메신저 등 다양한 프로그램을 사용하면서 "이런 프로그램은 어떻게 만들어지는 걸까?"라는 생각이 들었습니다. 그리고 언젠가는 나만의 프로그램을 만들어 보고 싶다는 생각도 했습니다.

GUI(Graphical User Interface) 프로그래밍을 접하면서, 드디어 나만의 프로그램을 만들 수 있게 되었고, 예전부터 대단하다고 생각했던 프로그래머들처럼 어떤 것이든 만들 수 있다는 기분이 들었습니다.

 

롤러코스터 타이쿤

CD게임이 유행하던 제 어린 시절 롤러코스터 타이쿤이라는 게임은 크리스 소이어(Chris Sawyer)라는 분이 저급언어인 어셈블리어로 만들었다고 하는데 그 당시 개발자들은 확실히 대단한 것 같습니다.

 

일반적인 윈도우 환경의 GUI

흔하게 봤을 법한 비주얼인 제가 만든 GUI 프로그램입니다. 윈도우 os 기반 소프트웨어는 따로 꾸미지 않으면 비슷한 모양새를 하고 있죠. 포스팅의 주제가 GUI 프로그램 입문을 위한 장단점과 설득 위주이다 보니 따로 GUI의 정의를 설명하지 않았는데, 감으로 알 수 있듯이 사용자(컴퓨터를 하는 사람)가 마우스 키보드 등으로 클릭과 같은 이벤트로 컴퓨터와 소통하는 것을 말합니다.

 

GUI로 대체 무엇을 할 수 있을까?

제가 앞에서 말했 듯이 GUI에 빠져든 건 많은 기능의 프로그램 들이 GUI로 구현되어 있기 때문인데 간단하게 예시를 들어보겠습니다. 

 

1. 일반적인 데스크탑 프로그램 (알집, 포토샵, 엑셀..)

제가 컴퓨터를 처음 접하던 초등학생 때부터 사용한 프로그램 중에 떠오르는 건 이스트 소프트에서 개발한 알집이 있습니다. 예전에는 게임도 프로그램도 프로그램으로 패키징 해서 배포하는 경우가 많았는데 요즘은 브라우저가 강력해지고 소스 코드 유출 등의 문제로 많이 줄어든 것 같네요. 비록 요즘은 다양한 대안이 나왔지만 20년도 넘은 프로그램이 현재까지 유지되는 건 대단한 것 같습니다.

소프트웨어를 판매하는 회사 중에 가장 떠오르는 회사 하면 직장인들은 어도비나 마소를 떠올리실 겁니다. 포토샵처럼 거대한 프로그램도 결국 사용자들이 자주 사용하는 기능을 GUI 프로그램화한 것이고 이를 판매하는 것입니다. 이처럼 큰 프로그램이 아니어도 작은 규모는 얼마든지 초보자도 만들어서 배포할 수 있고, 실력만 된다면 크몽과 같은 사이트에서 외주를 받고 판매할 수도 있습니다. 짧게나마 소프트웨어 외주 업무를 해본 결과, 소비자들의 처한 문제와 니즈는 다양하고 해결하는 방법도 다양하다는 것을 느꼈던 적이 있습니다.

커뮤니티를 구경하다 보면 국가에서 외주를 받아서 납품하는 분들도 계시는 걸 보니 정말 제가 모르는 방법이 많은 것 같습니다.

포토샵의 GUI

2. 게임 개발

게임 강국인 우리나라의 게이머 분들이라면 이 게임의 이 부분이 마음에 안드는데 내가 한 번 만들어 보고 싶다는 생각을 해보신 분도 있으실 것 같습니다. 게임 개발에 관심이 있으신 분들은 "unity나 언리얼과 같은 엔진으로 개발하는거 아닌가?" 인터프리터 언어인 파이썬이 느리고 툴도 없이 가능할까? 생각을 하셨을 것 같습니다. 하지만 기획 단계부터 많은 사람이 모여서 개발하는 게 아닌 소수가 개발하는 데에는 오히려 툴 사용법의 장벽과 정적 언어인 C#이 생산성을 저하하는 요인일 것이라 생각합니다. 2명의 동료와 unity로 개발을 해본 제 경험으로는 빠른 가시적인 성과를 보여주는게 중요한데

unity를 사용하는 것의 장점은 못 느꼈습니다. 오히려 툴에 대한 낮은 이해도로 학습에 너무 애를 먹었습니다. 세부적인 기획보다는 투자(돈, 시간) 대비 효율이 최우선인 인디 단계에서는 언어마다 존재하는 GUI와 게임엔진을 사용하는 것을 추천드립니다. 어떻게 보면 단순하면서 재미도 있는 마인크래프트라는 게임은 JAVA라는 프로그래밍 언어로 제작됐습니다. 굳이  "무엇으로 만드느냐"에 정석을 따질 필요는 없다는 의미입니다. 사용자는 그 게임으로부터 재미를 찾고, 개발자는 한정된 자원으로 재미를 뽑아내는 게 근본이죠.

JAVA로 제작된 게임

몇 년 전 단순하면서도 타임킬링 게임으로 유명했던 뱀파이어 서바이버라는 게임도 있는데, 스트리머, BJ들이 90년대 그래픽의 게임을 재밌게 해서 몇 만 명씩 시청할 정도로 인기를 끌었던 적이 있습니다. 꽤 시간이 지난 지금은 약 500만 명이 다운로드한 것으로 추정이 되는데 단순 계산으로 매출을 따지면 250억이 됩니다. 얼마나 대단한 기능을 넣었길래 많은 사람들이 사용했을까요? 놀랍게도 html, css, javascript로 구현하였고 이미지 리소스도 가져다 사용했다고 합니다.

그렇다면 기획력이 대단했을까요? 게임 기획 또한 매직 서바이벌을 표절한 것이고 새로운 요소는 딱히 없어 보입니다. 어느 정도 운이 따렀다고 볼 수 있지만 기존의 것들을 적절히 조합하고 개선하여 적절한 플랫폼에 적절한 시기가 맞았다고도 생각됩니다. 흔치 않은 케이스긴 하지만 요점은 개발 언어 간의 절대적인 우위 관계는 없고 자신이 좋아하는 언어를 선택하는게 정답이라는 것입니다.

 

뱀파이어 서바이버 GUI

3. 업무 자동화 및 쉬운 환경에서의 실행

1번에서 프로그램을 배포하는 것을 얘기했다면 굳이 배포를 하지 않더라도 본인이 업무 자동화 알고리즘을 작성할 수 있다면, GUI화 하여 실행하고 싶은 부분만 실행하여 생산성을 높일 수 있습니다. 코드 에디터로 실행하는 것에 익숙한 개발자 분들은 귀찮게 GUI를 만들 필요성을 못 느끼실 수 있지만, 상황에 따라 자동화 코드도 다르게 작동해야 하는데 매번 필요 없는 부분을 주석했다가 해제하고 특정 실행 환경에서만 동작하는 불편함도 무시할 수 없습니다. 

GUI화 하여 체크박스로 필요한 부분을 실행하면 코드를 바꿀 필요도 없고, exe파일만 옮기면 아무 컴퓨터에서 실행이 가능하고 코딩을 모르는 직장 동료들도 사용할 수 있어서 생산성 증가가 엄청날 것입니다.

제가 사무자동화 카테고리에서 엑셀 파일의 내용을 매칭해주는 프로그램도 이를 활용하여 다른 동료도 자동화 기능을 누릴 수 있게 한 케이스입니다.

 

왜 파이썬과 PySide6일까?

제가 지금까지 왜 GUI 프로그래밍이며 무엇을 할 수 있는지에 대한 설명에 동의하신 분이면 자연스레 다음 질문인 "왜 파이썬과 PySide6일까?"라는 의문으로 도달할 수 있습니다. 우선 마이크로소프트에서 제공하는 .NET프레임워크, 자바 swing 등 훨씬 유명하고 많은 IT회사들이 사용 중인 언어도 선택할 수 있습니다. 우선 인터프리터 언어인 파이썬은 입문용으로 적절한 언어이고 요즘 떠오르는 AI나 데이터 사이언스 쪽으로도 생태계가 잘 조성되어 있어서 전망 또한 나쁘지 않아 보입니다.

저 또한 전공 수업의 python 과목으로 입문을 하게 되었고 쉽고 빠르게 개발하는 장점이 가장 와닿았습니다.

파이썬 진영에서 대표적인 GUI 프레임워크는  tkinter, PyQt, PySide 3개가 있습니다.

3가지를 모두 사용해 본 결과 저는 PySide로 정착을 하게 되었고 간단하게 그 이유에 대해 설명드리겠습니다.

3가지의 장단점을 비교하면 분량이 많기 때문에 결론을 말씀드리자면, 파이썬에 내장된 표준인 tkinter는 UI적으로 덜 예쁘고 위젯이 부족해서 잘 선택하는 것 같지 않았습니다. 가장 유명한 PyQt는 예제가 많고 쉽게 자료를 찾을 수 있는 게 매우 매력적이지만 GPL 라이선스이기 때문에 혹시 모를 불안이 생겼습니다. 그래서 최종적으로 정착한 건 QT의 공식 바인딩인 PySide입니다. 점점 PyQt에 밀리지 않게 활성화가 되고 있고 문법도 크게 다르지 않아서 넘어가는 데에도 딱히 걸림돌은 없었던 것 같습니다. GPL보다 완화된 라이선스인  LGPL 라이선스여서 부담이 적었던 부분이 주된 이유이기도 합니다.

 

지금 시작해야 한다

예전에 비해 점점 일반인 들도 코딩하기 쉬운 세상이 되는 것을 체감하고 있습니다. ChatGPT의 등장으로 몇몇 코더들은 불안을 느낄 정도로 잘 명령만 할 수 있으면 AI가 알아서 코드도 작성해 주는 시대이고, 클라우드 컴퓨팅의 발전으로 이를 잘 활용하면 하나부터 열까지 구현할 필요 없이, 내 프로그램에 일부 서비스를 채택하면 안전하고 강력한 소프트웨어를 만들 수 있습니다. 파이썬과 같은 고급 언어와 점점 정교해지는 라이브러리들의 등장으로 import만 하면 원리를 알 필요 없이 가져다 사용할 수 있습니다. 마치 자동차 엔진의 원리를 몰라도 운전을 할 수 있는 것과 같은 원리죠. 

개인용 컴퓨터의 보급 이후로 미니홈피, 블로그를 통해 개인용 웹사이트가 대중화되었고, 스마트스토어 같은 플랫폼으로 개인용 스토어가 대중화되었듯이 개인용 프로그램도 언젠가 대중화될 수도 있을 것 같네요.

 

머릿속에 생각나는 예시를 나열해서 조잡하게 느껴질 수도 있는 글인 데에도 읽어주시는 분들에게 진심으로 감사드립니다.

 

 

댓글