파이썬은 다재다능한 언어인데 의외로 모바일 앱 개발에는 사용을 잘 안하는 것 같다.
파이썬이 모바일에 약하다는 부분은 현재 많은 인기에도 불구하고 언어의 미래가 불투명하다는 전망도 갖게한다. 결국 컴퓨팅 환경의 주류는 모바일 환경이 될 거라고 믿으니까
현재 모바일의 주류는 아니지만 파이썬의 범용성을 경험해보는 측면에서 kivy도 경험해 보면 어떨까?
파이썬의 모바일 앱 개발에 관심이 있다면 한번 쯤 kivy 에 대해 알아보는 것도 좋을 것 같다.
이 포스팅에서는 윈도우10 환경에서 키비의 설치부터 실행테스트까지 한다. kivy는 아래의 사이트에서 다운로드 받을 수 있다. pip 명령어를 몇개 더 실행해야 하니까 다른 모듈에 비해 설치가 조금 까다롭다.
키비는 몇가지 제약조건이 있다. 키비는 64비트에서 동작한다. 파이썬 버전에 따라 설치 오류가 있을 수도 있다. 아래 버전은 파이썬 3.8.5 버전에서 설치에 실패했다.
python -m pip install kivy==1.11.1
윈도우10 파이썬 3.8.5에서 아래와 같이 설치했다. pip 도구들을 업그레이드하고 dependency 설치를 해야한다.
# -----도구들 업그레이드 -----
python -m pip install --upgrade pip wheel setuptools virtualenv
# ----- dependency -----
python -m pip install docutils pygments pypiwin32 kivy_deps.sdl2==0.1.* kivy_deps.glew==0.1.*
python -m pip install kivy_deps.gstreamer==0.1.*
마지막으로 키비 설치다.
3.8.5 버전에서는 웹사이트의 버전을 설치할 때 계속 오류가 나서 아래의 버전으로 설치할 수 있었다.
pip install kivy==2.0.0rc2
가장 간단한 코드로 앱을 테스트해본다.
아래의 코드는 Hello World 같은 것이다.
이 코드는 데스크탑에서 실행 테스트를 하는 것이고 실제 안드로이드나 IOS 에서 사용가능한 패키지를 만들려면 별도의 빌드 과정을 거쳐야 한다.
import kivy
from kivy.app import App
from kivy.uix.label import Label
class KivyApp(App):
def build(self):
return Label(text='KIVY LABEL TEST')
if __name__ == '__main__':
KivyApp().run()
앱을 실행하면 아래와 같이 기본설정으로 실행된다.
사이즈를 스마트폰처럼 변경해보면 반응형 웹처럼 자동으로 재배치가 된다.
좀 더 키비를 사용해보자. 칼럼을 2로 설정하고 레이블과 텍스트인풋을 넣어보았다.
import kivy
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
fontk = 'font/Cafe24Dangdanghae.ttf'
class KivyGrid(GridLayout):
def __init__(self, **kwargs):
super(KivyGrid, self).__init__(**kwargs)
self.cols = 2
self.add_widget(Label(text='제목: ', font_name=fontk, font_size=30))
self.name = TextInput(multiline=False)
self.add_widget(self.name)
self.add_widget(Label(text='내용: ', font_name=fontk, font_size=30))
self.name = TextInput(multiline=False)
self.add_widget(self.name)
self.add_widget(Label(text='글쓴이: ', font_name=fontk, font_size=30))
self.name = TextInput(multiline=False)
self.add_widget(self.name)
class KivyApp(App):
def build(self):
return KivyGrid()
if __name__ == '__main__':
KivyApp().run()
그리드 레이아웃을 상속해서 디자인을 구성하였다.
self.col = 2 라는 것은 열이 2개인 창을 만든다는 것이다. 이 상태에서 사이즈를 늘리거나 줄어도 열 2개를 유지한다.
키비는 다국어 지원이지만 한글을 기본 지원하지 않는다. 별도의 폰트를 지정하여 사용할 수 있다.
self.cols = 3 으로 지정하면 아래와 같이 바뀌는 모습을 볼 수 있다.
레이아웃이 크기에 상관없이 3개의 열을 유지하는 것이다. 데스크탑에서 테스트하지만 핸드폰에서 사용할 것을 생각하면 손에 들면 화면이 위아래로 길어야 하고, 핸드폰을 가로로 눕히면 횡대로 길어야 보기가 좋다.
반응형 디자인이라는게 왜 나왔는가를 생각해 보면 간단한 문제다. 사람들이 스마트폰을 할 때 편하게 보는게 목적이다.
키비를 실행시키면 아래와 같은 시스템 정보가 출력된다. 오류메시지는 ERROR 라고 뜬다. 빨간색이라고 다 오류는 아니니 걱정할 필요 없다. 키비 GUI를 그리는데 SDL2 (Simple Direct Media2)를 사용하며 OpenGL 그래픽 엔진으로 렌더링한다는 것을 알 수 있다. OpenGL은 게임 그래픽 엔진이라 그래픽적으로 성능이 좋을 수 밖에 없다. 스마트폰 앱들이 고성능화를 추구하는 최근의 흐름과도 어울린다. 단지 파이썬으로 스마트폰 개발이 활발하지 않을 뿐이다.
스마트폰앱 개발을 위해서는 자바나 코틀린, 스위프트를 사용하는게 더 권장되고 있다.
앱의 개발과 언어 선택에 관하여는 아래 니콜라스의 설명에 잘 나와있다.
파이썬으로 이런 것들을 테스트하고 시도해보는 이유는 파이썬이 그만큼 다양성을 제공해주기 때문이다. 한 한국인 고졸 출신 실리콘밸리의 개발자가 그런 말을 했다. 당장 돈이 되지 않더라도 다양한 아이디어를 실행해보는 것을 쓸데없는 시간낭비라고 말할지도 모르지만, 이 과정속에서 많은 고민을 하게 되며 그 과정들이 모여서 하이레벨 개발자로 가는 길을 열어준다고 한다. 그 사람은 젊은 나이에 고졸의 학력으로 실리콘 밸리에 입성했으니까 스스로의 말을 증명한 것이 되었다.
파이썬의 운명에 대하여 운운하는 사람은 외국에 더 많다. 인간 세상에도 갑자기 많은 인기를 끈 사람들에 대한 시선이 불편하듯이 파이썬의 진가가 드러난 것은 최근 10년 사이에 불과하다. 그보다 좀 전에는 자바도 신생 스타였으나 자바는 C++ 과 많은 부분에서 흡사한 계승자이고 파이썬은 동적 타이프를 본격적으로 사용하는 언어이다. 자바스크립트도 동적 타이프지만 파이썬 어플리케이션은 주로 데스크탑과 소형 컴퓨터에 사용된다는 점을 감안하면 기존 C나 자바의 영역을 건드리는 것이 된다.
기존의 개발자들은 동적 타이프에 대한 부정적인 시각이 있을 수 있다. 이것은 어떻게 보면 당연한 것일 수가 있다. 기존의 프로그래밍 영역은 컴퓨터의 사고에 인간을 맞추는 방식이었는데 동적 타이프가 되면서 인간의 사고에 컴퓨터가 맞춰가기 시작하는 것이다. 그것에 대한 지적은 성능문제로 다가온다.
동적타이프를 하기위한 CPU 파워, 메모리 사용의 증가는 효율성에 우선순위를 둬왔던 기존 프로그래밍 방식에서는 받아들이기 쉽지 않다. 90년대의 x86 PC의 도스 운영체제는 1메가 메모리를 넘어가면 시스템에서 확장 메모리를 설정해줘야 사용할 수 있었다. 때문에 애플리케이션 개발자들은 메모리를 1메가의 메모리를 쥐어짜야 했다. 컴퓨터에서 메모리 오류는 치명적인 오류에 속한다. 지금 시대에는 메모리 용량이 최소 8기가 16기가는 달고 나오니까 이런 문제는 보통 사람이 사용하는 컴퓨터에는 거의 없다. 이런 이야기는 때로 불편한 이야기가 될 수도 있다.
비단 우리나라의 개발자들에게 국한된 문제가 아니라 전세계적으로도 마찬가지다.
필자는 파이썬을 많이 사용하는 편인데 모든 것을 파이썬을 사용해 만들 수 있을 거라고 생각하지는 않는다. 파이썬이 맞는 분야가 있을 뿐이다. 다만 파이썬을 하면서 프로그래밍의 재미를 되찾아 가는 것은 사실이다. 재미없다고 생각했던 프로그래밍이 다시 재미가 있어지면서 결국 C언어도 다시 보게 되었다. 파이썬에서 C언어로 C언어에서 어셈블리어로 CPU로 이어지는 연결고리가 생기고 있다.
이 연결고리를 아느냐 모르느냐는 컴퓨터작업을 일로 생각하느냐 아니면 즐기는 것으로 생각하느냐의 차이도 있다. 그런데 그 연결고리를 배우기 위해 컴퓨터 대학을 가도 본인이 느끼지 못하면 소용이 없다. 컴퓨터의 세계도 엄연히 자연의 세계이다. 보이지 않는 미시적인 세계다. 자연은 진정으로 대하는 존재에게 그 모습을 드러낸다. 진정성이 부족하면 좀처럼 만나주지 않는게 자연이다.
파이썬은 그 이상의 세계에 접근하기 위한 하나의 통로라고 생각한다. 파이썬으로 인해 좀 더 많은 사람들이 컴퓨터라는 생태계에 참여되고 있다. 한번 열린 문은 다시 닫히지 않는다.
Hour of Code를 보면 쉬운 코딩교재가 이미 전세계 10억명에게 제공이 되었다! 코딩스크래치 같은 쉽고 재미있는 코딩교재를 겪은 전세계 아이들이 5년후 10년후 어떤 세상을 이끌어 갈지 기대가 된다.
아워오브코드가 전통의 C언어 처럼 스택과 히프메모리 강의를 하고 있었다면 절대로 10억명을 모을 수 없었을 것이다. 그들이 코딩에서 풀어나가는 것은 마인크래프트, 디즈니 같은 스토리를 가지고 있다.
같은 맥락에서 파이썬은 접근이 쉬운 문법과(동적타이프) 수많은 오픈소스 모듈이 만나서 기존에 없던 가치를 만들어 냈다. 수많은 모듈은 일반인들이 고급의 기능에 손쉽게 접근할 수 있는 길을 열어줬다. 4차 산업은 이런 곳에서 시작된다고 믿는다. 기존의 산업혁명이란게 그 이전에는 일반인이 손에 넣지 못했던 수단을 가졌을 때 시작되었다. 농업혁명, 산업혁명은 한 사람이 할 수 있는 일을 기하급수적으로 늘리는 과정이었다. 4차 산업혁명도 한 사람이 할 수 있는 일을 상상 이상으로 늘리고 있다. 그런 면에서 파이썬이 부각되고 있는 것이다.
그냥 쉽고 재미있는 프로그래밍이라 생각할 수도 있다. 필자도 처음에는 그렇게 생각했으니까. 하지만 최근에 많은 모듈을 실행해보며 생각이 바뀌고 있다. 아 이렇게도 할 수 있구나. 왜 그동안은 못했지? 기술이 없던 것도 아니었을텐데... 왜 라는 질문에는 답이 다 있다. 그래서 파이썬과 함께 그 답을 찾아 나서는 것이다.