개발자

파이썬을 자바스크립트로, 다시 반대로 변환하는 방법

Serdar Yegulalp | InfoWorld 2023.03.24
파이썬이냐, 자바스크립트냐? 뭐가 더 좋고 장래가 더 밝은지에 대한 논쟁은 여전히 진행 중이지만, 웹 프론트엔드를 지배하는 언어를 꼽으라면 사실상 이론의 여지가 없다. 웹어셈블리가 발전해 다른 언어를 투명하게 컴파일해 브라우저에서 사용하는 수준이 될 때까지, 브라우저는 자바스크립트의 세계다.
 
ⓒ Getty Image Bank

아니, 전부는 아닐 수도 있다. 자바스크립트는 프로그래밍 언어를 다른 언어로 변환하는 '트랜스파일러'에서 가장 선호하는 타깃 언어다. 특히 파이썬은 많은 사용자와 풍부한 라이브러리를 보유하고 있어 자바스크립트로의 변환, 즉 트랜스파일하기에 좋은 언어다. 자바스크립트 세계에서 파이썬을 유용하게 활용하는 7가지 프로젝트를 소개한다. 이 중에는 양방향 변환이 가능한 프로젝트도 있다.
 

브라이썬

웹어셈블리의 이상 중 하나는 웹 개발에 원하는 언어를 사용할 수 있게 해준다는 것이지만 그 목표까지는 아직 갈 길이 멀다. 브라이썬(Brython)의 기본 개념은 적어도 파이썬 3에 있어서는 지금 바로 그 목표를 이루자는 것이다.

브라이썬은 파이썬 3의 모든 키워드와 대부분의 내부 구조를 에뮬레이션하는 자바스크립트 라이브러리를 통한 클라이언트 측 웹 프로그래밍을 위한 파이썬 3 버전을 구현한다. 파이썬으로 작성된 스크립트를 웹 페이지에 직접 포함할 수 있다. 브라이썬은 DOM(문서 객체 모델) 및 브라우저와 상호작용하면서 일반적으로는 자바스크립트에서 직접 수행되는 모든 작업을 처리하는 고수준 파이썬 모듈 인터페이스(browser 패키지)를 제공한다.

풍부한 라이브 코드 예제미니 애플리케이션 갤러리를 통해 브라이썬이 어떻게 작동하는지 살펴볼 수 있다. 브라이썬을 사용해서 네이티브 안드로이드 앱을 파이썬으로 작성하는 것도 가능하다. 비동기 기능을 사용할 수 있지만 파이썬의 asyncio 대신 브라이썬의 async 모듈을 사용해야 한다.

단, 브라우저에서 자바스크립트에 적용되는 제약은 브라이썬에도 적용된다. 예를 들어 로컬 파일 시스템 작업은 지원하지 않는다. 애플리케이션별로 데이터를 보존할 방법이 필요하면 HTML 5 로컬 스토리지를 사용해야 한다.
 

자바스크립썬

자바스크립썬(JavaScripthon)은 브라이썬 프로젝트와 같이 완전한 브라우저 내 지원을 제공하는 것이 아니라 파이썬 3.5와 그 이후의 코드를 자바스크립트로 변환하는 데 집중한다. ES6 코드를 생성해 브라우저 측에서 폴리필의 필요성을 최소화하며 소스 맵을 보존함으로써 웹팩(Webpack)과 같은 툴과도 잘 호환된다.

asyncawait, 파이썬 3.6 f-문자열, 파이썬 클래스 메서드 및 상속을 포함해 파이썬의 일반적인 키워드와 동작 대부분을 지원한다. 또한 자바스크립트로 직접 작업해야 하는 경우 특수 함수 호출을 통해 자바스크립트 인라인을 삽입할 수도 있다. 참고로, 자바스크립썬은 최신 버전으로 파이썬 3.10을 지원하도록 업데이트됐지만 마지막 커밋 시점은 2022년 7월이다.
 

지피

지피(Jiphy)라는 이름은 “자바스크립트 인, 파이썬 아웃(JavaScript in, Python out.)”의 줄임말이다. 즉, 지피는 두 언어를 양방향으로 변환한다. 또한 두 언어의 코드를 혼합해 둘 중 한 타깃 언어로 변환할 수 있다. 단, 모든 오픈스택을 자바스크립트로 변환하기 전에 한 가지 유의 사항이 있다. 지피의 용도는 완전한 코드베이스 변환이 아니라는 것이다. 지피의 기능은 README에도 나와 있듯이 “파이썬 개발자가 자바스크립트 코드를 쓰거나 그 반대의 경우 필요한 컨텍스트 전환을 줄여주는 것”이다.

지피의 가장 큰 단점은 파이썬 기능의 일부만 지원한다는 점이다. 클래스나 기본 인수를 사용할 수는 없고, 데코레이터와 예외만 지원한다. 주된 이유는 지피가 소스와 타깃 코드 간의 라인 대 라인 관계에 집중한다는 데 있다. 파이썬의 표준 라이브러리를 자바스크립트 구조로 매핑하는 기능은 지원하지 않는다. 참고로 지피 프로젝트는 2020년 중반 이후 업데이트가 되지 않고 있다. 따라서 개발이 다시 시작될 때까지는 테스트용으로 주의해 사용해야 한다.
 

JS2Py

JS2Py는 이름에서 짐작할 수 있듯이 자바스크립트를 파이썬으로 변환하며 이를 위해 순수 파이썬 변환 엔진을 사용한다. 현재 공식 지원은 ES5로 한정되지만 모험심이 강한 사람들을 위해 실험적으로 ES6도 지원한다. JS2Py는 파이썬과 자바스크립트 간의 많은 교차 상호운용을 지원한다. js2py.require 메서드를 사용해 기존 Node.js 모듈을 파이썬 코드로 가져올 수 있다. 자바스크립트 측의 변수를 파이썬 측에서 검증할 수 있고, 파이썬 객체를 자바스크립트 코드에서 사용할 수 있다. JS2Py에는 파이썬의 자바스크립트 코드를 평가하는 매우 실험적인 가상머신도 포함돼 있지만 프로덕션 용도로는 아직 권장되지 않는다.
 

래피드스크립트

래피드스크립트(RapydScript)를 이용하면 다른 비슷한 프레임워크에서 발생하는 오버헤드 없이 파이썬에 훨씬 더 근접한 언어로 자바스크립트 앱을 작성할 수 있다. 파이썬류의 대안 언어로 된 코드를 어디서나 그대로 실행 가능한 자바스크립트로 바꾼다는 점에서 커피스크립트와 비슷하다. 따라서 래피드스크립트는 익명 함수, DOM 조작과 같은 자바스크립트 기능에 파이썬의 깔끔한 구문을 적용하고 j쿼리 또는 Node.js와 같은 자바스크립트 라이브러리를 활용할 수 있는 기능을 제공함으로써 2가지의 장점을 모두 지원한다. 즉, 래피드스크립트에서 생성된 코드를 사용해 웹 페이지나 노드 앱을 구동할 수 있다.

래피드스크립트의 또 다른 편리한 기능은 가능한 경우 연산을 위해 파이썬과 자바스크립트 명명법을 모두 제공한다는 점이다. 예를 들어 j쿼리에 사용되는 $ 특수 기호는 래피드스크립트에서 그대로 작동하며, 배열은 .push(자바스크립트)와 .append(파이썬) 메서드를 모두 지원할 수 있다. 그러나 이 프로젝트는 2021년 5월을 마지막으로 업데이트가 되지 않고 있으므로 실험적 프로젝트로 간주해야 한다.
 

파이스크립트

같은 기반 기술을 사용하는 브라이썬과 마찬가지로 파이스크립트(PyScript)는 파이썬을 브라우저에서 직접 실행할 수 있게 해준다. 파이스크립트는 웹어셈블리로 이식된 파이썬 런타임인 파이오다이드(Pyodide) 프로젝트를 사용해서 파이썬을 웹 스크립팅 언어로 실행하기에 적합한 브라우저 환경을 구성한다.

파이스크립트는 자바스크립트와 파이썬 환경 간의 양방향 통신을 가능하게 해준다. 예를 들어 파이썬 스크립트가 문서 객체 모델과 함께 작동하면서 자바스크립트 코드를 호출하고 반환되는 결과로 작업할 수 있다. 파이썬 애플리케이션은 브라우저를 출력 디바이스로도 사용할 수 있다. 예를 들어 파이썬 print() 명령을 사용해 웹 페이지로 바로 출력을 쓸 수 있다. 콘솔로 출력을 인쇄하는 것과 거의 같은 방식이다.

파이스크립트는 파이PI(PyPI) 패키지 인덱스에서 사용 가능한 패키지를 다루는 방법도 제공하지만 의도한 대로 동작하지 않는 경우도 있다. 예를 들어 파이스크립트는 HTTP 요청을 다루기 위한 requests 라이브러리 또는 다른 파이썬 툴과 아직 호환되지 않는다. 하지만 파이스크립트는 이 작업을 똑같이 실행할 수 있는 자바스크립트의 fetch 메서드를 위한 래퍼를 제공한다.
 

트랜스크립트

트랜스크립트(Transcrypt)라는 이름을 듣고 타입스크립트를 떠올린다면 크게 어긋난 생각은 아니다. 파이썬을 자바스크립트로 트랜스파일한다는 기본 개념은 같기 때문이다. 또한 람다와 같은 구조체, 여러 클래스에 걸친 복수 상속을 포함해 원본 파이썬 코드의 구조와 관용구를 그대로 유지하려고 노력한다.

또한 원본 파이썬을 가리키는, 트랜스파일된 코드에 대한 소스 맵을 생성할 수 있으므로 개발자는 생성된 자바스크립트가 아닌 이 코드를 사용해 디버깅할 수 있다. 문서에 따르면 트랜스크립트는 파이썬이 자체 코드를 파싱하는 방법에 프로그래밍 방식으로 접근할 수 있게 해주는 C파이썬의 추상 구문 트리 모듈을 사용해서 이러한 작업을 수행한다.

트랜스크립트의 큰 장점 중 하나는 문서 객체 모델에 대한 자동 접근이다. 예를 들어 파이썬에서 document.getElementById에 액세스하면 변환된 코드는 자바스크립트에서 document.getElementById를 사용한다. 프레임워크를 사용해서 DOM 조작을 하려는 프로그래머를 위해 트랜스크립트로 리액트와 머터리얼 UI 라이브러리를 사용하여 자바스크립트 애플리케이션을 작성하기 위한 온라인 단계별 자습서가 제공된다.

이와 연관된 프로젝트이며 아직 많은 부분이 알려지지 않은 넘스크립트(Numscrypt)가 있다. 넘스크립트는 넘파이 수학 및 통계 라이브러리를 자바스크립트로 이식한다. 현재 넘스크립트는 넘파이 기능의 일부지만, 행렬 연산 등 가장 보편적으로 사용되는 기능을 제공한다. 넘스크립트는 2021년 이후로 업데이트되지 않았다.
editor@itworld.co.kr

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.