본문으로 건너뛰기

Hug 웹 프레임워크 소개

Hug는 API 개발을 빠르고 쉽게 만들기 위해 설계된 Python 웹 프레임워크입니다. 이 프레임워크는 간단하고 신뢰성이 있으며 고성능을 지향하여 개발자가 빠르게 견고한 웹 서비스를 구축할 수 있도록 도와줍니다.

이 튜토리얼에서는 Hug 웹 프레임워크의 역사, 기능 및 사용 예제에 대해 알아보겠습니다.

역사

Hug는 2014년에 Timothée Peignier에 의해 기존 웹 프레임워크의 복잡성과 장황함에 대한 대응으로 만들어졌습니다. 목표는 Python으로 API를 간단하고 직관적으로 구축할 수 있는 방법을 제공하는 것이었습니다.

릴리스 이후로 Hug는 사용하기 쉽고 성능에 중점을 둔 점 때문에 개발자들 사이에서 인기를 얻었습니다. Python에서 RESTful 서비스 및 마이크로서비스를 구축하기 위한 선택 도구로 자리매김하였습니다.

Hug의 기능

Hug는 API를 구축하기 위한 강력한 프레임워크로서 여러 가지 기능을 제공합니다:

1. 사용하기 쉬움

Hug는 라우트 정의와 요청 처리를 위한 직관적인 API를 제공합니다. 개발자는 복잡한 개념이나 보일러플레이트 코드를 배우지 않고 빠르게 시작할 수 있습니다.

다음은 간단한 Hug API 엔드포인트의 예입니다:

import hug

@hug.get('/hello')
def hello():
return {'message': '안녕하세요, 세계여!'}

이 예에서는 '안녕하세요, 세계여!'라는 메시지와 함께 JSON 응답을 반환하는 GET 라우트 '/hello'를 정의합니다.

2. 자동 문서화

Hug는 작성한 코드를 기반으로 API에 대한 문서를 자동으로 생성합니다. 이를 통해 API 문서를 최신 상태로 유지하고 다른 개발자들이 접근할 수 있게 만들기 쉬워집니다.

Hug API의 자동으로 생성된 문서는 Hug API의 '/doc' 엔드포인트를 방문하여 액세스할 수 있습니다.

3. 입력 및 출력 유효성 검사

Hug는 입력 및 출력 유효성 검사를 위한 내장 지원을 제공하여 API 엔드포인트에 전달되는 데이터와 반환되는 데이터의 예상 형식을 보장합니다.

Hug에서 입력 유효성 검사를 사용하는 예는 다음과 같습니다:

import hug

@hug.get('/greet')
def greet(name: hug.types.text):
return f"안녕하세요, {name}!"

이 예에서 'name' 매개변수는 'text' 유형으로 정의되어 텍스트 값만 허용됨을 보장합니다. 텍스트가 아닌 값이 제공되면 Hug는 자동으로 유효성 검사 오류를 반환합니다.

4. 콘텐츠 협상

Hug를 사용하면 클라이언트의 요청에 따라 JSON, XML 또는 일반 텍스트와 같은 다른 콘텐츠 유형을 쉽게 처리할 수 있습니다. 이를 통해 클라이언트의 요구에 기반하여 적절한 콘텐츠 유형으로 응답할 수 있는 유연한 API를 구축할 수 있습니다.

Hug에서 콘텐츠 협상을 사용하는 예는 다음과 같습니다:

import hug

@hug.get('/data')
def get_data():
data = {'message': '안녕하세요, 세계여!'}
return hug.output_format(data, 'application/json')

이 예에서는 'hug.output_format' 함수를 사용하여 데이터를 JSON으로 반환하는 라우트를 정의합니다. 그러나 클라이언트가 다른 콘텐츠 유형을 요청하면 Hug가 자동으로 데이터를 해당 형식으로 변환합니다.

5. 미들웨어 지원

Hug는 미들웨어를 지원하여 API의 동작을 쉽게 확장하고 수정할 수 있습니다. 미들웨어 함수를 사용하여 인증, 로깅 또는 오류 처리와 같은 요청 처리 전후에 작업을 수행할 수 있습니다.

Hug에서 미들웨어를 사용하는 예는 다음과 같습니다:

import hug

def log_request_middleware(request, response):
print(f'요청: {request.method} {request.url}')

app = hug.API(__name__)
app.http.add_middleware(log_request_middleware)

@hug.get('/hello')
def hello():
return {'message': '안녕하세요, 세계여!'}

이 예에서는 각 들어오는 요청을 로그로 기록하는 미들웨어 함수 'log_request_middleware'를 정의합니다. 그런 다음 'add_middleware' 메소드를 사용하여 Hug API에 이 미들웨어를 추가합니다.

Hug 웹 프레임워크 사용 예제

이제 Hug를 사용하여 API를 구축하는 몇 가지 실용적인 예제를 살펴보겠습니다.

예제 1: Todo API

Hug를 사용하여 간단한 Todo API를 만들어 보겠습니다. 이 API는 사용자가 할 일을 만들고 읽고 업데이트하고 삭제할 수 있도록 합니다.

import hug

todos = []

@hug.get('/todos')
def get_todos():
return {'todos': todos}

@hug.post('/todos')
def create_todo(todo: hug.types.text):
todos.append(todo)
return {'message': '할 일이 성공적으로 생성되었습니다.'}

@hug.put('/todos/{id}')
def update_todo(id: hug.types.number, todo: hug.types.text):
if id < len(todos):
todos[id] = todo
return {'message': '할 일이 성공적으로 업데이트되었습니다.'}
else:
return {'message': '할 일을 찾을 수 없습니다.'}

@hug.delete('/todos/{id}')
def delete_todo(id: hug.types.number):
if id < len(todos):
del todos[id]
return {'message': '할 일이 성공적으로 삭제되었습니다.'}
else:
return {'message': '할 일을 찾을 수 없습니다.'}

이 예에서는 모든 할 일을 가져오기, 새 할 일 만들기, 기존 할 일 업데이트하기, 할 일 삭제하기 위한 엔드포인트를 정의합니다. 할 일은 메모리에 리스트로 저장됩니다.

예제 2: 날씨 API

OpenWeatherMap API를 사용하여 특정 위치의 날씨 예보를 가져오는 API를 만들어 보겠습니다.

import hug
import requests

@hug.get('/weather')
def get_weather(location: hug.types.text):
url = f'http://api.openweathermap.org/data/2.5/weather?q={location}&appid=YOUR_API_KEY'
response = requests.get(url)
data = response.json()
return data['weather'][0]['description']

이 예에서는 'location' 매개변수를 사용하여 특정 위치의 날씨 예보를 가져오는 엔드포인트를 정의합니다. API 키는 자신의 키로 대체해야 합니다.

Hug 및 그 기능에 대해 더 알아보려면 공식 웹사이트를 방문할 수 있습니다.