728x90
반응형
1. FastAPI와 Flask의 차이점
FastAPI와 Flask는 모두 Python으로 작성된 웹 프레임워크지만, 각각의 목적과 설계 철학, 제공하는 기능에 있어서 차이가 있습니다. 아래에서 두 프레임워크의 주요 차이점을 설명하겠습니다.
1.1 Flask
- 성숙도와 안정성: Flask는 2010년에 처음 출시되어 오랜 기간 동안 많은 프로젝트에서 사용되어 왔습니다. 이로 인해 광범위한 커뮤니티 지원과 풍부한 서드파티 라이브러리, 확장 기능을 자랑합니다.
- 간단하고 유연한 프레임워크: Flask는 "마이크로" 웹 프레임워크로 분류되며, 최소한의 기본 구조를 제공합니다. 이는 개발자가 필요에 따라 확장하고 맞춤 설정할 수 있는 유연성을 의미합니다.
- 동기식 처리: Flask는 기본적으로 동기 방식의 코드 처리를 사용합니다. 비동기 처리를 위해서는 추가적인 확장이나 복잡한 설정이 필요할 수 있습니다.
1.2 FastAPI
- 성능: FastAPI는 Starlette(비동기 웹 프레임워크) 위에 구축되어 있어 비동기 I/O를 지원합니다. 이는 고성능을 필요로 하는 애플리케이션에 적합하며, 특히 동시성 처리가 중요한 상황에서 Flask보다 뛰어난 성능을 제공할 수 있습니다.
- 비동기 지원: FastAPI는 Python의 비동기 및 await 기능을 기본적으로 지원하여 비동기 프로그래밍을 용이하게 합니다. 이를 통해 I/O 작업이 많은 애플리케이션의 처리 성능을 크게 향상시킬 수 있습니다.
- 타입 힌트와 자동 문서 생성: FastAPI는 Python의 타입 힌트를 활용하여 요청 및 응답 데이터의 검증을 자동으로 처리합니다. 또한, 이를 바탕으로 Swagger와 ReDoc을 이용한 API 문서를 자동으로 생성할 수 있습니다.
- 데이터 검증 및 직렬화: Pydantic 라이브러리의 사용으로 복잡한 데이터 검증과 직렬화 작업을 간편하게 처리할 수 있습니다. 이는 API 개발 시 일반적으로 필요한 작업을 매우 단순화합니다.
1.3 결론
- Flask: 단순하고 유연한 프로젝트, 또는 작고 단일 목적의 애플리케이션 개발에 적합합니다. 동기식 처리가 주를 이루는 경우나 기존 Python 생태계와의 통합이 중요한 경우에도 좋은 선택입니다.
- FastAPI: 고성능과 비동기 처리가 필요한 애플리케이션, 복잡한 데이터 처리와 검증이 많은 API 개발에 적합합니다. 또한, 타입 힌트와 자동 문서화 기능을 활용하고자 할 때 우수한 선택입니다.
프로젝트의 요구 사항과 선호도에 따라 적합한 프레임워크를 선택하는 것이 중요합니다.
2. Flask
- 이론 설명 링크 : https://just-record.github.io/flask/flask-basic/
- python의 웹 프레임워크로 자바 스크립트처럼 HTML의 요소에 접근하여 값을 수정하거나 스타일을 변경하는 등 다양한 웹 개발을 할 수 있다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html')
# http://localhost:5000/
@app.route('/member')
def member():
return render_template('member.html')
### 데이터
@app.route('/job/<jobname>')
def job(jobname):
# select * from users where job name = 'jo';
return render_template('job.html', jobname=jobname)
# http://localhost:5000/job/developer
if __name__ == '__main__':
app.run()
- 파이썬에서 @는 데코레이터이다. Flask 모듈의 route() 함수에 있는 내용을 사용할 수 있다.
- 기본주소는 http://localhost:5000/ 이고, @app.route('/member') 이면 기본주소에 해당 매개변수를 추가한 주소에 return값을 할당한다.
- render_template() : templates 폴더 안에 있는 html 파일을 반환한다.
- 변수는 render_template()함수의 두번째 매개 변수로 전달할 수 있다. html에서 해당 변수는 {{jobname}} 처럼 중괄호를 두번 사용해서 나타낸다.
<!DOCTYPE html>
<html>
<head>
<title>Job</title>
</head>
<body>
<h1>Job: {{jobname}}</h1>
</body>
</html>
- html에서는 중괄호를 두번 사용해서 변수를 표현한다.
from flask import Flask
app = Flask(__name__) # Flask 객체 생성(__name__ 이름으로)
@app.route('/board')
def board1():
return '<style>#test{color:red;}</style> <div id="test">Board</div>'
# http://localhost:5000/board
if __name__ == '__main__':
app.run()
- return에 render_template()함수가 아닌 html 코드를 직접 입력해 반환 받을 수 있다.
3. PostgreSQL
- 객체 관계형 데이터베이스 관리 시스템(ORDBMS)으로, 오픈소스 커뮤니티의 지원을 받으며 개발되는 SQL이다.
- ANSI SQL 표준을 광범위하게 지원하며, 동시에 특정 기능 확장이 된다.
- PostgreSQL은 오픈소스 라이센스 하에 배포되므로 무료로 사용할 수 있으며, 필요에 따라 수정하고 개선할 수 있다.
- 설치 설명 링크 : https://just-record.github.io/postgresql/postgresql-01/
- 이론 설명 링크 : https://just-record.github.io/postgresql/postgresql-04-python/
pip install psycopg2
- Python에서 PostgreSQL을 사용하기 위해 ‘psycopg2’ 모듈을 사용합니다.
- PostgreSQL 사용을 위해 pdAdmin을 설치합니다. 링크 : https://just-record.github.io/postgresql/postgresql-02/
- 테스트를 위해 pdAdmin을 실행해 스키마 > 테이블 > 컬럼을 만든다.
import psycopg2
conn = psycopg2.connect(
host="192.168.52.61",
database="postgres",
user="postgres",
password="1234"
)
cur = conn.cursor()
data = [("홍길동", 32), ("홍길순", 33)]
query = "INSERT INTO users (name, age) VALUES (%s, %s)"
cur.executemany(query, data)
conn.commit()
cur.execute("SELECT * FROM users")
rows = cur.fetchall()
for row in rows:
print(row)
- psycopg2 모듈을 import한다.
- psycopg2.connect() 메소드로 연결할 객체를 생성한다.
- cursor에 execute해서 쿼리문을 SQL로 보낸다.
- commit(), rollback() 함수로 트랜젝션을 한다.
4. python에서 flask를 이용해 get, post형식으로 웹페이지 열기
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/request_get_form')
def request_get_form():
return render_template('request_form.html')
@app.route('/request_get', methods = ['GET'])
def request_get():
name = request.args.get('name')
age = request.args.get('age')
return render_template('request_result.html', name=name, age=age)
@app.route('/request_post', methods = ['POST'])
def request_post():
name = request.form['name']
age = request.form['age']
return render_template('request_result.html', name=name, age=age)
if __name__ == '__main__':
app.run()
<!DOCTYPE html>
<html lang="ko">
<head>
<title>Flask Request</title>
</head>
<body>
<h1>A Link - get</h1>
<p><a href="/request_get?name=hong&age=17">request get</a></p>
<p></p>
<h1>Form - post</h1>
<form name="form_post" method="post" action="/request_post">
<p>Name: <input type="text" name="name" /></p>
<p>Age: <input type="text" name="age" /></p>
<p><input type="submit" ></p>
</form>
</body>
</html>
request_form.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask Render</title>
</head>
<body>
<h1>A Link get</h1>
<p>Name: {{name}}</p>
<p>Age: {{age}}</p>
</body>
</html>
request_result.html
'Coding 공부 > Big data & Python' 카테고리의 다른 글
[Big data & Python] Drawing_Star Mini Project ver 2.0 (0) | 2024.04.12 |
---|---|
[Big data & Python] Drawing_Star Mini Project(python + Flask + HTML) (0) | 2024.04.11 |
[Big data & Python] 미세먼지 농도 콘솔 출력 연습문제 (0) | 2024.04.02 |
[Big data & Python] JSON, 가상환경, MongoDB, API, CSV, GET과 POST 차이 (0) | 2024.04.02 |
[Big Data & Python] 로깅(Logging), YAML, throws, DAO(Data Access Object) (2) | 2024.03.23 |
댓글