본문으로 건너뛰기

JustPy: 강력한 웹 애플리케이션을 구축하기 위한 파이썬 라이브러리

JustPy는 파이썬 코드만을 사용하여 웹 애플리케이션을 구축할 수 있는 파이썬 라이브러리입니다. 이는 모든 기술 수준의 개발자가 쉽게 접근할 수 있도록 설계되었습니다. JustPy는 선언적 프로그래밍 패러다임을 따르며, 파이썬 함수와 클래스를 사용하여 애플리케이션의 구조와 동작을 정의합니다.

소개​

기존의 웹 개발에서는 HTML, CSS, JavaScript와 같은 여러 기술을 함께 사용해야 하는 경우가 많습니다. JustPy는 파이썬 방식으로 웹 애플리케이션을 생성할 수 있는 간단한 방법을 제공하여 이러한 과정을 간소화합니다. JustPy를 사용하면 파이썬 코드 작성에 집중할 수 있고, 라이브러리가 나머지를 처리하도록 할 수 있습니다.

역사​

JustPy는 2020년에 Martin Reurings에 의해 개발되었습니다. 이는 React JavaScript 라이브러리의 간결함과 사용 편의성에서 영감을 받았습니다. Martin은 파이썬 개발자들이 기존의 파이썬 지식을 활용하여 웹 애플리케이션을 구축할 수 있는 유사한 경험을 제공하고자 했습니다.

기능​

1. 반응형 프로그래밍​

JustPy의 핵심 기능 중 하나는 반응형 프로그래밍입니다. 반응형 프로그래밍을 통해 기존 데이터가 변경될 때마다 사용자 인터페이스를 자동으로 업데이트하여 동적인 웹 애플리케이션을 생성할 수 있습니다. 이는 JustPy의 반응형 컴포넌트를 통해 구현됩니다.

다음은 JustPy에서 반응형 프로그래밍을 보여주는 예시입니다:

import justpy as jp

def count(app):
wp = jp.WebPage()
count = jp.Data(0)

button = jp.Button(text='Click me', a=wp, classes='m-2 p-1 bg-blue-500 text-white')
output = jp.Div(text='0', a=wp, classes='text-xl')

@button.click
def increment(event):
count.value += 1
output.text = str(count.value)

return wp

jp.justpy(count)

이 예시에서는 JustPy 웹 페이지를 반환하는 count 함수를 정의합니다. 함수 내에서 jp.Data 클래스를 사용하여 반응형 값을 나타내는 count 변수를 생성합니다. 그런 다음 버튼과 div 요소를 생성하고 @button.click 데코레이터를 사용하여 콜백 함수를 정의합니다. 이 함수는 count 값을 증가시키고 div 요소의 텍스트를 업데이트합니다.

이 코드를 실행하면 버튼과 count 값을 보여주는 div 요소가 있는 웹 페이지가 표시됩니다. 버튼을 클릭할 때마다 count 값이 증가하고 div 요소가 자동으로 업데이트됩니다.

2. 컴포넌트 기반 아키텍처​

JustPy는 React와 Vue.js와 유사한 컴포넌트 기반 아키텍처를 따릅니다. 컴포넌트는 재사용 가능한 구성 요소로 사용자 인터페이스와 관련된 로직을 캡슐화합니다.

다음은 JustPy에서 컴포넌트 기반 아키텍처를 보여주는 예시입니다:

import justpy as jp

class Counter(jp.Div):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.count = jp.Data(0)
self.button = jp.Button(text='Click me', a=self, classes='m-2 p-1 bg-blue-500 text-white')
self.output = jp.Div(a=self, classes='text-xl')

@jp.justpy
def increment(self, msg):
self.count.value += 1
self.output.text = str(self.count.value)

def app():
wp = jp.WebPage()
counter = Counter(a=wp)
return wp

jp.justpy(app)

이 예시에서는 jp.Div 컴포넌트를 확장하는 Counter 클래스를 정의합니다. Counter 클래스 내에서 카운터 컴포넌트의 구조와 동작을 정의합니다. jp.Data 클래스를 사용하여 반응형 count 변수를 생성하고, 버튼과 div 요소를 카운터 컴포넌트의 자식으로 정의합니다.

이 코드를 실행하면 카운터 컴포넌트가 있는 웹 페이지가 표시됩니다. 버튼을 클릭할 때마다 count 값이 증가하고 div 요소가 자동으로 업데이트됩니다.

3. 통합된 플로팅​

JustPy는 인기 있는 Plotly 라이브러리와 완벽하게 통합되어 웹 애플리케이션에서 대화형 플롯과 차트를 생성할 수 있습니다.

다음은 JustPy에서 통합된 플로팅을 보여주는 예시입니다:

import justpy as jp
import pandas as pd

def plot(app):
wp = jp.WebPage()
data = pd.DataFrame({'x': [1, 2, 3, 4, 5], 'y': [2, 4, 6, 8, 10]})
figure = jp.plot(data, kind='scatter', x='x', y='y', a=wp)
return wp

jp.justpy(plot)

이 예시에서는 JustPy 웹 페이지를 반환하는 plot 함수를 정의합니다. 함수 내에서 Pandas 라이브러리를 사용하여 데이터프레임을 생성하고, jp.plot 함수에 데이터프레임과 플롯 유형, x축과 y축을 전달합니다. jp.plot 함수는 웹 페이지에 추가되는 JustPy 플롯 컴포넌트를 반환합니다.

이 코드를 실행하면 데이터프레임에서 정의된 데이터 포인트를 보여주는 산점도 플롯이 있는 웹 페이지가 표시됩니다.

예시​

JustPy의 기능에 대해 알아보았으니, 웹 애플리케이션 구축에 JustPy를 사용하는 방법을 알아보기 위해 몇 가지 예시를 살펴보겠습니다.

예시 1: 할 일 목록​

import justpy as jp

class TodoList(jp.Div):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.input = jp.Input(placeholder='할 일 추가', a=self, classes='m-2 p-1')
self.button = jp.Button(text='추가', a=self, classes='m-2 p-1 bg-blue-500 text-white')
self.list = jp.Ul(a=self, classes='list-disc list-inside')

@jp.justpy
def add_task(self, msg):
task = self.input.value
self.input.value = ''
jp.Li(text=task, a=self.list)

def app():
wp = jp.WebPage()
todo_list = TodoList(a=wp)
return wp

jp.justpy(app)

이 예시에서는 사용자가 할 일을 할 수 있는 할 일 목록 컴포넌트인 TodoList를 생성합니다. 이 컴포넌트는 입력 필드, 버튼 및 정렬되지 않은 목록으로 구성됩니다. 버튼을 클릭하면 입력 필드에 입력된 텍스트를 가진 새로운 목록 항목이 생성됩니다.

예시 2: 실시간 채팅 애플리케이션​

import justpy as jp

class ChatApp(jp.Div):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.messages = jp.Div(a=self, classes='h-64 overflow-auto')
self.input = jp.Input(placeholder='메시지를 입력하세요...', a=self, classes='m-2 p-1')
self.button = jp.Button(text='보내기', a=self, classes='m-2 p-1 bg-blue-500 text-white')

@jp.justpy
def send_message(self, msg):
message = self.input.value
self.input.value = ''
jp.P(text=message, a=self.messages)

def app():
wp = jp.WebPage()
chat_app = ChatApp(a=wp)
return wp

jp.justpy(app)

이 예시에서는 실시간으로 메시지를 보낼 수 있는 채팅 애플리케이션 컴포넌트인 ChatApp을 생성합니다. 이 컴포넌트는 메시지를 표시할 div 요소, 메시지를 입력할 input 필드 및 메시지를 보낼 버튼으로