[파이썬] 웹 애플리케이션 아키텍처와 REST 아키텍처
웹 애플리케이션은 클라이언트와 서버 간의 상호작용을 가능하게 하는 아키텍처입니다. 이 아키텍처는 클라이언트가 웹 페이지를 요청하고 서버가 해당 요청에 대한 응답을 반환하는 방식으로 동작합니다. 웹 애플리케이션 아키텍처의 중요한 개념 중 하나는 REST (Representational State Transfer) 아키텍처입니다.
REST 아키텍처는 웹 기반의 애플리케이션을 설계하기 위한 원칙과 제약을 제공합니다. 이 아키텍처는 자원을 표현하고 자원에 대한 상태를 처리하기 위한 통신 방식을 명시합니다. REST 아키텍처의 주요 특징은 다음과 같습니다:
- 자원 (Resource): 모든 자원은 고유한 식별자 (URI)를 가지며, 클라이언트는 이 식별자를 통해 자원에 접근합니다.
- 표현 (Representation): 자원은 여러 형태의 표현으로 클라이언트에 제공될 수 있습니다. 예를 들어, JSON, XML, HTML 등의 형태로 자원을 반환할 수 있습니다.
- 상태 전달 (State Transfer): 클라이언트와 서버 간의 통신은 상태를 전달하지 않는 Stateless한 방식으로 이루어져야 합니다. 서버는 각 요청에서 필요한 정보를 모두 제공해야 합니다.
- 유니폼 인터페이스 (Uniform Interface): 클라이언트와 서버 간의 통신을 위한 인터페이스는 일관성 있고 일반적으로 사용 가능해야 합니다.
Python은 RESTful 웹 애플리케이션을 구현하기에 매우 적합한 언어입니다. 다음은 Python을 사용하여 간단한 RESTful API를 구현하는 예시입니다.
from flask import Flask, jsonify, request
app = Flask(__name__)
# 예시 자원
books = [
{
'id': 1,
'title': '파이썬 코딩의 기술',
'author': '브렛 슬라킨',
},
{
'id': 2,
'title': '클린 코드',
'author': '로버트 C. 마틴',
}
]
# 모든 책 목록 반환
@app.route('/api/books', methods=['GET'])
def get_books():
return jsonify(books)
# 특정 책 반환
@app.route('/api/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
for book in books:
if book['id'] == book_id:
return jsonify(book)
return jsonify({'message': '책을 찾을 수 없습니다.'}), 404
# 새로운 책 추가
@app.route('/api/books', methods=['POST'])
def add_book():
new_book = request.get_json()
books.append(new_book)
return jsonify(new_book), 201
# 책 삭제
@app.route('/api/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
for book in books:
if book['id'] == book_id:
books.remove(book)
return jsonify({'message': '책이 삭제되었습니다.'})
return jsonify({'message': '책을 찾을 수 없습니다.'}), 404
if __name__ == '__main__':
app.run()
위의 예시는 Flask 웹 프레임워크를 사용하여 구현된 간단한 RESTful API입니다. /api/books
엔드포인트에서는 모든 책 목록을 반환하고, /api/books/<book_id>
엔드포인트에서는 특정 책 정보를 반환합니다. 또한, /api/books
엔드포인트에서 POST 요청을 통해 새로운 책을 추가하고, /api/books/<book_id>
엔드포인트에서 DELETE 요청을 통해 책을 삭제할 수 있습니다.
이와 같이 Python을 사용하여 RESTful 웹 애플리케이션을 구현할 수 있으며, 이를 통해 자원을 관리하고 상태를 전달하는 효율적인 웹 애플리케이션을 개발할 수 있습니다.