본문으로 건너뛰기

Eve 웹 프레임워크 소개

Eve는 RESTful API를 구축하기 위한 강력하고 유연한 웹 프레임워크입니다. 이는 웹 애플리케이션을 만들고 배포하며 관리하는 과정을 단순화하기 위해 설계되었습니다. 직관적이고 표현력 있는 구문을 통해, Eve는 개발자가 보일러플레이트 코드 대신 비즈니스 로직 작성에 집중할 수 있도록 도와줍니다.

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

역사

Eve는 Nicola Iarocci에 의해 2013년에 만들어졌습니다. 이는 Flask 마이크로프레임워크와 Django REST 프레임워크에서 영감을 받았습니다. 탄생 이후, Eve는 단순성과 확장성을 위해 개발자들 사이에서 인기를 얻었습니다.

기능

Eve는 웹 애플리케이션 개발에 우수한 선택지가 되도록 몇 가지 기능을 제공합니다. 이 중 일부 주요 기능을 더 자세히 살펴보겠습니다:

1. 데이터 모델링

Eve는 간단한 도메인 특화 언어(Domain-Specific Language, DSL)를 사용하여 데이터 모델을 정의할 수 있도록 합니다. 이 DSL은 MongoDB의 쿼리 언어에서 영감을 받았으며, 데이터의 구조와 관계를 정의하는 것이 쉬워집니다.

다음은 Eve에서 데이터 모델을 정의하는 예시입니다:

from eve import Eve

app = Eve()

app.config['DOMAIN'] = {
'people': {
'schema': {
'name': {
'type': 'string',
'required': True
},
'age': {
'type': 'integer'
}
}
}
}

if __name__ == '__main__':
app.run()

이 예시에서, 우리는 people 컬렉션을 name (필수 문자열)과 age (정수) 두 개의 필드로 정의합니다.

2. RESTful API 생성

Eve는 정의한 데이터 모델에 기반하여 자동으로 RESTful API를 생성합니다. 이 API는 표준 CRUD(Create, Read, Update, Delete) 작업을 지원하며, 데이터의 쿼리 및 필터링을 위한 엔드포인트를 제공합니다.

예를 들어, 위에서 정의한 데이터 모델을 기반으로 Eve는 자동으로 다음과 같은 API 엔드포인트를 생성합니다:

  • GET /people: 모든 사람 조회
  • POST /people: 새로운 사람 생성
  • GET /people/{person_id}: 특정 사람 조회
  • PUT /people/{person_id}: 특정 사람 업데이트
  • DELETE /people/{person_id}: 특정 사람 삭제

3. 인증 및 권한 부여

Eve는 인증 및 권한 부여를 위한 내장된 기능을 제공합니다. 기본 인증 또는 토큰 기반 인증과 같은 인증 메커니즘을 쉽게 설정할 수 있습니다.

다음은 Eve에서 기본 인증을 활성화하는 예시입니다:

from eve import Eve
from eve.auth import BasicAuth

class MyBasicAuth(BasicAuth):
def check_auth(self, username, password, allowed_roles, resource, method):
# 여기서 인증 로직을 구현합니다
return username == 'admin' and password == 'password'

app = Eve(auth=MyBasicAuth)

if __name__ == '__main__':
app.run()

이 예시에서는 MyBasicAuth라는 사용자 정의 인증 클래스를 정의하고, 사용자 이름이 admin이고 비밀번호가 password인 경우에만 인증되도록 설정합니다. 이 로직을 수정하여 애플리케이션의 요구에 맞게 사용자 정의할 수 있습니다.

4. 유효성 검사 및 데이터 변환

Eve는 강력한 유효성 검사 및 데이터 변환 기능을 제공합니다. 데이터 모델의 각 필드에 대해 데이터 유형, 필수 필드, 사용자 정의 유효성 검사 함수와 같은 유효성 검사 규칙을 정의할 수 있습니다.

다음은 Eve에서 유효성 검사 규칙을 정의하는 예시입니다:

from eve import Eve

app = Eve()

app.config['DOMAIN'] = {
'people': {
'schema': {
'name': {
'type': 'string',
'required': True
},
'age': {
'type': 'integer',
'min': 18,
'max': 100
}
}
}
}

if __name__ == '__main__':
app.run()

이 예시에서는 age 필드가 18에서 100 사이의 정수여야 한다고 정의합니다.

5. 확장 지원

Eve는 추가 기능을 제공하는 확장을 지원합니다. 페이지네이션, 필터링, 캐싱 등의 기능을 지원하는 여러 커뮤니티 개발 확장이 있습니다.

이러한 확장을 Eve 애플리케이션에 쉽게 통합하여 기능을 향상시킬 수 있습니다.

예시

실제 Eve 사용법을 이해하기 위해 몇 가지 예시를 살펴보겠습니다.

예시 1: 간단한 API 생성

from eve import Eve

app = Eve()

app.config['DOMAIN'] = {
'people': {
'schema': {
'name': {
'type': 'string',
'required': True
},
'age': {
'type': 'integer'
}
}
}
}

if __name__ == '__main__':
app.run()

이 예시에서, nameage 두 개의 필드를 가진 people 컬렉션을 가진 간단한 API를 생성합니다. 이 코드를 실행하고 http://localhost:5000/people에 대한 GET 요청을 만들면 빈 JSON 응답을 받게됩니다.

예시 2: 요청 인증

from eve import Eve
from eve.auth import BasicAuth

class MyBasicAuth(BasicAuth):
def check_auth(self, username, password, allowed_roles, resource, method):
return username == 'admin' and password == 'password'

app = Eve(auth=MyBasicAuth)

if __name__ == '__main__':
app.run()

이 예시에서는 사용자 정의 인증 클래스 MyBasicAuth를 사용하여 기본 인증을 활성화합니다. 사용자 이름이 admin이고 비밀번호가 password인 경우에만 인증됩니다.

예시 3: 유효성 검사 및 데이터 변환

from eve import Eve

app = Eve()

app.config['DOMAIN'] = {
'people': {
'schema': {
'name': {
'type': 'string',
'required': True
},
'age': {
'type': 'integer',
'min': 18,
'max': 100
}
}
}
}

if __name__ == '__main__':
app.run()

이 예시에서는 age 필드에 대한 유효성 검사 규칙을 정의합니다. 이는 18에서 100 사이의 정수여야 한다는 것을 의미합니다. 잘못된 나이로 사람을 생성 또는 업데이트하려고 하면, Eve는 유효성 검사 오류를 반환합니다.

Eve에 대해 더 알아보려면 공식 웹사이트를 방문하세요: https://docs.python-eve.org/