본문으로 건너뛰기

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()

이 예시에서, name과 age 두 개의 필드를 가진 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/