파이썬 Bottle 프레임워크란?

Bottle은 파이썬에서 사용되는 경량 마이크로 웹 프레임워크로, 간결하고 빠른 웹 애플리케이션 개발에 중점을 둡니다. 모든 것이 하나의 파일에 들어갈 수 있으며, 외부 종속성 없이 간단한 프로젝트에 적합합니다. 특히, RESTful API, 웹 서비스 또는 소형 웹 애플리케이션을 신속하게 구축할 때 유용합니다.

주요 특징

  • 파일 하나에 모든 것: Bottle 애플리케이션은 하나의 파일에 담길 수 있어 간단하고 관리하기 쉽습니다.
  • 종속성 없음: Bottle은 자체적으로 동작하며, 추가적인 라이브러리가 필요하지 않습니다.
  • 간편한 URL 라우팅: 요청 경로(URL)와 해당 경로에 대한 처리를 쉽게 매핑할 수 있습니다.
  • 빠른 템플릿 엔진 내장: 내장된 템플릿 엔진을 사용하여 HTML 페이지를 쉽게 렌더링할 수 있습니다.
  • 내장 서버 지원: 기본 HTTP 서버를 내장하고 있어 별도의 웹 서버 설정 없이 바로 실행 가능합니다.

설치 방법

Bottle을 설치하려면 pip을 사용하여 간단히 설치할 수 있습니다.

pip install bottle

1. 기본 Bottle 예제

Bottle의 가장 간단한 예제는 Hello World 애플리케이션입니다. 이는 웹 브라우저에서 URL을 입력하면 "Hello World"라는 메시지를 반환하는 서버입니다.

from bottle import route, run

# 기본 경로에 대한 처리
@route('/')
def hello():
    return "Hello World!"

# 서버 실행
run(host='localhost', port=8080)

설명

  • @route('/'): 경로('/')에 대해 요청이 들어오면 hello() 함수를 호출하여 응답합니다.
  • run(host='localhost', port=8080): 애플리케이션을 로컬에서 실행하고, 브라우저에서 http://localhost:8080으로 접속하면 응답을 확인할 수 있습니다.

2. URL 라우팅 예제

Bottle의 라우팅 시스템을 사용하면 다양한 URL을 처리할 수 있습니다.

from bottle import route, run

# 사용자 이름을 URL 경로로 받아서 출력
@route('/hello/<name>')
def greet(name):
    return f"Hello, {name}!"

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

설명

  • @route('/hello/<name>'): 경로 /hello/ 뒤에 사용자가 입력한 이름을 받습니다. 예를 들어, http://localhost:8080/hello/Alice로 접속하면 "Hello, Alice!"가 출력됩니다.

3. GET 및 POST 요청 처리 예제

Bottle을 사용하여 GET 및 POST 요청을 처리할 수 있습니다. HTML 폼을 통해 POST 요청을 보내고, 서버에서 해당 데이터를 처리하는 예제입니다.

from bottle import route, run, template, request

# GET 요청 시 폼을 보여줌
@route('/login')
def login_form():
    return '''
        <form action="/login" method="post">
            Username: <input name="username" type="text" />
            Password: <input name="password" type="password" />
            <input value="Login" type="submit" />
        </form>
    '''

# POST 요청 처리
@route('/login', method='POST')
def login_submit():
    username = request.forms.get('username')
    password = request.forms.get('password')

    if username == "admin" and password == "secret":
        return f"Welcome, {username}!"
    else:
        return "Login failed."

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

설명

  • /login 경로로 GET 요청이 들어오면 로그인 폼을 보여줍니다.
  • 폼을 제출하면 POST 요청으로 사용자 이름과 비밀번호가 전송되고, 서버는 이를 처리하여 로그인 결과를 반환합니다.

4. 템플릿 사용 예제

Bottle은 내장된 템플릿 엔진을 사용하여 HTML을 동적으로 생성할 수 있습니다. 다음은 템플릿을 사용하여 사용자 이름을 동적으로 HTML 페이지에 표시하는 예제입니다.

from bottle import route, run, template

# 템플릿을 사용한 응답
@route('/hello/<name>')
def greet(name):
    return template('<b>Hello {{name}}</b>!', name=name)

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

설명

  • template() 함수는 템플릿을 처리하고 동적 HTML을 반환합니다. 템플릿 안에서 {{name}}은 Python에서 전달된 변수 name으로 대체됩니다.

5. 정적 파일 제공 예제

Bottle을 사용하여 정적 파일(이미지, CSS, JavaScript 등)을 제공할 수도 있습니다.

from bottle import route, run, static_file

# 정적 파일을 제공하는 경로 설정
@route('/static/<filename>')
def serve_static(filename):
    return static_file(filename, root='./static')

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

설명

  • static_file() 함수는 지정된 경로에서 파일을 찾아 반환합니다. root='./static'은 파일을 ./static 디렉터리에서 찾도록 설정한 것입니다.
  • 브라우저에서 http://localhost:8080/static/example.png과 같이 정적 파일을 요청할 수 있습니다.

6. Bottle + JSON API 예제

RESTful API를 만들 때도 Bottle은 매우 유용합니다. 다음은 JSON 데이터를 반환하는 API 예제입니다.

from bottle import route, run, response
import json

# JSON 데이터를 반환하는 경로
@route('/api/data')
def api_data():
    response.content_type = 'application/json'
    return json.dumps({'name': 'Alice', 'age': 30})

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

설명

  • /api/data 경로는 JSON 형식으로 데이터를 반환합니다. response.content_typeapplication/json으로 설정하여 클라이언트가 반환되는 데이터를 JSON으로 인식하게 합니다.
  • 브라우저나 API 클라이언트에서 이 경로에 요청하면 JSON 응답을 받을 수 있습니다.

결론

Bottle은 파이썬에서 간단한 웹 애플리케이션을 구축할 때 적합한 프레임워크로, 설치와 사용이 매우 간단하면서도 필요한 대부분의 기능을 제공합니다. URL 라우팅, GET/POST 요청 처리, 템플릿 시스템, 정적 파일 제공, JSON API 생성 등 다양한 기능을 통해 웹 애플리케이션 개발을 빠르고 간결하게 할 수 있습니다.

더 복잡한 기능이나 확장된 애플리케이션이 필요하면 말씀해 주세요!

+ Recent posts