[파이썬] 웹 애플리케이션 아키텍처와 REST 아키텍처

웹 애플리케이션은 클라이언트와 서버 간의 상호작용을 가능하게 하는 아키텍처입니다. 이 아키텍처는 클라이언트가 웹 페이지를 요청하고 서버가 해당 요청에 대한 응답을 반환하는 방식으로 동작합니다. 웹 애플리케이션 아키텍처의 중요한 개념 중 하나는 REST (Representational State Transfer) 아키텍처입니다.

REST 아키텍처는 웹 기반의 애플리케이션을 설계하기 위한 원칙과 제약을 제공합니다. 이 아키텍처는 자원을 표현하고 자원에 대한 상태를 처리하기 위한 통신 방식을 명시합니다. REST 아키텍처의 주요 특징은 다음과 같습니다:

  1. 자원 (Resource): 모든 자원은 고유한 식별자 (URI)를 가지며, 클라이언트는 이 식별자를 통해 자원에 접근합니다.
  2. 표현 (Representation): 자원은 여러 형태의 표현으로 클라이언트에 제공될 수 있습니다. 예를 들어, JSON, XML, HTML 등의 형태로 자원을 반환할 수 있습니다.
  3. 상태 전달 (State Transfer): 클라이언트와 서버 간의 통신은 상태를 전달하지 않는 Stateless한 방식으로 이루어져야 합니다. 서버는 각 요청에서 필요한 정보를 모두 제공해야 합니다.
  4. 유니폼 인터페이스 (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 웹 애플리케이션을 구현할 수 있으며, 이를 통해 자원을 관리하고 상태를 전달하는 효율적인 웹 애플리케이션을 개발할 수 있습니다.