본문으로 건너뛰기

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 및 그 기능에 대해 더 알아보려면 공식 웹사이트를 방문할 수 있습니다.