5. 웹 프레임워크 및 API 개발
5.1. Flask 웹 프레임워크
5.1.1. Flask 소개
5.1.1.1. Flask 웹 프레임워크 개요
Flask는 파이썬으로 작성된 가벼운 웹 프레임워크입니다. 웹 사이트나 웹 애플리케이션을 개발하는데 필요한 기본적인 기능을 제공하면서, 확장성이 매우 뛰어납니다.
5.1.1.2. Flask의 특징
Flask는 마이크로 프레임워크라고도 불립니다. 이는 Flask가 최소한의 기능만을 가지고 있지만, 다양한 확장을 통해 필요한 기능을 추가할 수 있음을 의미합니다. 예를 들어, 데이터베이스를 다루는 기능이나, 사용자 인증 기능 등은 Flask 자체에는 없지만, Flask-SQLAlchemy나 Flask-Login과 같은 확장을 사용하면 이런 기능들을 쉽게 추가할 수 있습니다.
5.1.2. Flask 기본 사용법
5.1.2.1. Flask 설치 및 환경 설정
Flask를 설치하는 방법은 매우 간단합니다. 파이썬의 패키지 관리 시스템인 pip을 이용하면 몇 초만에 Flask를 설치할 수 있습니다. 아래와 같이 입력하면 됩니다.
pip install flask
5.1.2.2. Flask로 간단한 웹 애플리케이션 만들기
Flask로 웹 애플리케이션을 만드는 것은 매우 간단합니다. 아래는 "Hello, World!"를 출력하는 간단한 Flask 애플리케이션입니다.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(debug=True)
위 코드를 app.py라는 파일로 저장한 후, 터미널에서 python app.py라고 입력하면 웹 서버가 시작되고, 웹 브라우저를 통해 http://localhost:5000에 접속하면 'Hello, World!'를 볼 수 있습니다.
@app.route('/')는 URL 라우팅을 설정하는 부분입니다. 이 코드는 '/' URL에 대한 요청이 들어오면 hello_world 함수를 실행하라는 의미입니다. hello_world 함수는 'Hello, World!' 문자열을 반환하므로, 웹 브라우저는 이 문자열을 출력하게 됩니다.
다음으로 넘어가기 전에, 이 코드를 실행해 보고 'Hello, World!' 메시지를 웹 브라우저에서 확인해 보세요. 파이썬의 웹 개발은 이렇게 간단하게 시작할 수 있습니다!
5.2. Django 웹 프레임워크
5.2.1. Django 소개
5.2.1.1. Django 웹 프레임워크 개요
Django는 파이썬으로 작성된 또 다른 웹 프레임워크로, Flask와는 달리 "배터리 포함" 웹 프레임워크라고 불립니다. 이는 Django가 웹 애플리케이션을 개발하는데 필요한 거의 모든 기능을 기본적으로 제공한다는 뜻입니다.
5.2.1.2. Django의 특징
Django는 웹 개발에 필요한 데이터베이스 관련 기능, 사용자 인증, 관리자 패널, 폼 처리 등의 기능을 내장하고 있습니다. 또한, Django는 MTV(Model-Template-View) 패턴을 사용하는 것으로 유명합니다. 이는 데이터를 처리하는 Model, 사용자에게 보이는 Template, 그리고 이 둘을 연결하는 View로 애플리케이션을 구조화하는 방식입니다.
5.2.2. Django 기본 사용법
5.2.2.1. Django 설치 및 환경 설정
Django 역시 pip를 이용해 간단하게 설치할 수 있습니다. 아래와 같이 입력하면 됩니다.
pip install django
5.2.2.2. Django로 간단한 웹 애플리케이션 만들기
Django로 웹 애플리케이션을 만들기 위해 가장 먼저 해야 할 일은 새로운 Django 프로젝트를 만드는 것입니다. Django 프로젝트는 여러 앱으로 구성될 수 있는데, 각 앱은 하나의 기능을 담당합니다.
아래의 명령을 통해 새로운 Django 프로젝트를 생성하고, 그 프로젝트 내에 새로운 앱을 만들어보겠습니다.
django-admin startproject mysite
cd mysite
python manage.py startapp hello
이제 hello 앱의 views.py 파일에 아래와 같이 코드를 작성합니다.
from django.http import HttpResponse
from django.shortcuts import render
def hello_world(request):
return HttpResponse("Hello, World!")
그리고 mysite 디렉토리의 urls.py 파일에 아래와 같이 코드를 추가합니다.
from django.contrib import admin
from django.urls import path
from hello.views import hello_world
urlpatterns = [
path('admin/', admin.site.urls),
path('hello/', hello_world),
]
이제 터미널에서 아래의 명령을 실행하면, 웹 서버가 시작됩니다.
python manage.py runserver
웹 브라우저를 통해 http://localhost:8000/hello에 접속하면 'Hello, World!'를 볼 수 있습니다.
5.3. API 개발 및 배포
5.3.1. RESTful API 이해
5.3.1.1. RESTful API 개념
REST(REpresentational State Transfer)는 웹 서비스를 설계하는 방법론 중 하나입니다. RESTful API는 이 REST 원칙에 따라 설계된 웹 서비스 API를 말합니다. RESTful API는 HTTP 메서드(GET, POST, PUT, DELETE 등)를 이용해 자원을 생성, 조회, 수정, 삭제하는 기능을 제공합니다.
5.3.1.2. RESTful API 설계 원칙
RESTful API 설계 시에는 다음과 같은 원칙을 지켜야 합니다.
- 자원(Resource)의 식별: 각 자원은 고유한 URI를 가지고 있어야 합니다.
- 메시지를 통한 자원의 표현: 자원은 JSON, XML 등의 형태로 표현되어야 합니다.
- 자기 설명적인 메시지: 메시지는 자신을 어떻게 처리해야 하는지 충분한 정보를 포함해야 합니다.
- HATEOAS(Hypertext As The Engine Of Application State): 클라이언트가 서버로부터 어떤 동작을 할 수 있는지에 대한 정보를 얻어야 합니다.
- Stateless: 각 요청은 서버에서 다른 요청과 독립적으로 처리되어야 합니다.
- 캐시 가능: 클라이언트는 응답을 캐싱하고, 이를 재사용할 수 있어야 합니다.
5.3.2. API 개발 및 배포
5.3.2.1. Flask로 RESTful API 개발하기
Flask는 RESTful API 개발을 매우 간단하게 해줍니다. 아래는 Flask를 이용해 간단한 RESTful API를 만드는 예제입니다.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/data', methods=['GET'])
def get_data():
data = {'name': 'John', 'age': 30, 'job': 'developer'} # 임의의 데이터
return jsonify(data) # 데이터를 JSON 형태로 반환
if __name__ == '__main__':
app.run(debug=True)
이 코드는 /api/data라는 URL로 GET 요청이 오면, 임의의 데이터를 JSON 형태로 반환하는 API를 만드는 코드입니다. 이와 같이, Flask에서는 URL 라우팅과 HTTP 메서드를 지정하는 것만으로 간단하게 API를 만들 수 있습니다.
5.3.2.2. Django로 RESTful API 개발하기
Django로 RESTful API를 개발하기 위해서는 Django REST Framework라는 별도의 라이브러리를 사용하는 것이 일반적입니다. Django REST Framework는 Django의 기본 기능을 확장하여 RESTful API 개발을 돕는 기능들을 제공합니다.
Django REST Framework를 설치하려면 아래와 같이 입력합니다.
pip install djangorestframework
이제 Django REST Framework를 이용해 간단한 API를 만들어보겠습니다. hello 앱의 views.py 파일에 아래와 같이 코드를 작성합니다.
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view(['GET'])
def get_data(request):
data = {'name': 'John', 'age': 30, 'job': 'developer'} # 임의의 데이터
return Response(data) # 데이터를 JSON 형태로 반환
그리고 mysite 디렉토리의 urls.py 파일에 아래와 같이 코드를 추가합니다.
from django.contrib import admin
from django.urls import path
from hello.views import get_data
urlpatterns = [
path('admin/', admin.site.urls),
path('api/data', get_data),
]
이제 웹 브라우저를 통해 http://localhost:8000/api/data에 접속하면 JSON 형태의 데이터를 볼 수 있습니다.
5.4. 웹 소켓 사용
5.4.1. 웹 소켓 이해
5.4.1.1. 웹 소켓 개념
웹 소켓(WebSocket)은 웹 서버와 클라이언트 간에 실시간 양방향 데이터 전송을 가능하게 하는 기술입니다. 웹 소켓을 사용하면, 서버와 클라이언트는 한 번의 연결 설정 후에 계속해서 데이터를 주고받을 수 있습니다.
5.4.1.2. 웹 소켓의 필요성
웹 소켓이 필요한 이유는 실시간 데이터 전송이 필요한 애플리케이션에서 HTTP와 같은 일반적인 요청-응답 모델로는 충분하지 않기 때문입니다. 예를 들어, 채팅 애플리케이션, 실시간 데이터 시각화, 온라인 게임 등에서 웹 소켓이 사용됩니다.
5.4.2. 웹 소켓 활용
5.4.2.1. Flask에서 웹 소켓 사용하기
Flask에서 웹 소켓을 사용하려면 Flask-SocketIO라는 별도의 라이브러리를 사용해야 합니다. 아래와 같이 입력하여 설치할 수 있습니다.
pip install flask-socketio
이제 Flask-SocketIO를 이용해 간단한 실시간 채팅 애플리케이션을 만들어보겠습니다. 아래는 서버 측의 코드입니다.
from flask import Flask, render_template
from flask_socketio import SocketIO, send
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/')
def index():
return render_template('index.html') # 클라이언트에게 index.html 파일을 전달
@socketio.on('message')
def handle_message(message):
send(message, broadcast=True) # 클라이언트로부터 받은 메시지를 모든 클라이언트에게 전달
if __name__ == '__main__':
socketio.run(app)
여기서 index.html은 클라이언트 측의 웹 페이지 파일이며, 이 파일에서는 웹 소켓을 통해 서버와 통신합니다.
5.4.2.2. Django에서 웹 소켓 사용하기
Django에서 웹 소켓을 사용하려면 Django Channels라는 별도의 라이브러리를 사용해야 합니다. Django Channels는 Django의 기본 기능을 확장하여 웹 소켓과 같은 비동기 통신을 지원합니다.
Django Channels를 설치하려면 아래와 같이 입력합니다.
pip install channels
이제 Django Channels를 이용해 간단한 실시간 채팅 애플리케이션을 만들어보겠습니다. Django Channels에서는 웹 소켓 통신을 관리하기 위해 Consumer라는 개념을 사용합니다.
hello 앱의 consumers.py 파일에 아래와 같이 코드를 작성합니다.
from channels.generic.websocket import AsyncWebsocketConsumer
import json
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
await self.send(text_data=json.dumps({
'message': message
}))
이제 Django Channels를 설정하고, 이 Consumer를 사용하여 웹 소켓 통신을 처리하도록 설정하면, 실시간 채팅 애플리케이션을 만드는 데 필요한 서버 측의 코드 작성이 완료됩니다.
'GD's IT Lectures : 기초부터 시리즈 > 파이썬(Python) 기초부터 ~' 카테고리의 다른 글
[파이썬(PYTHON) : 고급] GUI 프로그래밍 (0) | 2023.05.14 |
---|---|
[파이썬(PYTHON) : 고급] 머신러닝 및 딥러닝 (0) | 2023.05.14 |
[파이썬(PYTHON) : 고급] 데이터베이스 연동 (2) | 2023.05.13 |
[파이썬(PYTHON) : 고급] 성능 최적화 (0) | 2023.05.13 |
[파이썬(PYTHON) : 고급] 디자인 패턴 (0) | 2023.05.12 |
댓글