본문으로 건너뛰기

Bottle 웹 프레임워크 소개

Bottle은 파이썬을 사용하여 웹 애플리케이션을 구축하기 위한 빠르고 간단하며 가벼운 웹 프레임워크입니다. 복잡한 작업을 처리할 수 있는 충분한 기능을 제공하면서도 사용하기 쉽도록 설계되었습니다. Bottle은 최소주의 철학을 따르며, 웹 애플리케이션을 개발하는 데 필요한 핵심 도구와 기능만 제공합니다.

이 튜토리얼에서는 Bottle 웹 프레임워크의 역사, 기능 및 예제를 살펴보겠습니다.

역사

Bottle은 2010년 Marcel Hellkamp에 의해 파이썬용 마이크로 웹 프레임워크로 만들어졌습니다. Flask와 Sinatra와 같은 다른 마이크로 프레임워크에서 영감을 받았습니다. Bottle은 간결성, 속도 및 사용 편의성으로 인해 인기를 얻었습니다.

기능

라우팅

Bottle의 주요 기능 중 하나는 라우팅 시스템입니다. URL을 파이썬 함수나 메서드에 매핑하여 웹 애플리케이션의 동작을 정의하는 것이 쉽습니다. 다음은 간단한 라우트의 예입니다:

from bottle import route, run

@route('/')
def index():
return "안녕, 세상!"

run(host='localhost', port=8080)

이 예제에서 @route('/') 데코레이터는 루트 URL을 index 함수에 매핑합니다. 사용자가 루트 URL(http://localhost:8080/)을 방문하면 함수가 호출되고 "안녕, 세상!"이 응답으로 반환됩니다.

템플릿

Bottle에는 내장된 템플릿 엔진이 포함되어 있어 웹 애플리케이션의 논리와 프레젠테이션을 분리할 수 있습니다. 템플릿을 사용하여 미리 정의된 자리 표시자에 데이터를 삽입하여 동적 HTML 페이지를 생성할 수 있습니다. 다음은 예제입니다:

from bottle import route, run, template

@route('/greeting/<name>')
def greeting(name):
return template('안녕, {{name}}!', name=name)

run(host='localhost', port=8080)

이 예제에서 greeting 함수는 URL에서 name 매개변수를 가져와 템플릿에 name 변수로 전달합니다. 템플릿 엔진은 {{name}}을 제공된 값으로 대체하여 개인화된 인사말을 생성합니다.

요청 처리

Bottle은 HTTP 요청을 처리하기 위한 편리한 메서드를 제공합니다. 헤더, 쿼리 매개변수, 폼 데이터와 같은 요청 데이터에 쉽게 접근할 수 있습니다. 다음은 예제입니다:

from bottle import route, run, request

@route('/login')
def login():
username = request.query.get('username')
password = request.query.get('password')

# 로그인 로직 수행

return "로그인 성공!"

run(host='localhost', port=8080)

이 예제에서 login 함수는 URL의 쿼리 매개변수에서 usernamepassword를 가져옵니다. 이 데이터를 사용하여 필요한 로그인 로직을 수행하고 응답을 반환할 수 있습니다.

미들웨어

Bottle은 미들웨어를 지원하며, 요청 및 응답 객체가 라우트 핸들러에 도달하기 전에 수정될 수 있습니다. 이 기능은 인증, 로깅 및 오류 처리와 같은 작업에 유용합니다. 다음은 예제입니다:

from bottle import route, run, request, response

def authentication_middleware(callback):
def wrapper(*args, **kwargs):
# 인증 로직 수행

if not authenticated:
response.status = 401
return "인증되지 않음"

return callback(*args, **kwargs)

return wrapper

@route('/protected')
@authentication_middleware
def protected_route():
return "이 보호된 라우트에 액세스할 수 있습니다"

run(host='localhost', port=8080)

이 예제에서 authentication_middleware 함수는 콜백 함수를 추가 로직으로 래핑합니다. 사용자가 인증되지 않은 경우, 401 Unauthorized 상태 코드가 반환됩니다.

예제

할일 목록 웹 애플리케이션

다음은 Bottle을 사용한 간단한 할일 목록 웹 애플리케이션의 예입니다:

from bottle import route, run, template, request

todos = []

@route('/')
def index():
return template('index', todos=todos)

@route('/add', method='POST')
def add_todo():
todo = request.forms.get('todo')
todos.append(todo)
return template('index', todos=todos)

run(host='localhost', port=8080)

이 예제에서 애플리케이션은 할일 목록을 표시하고 사용자가 새로운 할일을 추가할 수 있습니다. index 라우트는 index 템플릿을 렌더링하며, todos 목록을 변수로 전달합니다. add_todo 라우트는 폼 제출을 처리하고 새로운 할일을 목록에 추가합니다.

REST API

Bottle은 RESTful API를 생성하기 위해 사용할 수도 있습니다. 다음은 작업 관리를 위한 간단한 API의 예입니다:

from bottle import route, run, request, response

tasks = []

@route('/tasks', method='GET')
def list_tasks():
return {'tasks': tasks}

@route('/tasks', method='POST')
def create_task():
task = request.json.get('task')
tasks.append(task)
response.status = 201
return {'message': '작업이 생성되었습니다'}

run(host='localhost', port=8080)

이 예제에서 /tasks 엔드포인트는 GET 및 POST 메서드를 지원합니다. list_tasks 함수는 작업 목록을 포함하는 JSON 응답을 반환합니다. create_task 함수는 작업 데이터가 포함된 JSON 페이로드를 받아와 목록에 추가하고 성공 메시지를 반환합니다.

더 많은 정보와 문서는 공식 Bottle 웹사이트에서 확인할 수 있습니다: https://bottlepy.org/