PyScript 동작 원리

jwhan·2022년 6월 10일
0
post-thumbnail

최근 Anaconda에서 PyScript 오픈 소스 프로젝트를 발표했다.

PyScript란 웹 브라우저에서 Python 코드를 실행할 수 있도록 해주는 프레임워크이다.

오늘은 어떻게 Python이 웹 브라우저에서 실행할 수 있는지, PyScript의 구동 원리에 대해서 알아보겠다. (사용 방법은 다루지 않을 것이다.)

PyScript

PyScript 공홈에서는 PyScript를 아래와 같이 정의하고 있다.

PyScript is a framework that allows users to create rich Python applications in the browser using HTML's interface and the power of Pyodide, WASM, and modern web technologies.

PyScript는 HTML 인터페이스, Pyodide, WASM, 그리고 모던 웹 테크놀로지를 사용하여 브라우저에서 Python 앱을 사용할 수 있도록 해주는 프레임워크이다.

그래서 그게 무슨 소리냐를 다뤄보자.

브라우저에서 Python을 실행시키려는 노력은 그 이전에도 있었다

요즘 코딩 교육이 보편화되는 추세이다.

비전공자들도 코딩을 많이 배운다는 이야기다.

하지만 코딩을 시작하기도 전에 그들을 가로막는 것이 있는데,

그것은 바로 환경설정이다.


학부 때 그런 농담이 있었다.

과제의 80%는 환경 설정하는 시간이라고.

그래서 만만하게 시작할 수 있었던 게 HTML, 자바스크립트였다.

그냥 html, css, js 코드 뚝딱 만들어서 브라우저에 열면 실행되니까.

물론 요즘과 같이 Google Colab으로 Python 코딩하고 repl 과 같은 브라우저 기반의 IDE들이 쏟아져 나오는 시대에 환경설정이 뭐 그리 대수냐 생각할 수 있겠다.

그럼에도 불구하고 사람들이 PyScript에 열광하는 이유

이제 코딩을 처음 배우는 사람들의 입장이 아닌,

프론트엔드에서 입력받은 파이썬 소스 코드를 실행할 수 있는 프로젝트를 개발해야하는 개발자의 입장에서 보자.

지금까지 흔하게 사용된 방법으로는 서버로 Python 코드를 넘겨 서버에서 실행 후 결과값을 받아와 웹에서 보여주는 방식이었을 것이다.

클라우드 서버에 배포하고, 동시에 사용하는 경우 어떻게 처리할건지, 어떤 종류의 코드는 실행하지 못하게 할 건지 등등..

머리가 아프다.

그런데 PyScript를 사용하면 서버에 대한 걱정을 할 필요 없이 그냥 정말 말 그대로 Python 코드를 웹 브라우저에서 실행할 수 있는거다.

Python 코드를 JS 코드로 트랜스파일하는 Transcrypt나 Python 인터프리터를 자바스크립트로 구현한Brython과 같은, 말 그대로 Python runtime을 흉내내는 것들과는 다르다.

PyScript는 CPython interpreter을 사용하는 것 처럼 진짜 Python 런타임을 실행하기 때문이다.

Pyodide와 WebAssembly

다시 PyScript 공홈의 정의로 돌아가보자.

PyScript는 HTML 인터페이스, Pyodide, WASM, 그리고 모던 웹 테크놀로지를 사용하여 브라우저에서 Python 앱을 사용할 수 있도록 해주는 프레임워크이다.

여기서 중요한 것은 PyodideWASM(WebAssembly)이다.

WebAssembly

WebAssembly란 쉽게 말해서 자바스크립트 외에 브라우저가 이해할 수 있는 언어라고 생각해도 된다.

자세히 설명하자면 WebAssembly는 거의 모든 프로그래밍 언어의 소스 코드를 byte-code로 컴파일하고 그 byte-code를 실행할 수 있는 가상 시스템이다.

그런데 여기서 중요한 점은 Python은 인터프리터 언어이므로 WASM에서 사용할 수 있는 기준 컴파일러가 없다.

그래서 Pyodide가 사용되는거다.

Pyodide

Pyodide는 CPython 인터프리터를 WASM로 컴파일해서 브라우저에서 Python 코드를 인터프리터 할 수 있도록 만든 것이다.

그러니까 조합해서 이해해보자면 원래 Python은 인터프리터 언어이므로 소스 코드를 byte-code로 컴파일링해서 실행하는 WebAssembly에서는 사용될 수 없는데,

Pyodide가 CPython 인터프리터를 WebAssembly로 컴파일해주기 때문에 WebAssembly가 Python 소스 코드를 이해하고 브라우저에서 실행할 수 있다는 뜻이 되겠다.

그러면 PyScript와 Pyodide의 차이점이 뭔데?

이 쯤에서 이런 의문이 들 수 있다.

아니 Python을 브라우저에서 실행시키는 핵심 역할은 Pyodide가 다 하는 것 같은데, 왜 PyScript를 사용해야 하는거지?

이는 PyScript가 웹 컴포넌트와 커스텀 엘리먼트 (예: <py-script>)를 정의해서 이런 복잡한 Pyodide 구현을 생각할 필요 없이 쉽게 사용할 수 있도록 만들었기 때문이다.

결론

PyScript는 올 2월에 시작되어 4월 말에 공개된 그야말로 베타 버전도 아닌 알파 버전의 오픈소스 프로젝트다.

이 글을 쓰는 현재도 활발히 개발이 진행중이므로, 언제 어떻게 바뀔 지 모른다.

아직 제대로 된 공식 문서도 없는 상황.

하지만 내가 이것 저것 테스트해본 결과 왜 많은 사람들이 열광하는 오픈소스 프로젝트인지 이해가 갔다.

<py-script> 를 이용해서 Python 파일을 통째로 추가하거나, 심지어는 <py-repl>를 이용해서 주피터같이 만드는 것도 쉽다.

물론 공식 페이지에서 경고하듯 아직 버그도 많고 로딩 시간도 오래 걸리는 등 정식으로 사용하기에는 좀 어려움이 보인다.

하지만 관심 있다면 본인의 프로젝트에 맞게 사용해보는 것도 재밌는 경험이 될 것이다.

PyScript를 이용해서 간단한 테스트 페이지를 만들어 Githut Pages로 배포했으니 관심 있으신 분들은 이 링크에서 테스트해보시길 바란다.


참고

0개의 댓글