wiki:it:programming:python:library_flask
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
wiki:it:programming:python:library_flask [2025/08/03 07:01] – 만듦 syjang0803 | wiki:it:programming:python:library_flask [2025/08/04 02:15] (현재) – 바깥 편집 127.0.0.1 | ||
---|---|---|---|
줄 7: | 줄 7: | ||
==== 1) Flask란? ==== | ==== 1) Flask란? ==== | ||
Flask는 파이썬으로 작성된 마이크로 웹 프레임워크입니다. ' | Flask는 파이썬으로 작성된 마이크로 웹 프레임워크입니다. ' | ||
+ | |||
+ | |||
+ | ---- | ||
==== 2) Flask를 선택하는 이유 ==== | ==== 2) Flask를 선택하는 이유 ==== | ||
Flask는 다음과 같은 장점들로 인해 많은 개발자에게 사랑받고 있습니다: | Flask는 다음과 같은 장점들로 인해 많은 개발자에게 사랑받고 있습니다: | ||
- | * | + | * **경량성**: |
- | * | + | * **유연성**: |
- | * | + | * **쉬운 학습 곡선**: 직관적인 API와 잘 정리된 문서 덕분에 빠르게 배우고 시작할 수 있습니다. |
- | * | + | * **확장성**: |
- | * | + | * **RESTful API 개발**: 가벼운 특성 덕분에 RESTful API 서버 구축에 매우 적합합니다. |
- | ---- | ||
===== 2. 개발 환경 설정 ===== | ===== 2. 개발 환경 설정 ===== | ||
Flask 애플리케이션 개발을 시작하기 전에 필요한 개발 환경을 설정해야 합니다. | Flask 애플리케이션 개발을 시작하기 전에 필요한 개발 환경을 설정해야 합니다. | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) 파이썬 설치 ==== | ==== 1) 파이썬 설치 ==== | ||
가장 먼저 파이썬이 시스템에 설치되어 있어야 합니다. 파이썬 공식 웹사이트에서 최신 버전을 다운로드하여 설치하는 것을 권장합니다. | 가장 먼저 파이썬이 시스템에 설치되어 있어야 합니다. 파이썬 공식 웹사이트에서 최신 버전을 다운로드하여 설치하는 것을 권장합니다. | ||
- | * | + | * **공식 웹사이트**: |
- | * | + | * **설치 확인**: 터미널이나 명령 프롬프트에서 다음 명령어를 실행하여 파이썬 설치 여부와 버전을 확인합니다. |
+ | |||
< | < | ||
python3 --version | python3 --version | ||
</ | </ | ||
+ | |||
+ | |||
+ | ---- | ||
==== 2) 가상 환경 설정 ==== | ==== 2) 가상 환경 설정 ==== | ||
가상 환경(Virtual Environment)은 프로젝트별로 독립적인 파이썬 환경을 제공하여, | 가상 환경(Virtual Environment)은 프로젝트별로 독립적인 파이썬 환경을 제공하여, | ||
- | * | + | * **가상 환경 생성**: 프로젝트 폴더로 이동하여 다음 명령어를 실행합니다. |
+ | |||
< | < | ||
python3 -m venv venv | python3 -m venv venv | ||
</ | </ | ||
- | | + | |
- | * | + | |
- | * | + | * **가상 환경 활성화**: |
+ | * **macOS / Linux**: | ||
+ | |||
< | < | ||
source venv/ | source venv/ | ||
</ | </ | ||
- | | + | |
+ | | ||
+ | |||
< | < | ||
venv\Scripts\activate.bat | venv\Scripts\activate.bat | ||
</ | </ | ||
- | | + | |
+ | | ||
+ | |||
< | < | ||
.\venv\Scripts\Activate.ps1 | .\venv\Scripts\Activate.ps1 | ||
</ | </ | ||
- | | + | |
+ | | ||
+ | |||
+ | |||
+ | ---- | ||
==== 3) Flask 설치 ==== | ==== 3) Flask 설치 ==== | ||
- | 가상 환경이 활성화된 상태에서 | + | 가상 환경이 활성화된 상태에서 |
+ | |||
< | < | ||
pip install Flask | pip install Flask | ||
</ | </ | ||
- | | + | |
+ | | ||
+ | |||
< | < | ||
pip show Flask | pip show Flask | ||
</ | </ | ||
- | ---- | ||
===== 3. " | ===== 3. " | ||
가장 기본적인 Flask 웹 애플리케이션을 만들어보고 실행해 봅시다. | 가장 기본적인 Flask 웹 애플리케이션을 만들어보고 실행해 봅시다. | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) 기본 구조 ==== | ==== 1) 기본 구조 ==== | ||
Flask 애플리케이션의 최소한의 구조는 단일 파이썬 파일로 구성될 수 있습니다. 일반적으로 '' | Flask 애플리케이션의 최소한의 구조는 단일 파이썬 파일로 구성될 수 있습니다. 일반적으로 '' | ||
+ | |||
+ | |||
+ | ---- | ||
==== 2) 라우팅 (Routing) ==== | ==== 2) 라우팅 (Routing) ==== | ||
- | Flask에서 라우팅은 특정 URL 경로에 대한 요청을 어떤 파이썬 함수가 처리할지 연결하는 과정입니다. 이는 | + | Flask에서 라우팅은 특정 URL 경로에 대한 요청을 어떤 파이썬 함수가 처리할지 연결하는 과정입니다. 이는 |
+ | |||
+ | |||
+ | ---- | ||
==== 3) 애플리케이션 실행 ==== | ==== 3) 애플리케이션 실행 ==== | ||
개발 서버를 사용하여 Flask 애플리케이션을 실행할 수 있습니다. | 개발 서버를 사용하여 Flask 애플리케이션을 실행할 수 있습니다. | ||
+ | |||
+ | |||
+ | ---- | ||
==== 4) 코드 예제 ==== | ==== 4) 코드 예제 ==== | ||
'' | '' | ||
+ | |||
+ | |||
< | < | ||
# app.py | # app.py | ||
줄 95: | 줄 138: | ||
</ | </ | ||
- | * | + | * **코드 설명**: |
- | * `from flask import Flask`: Flask 클래스를 임포트합니다. | + | * '' |
- | * `app = Flask(__name__)`: Flask 애플리케이션 인스턴스를 생성합니다. | + | * '' |
- | * `@app.route('/' | + | * '' |
- | * `def hello_world(): | + | * '' |
- | * `@app.route('/ | + | * '' |
- | * `if __name__ == ' | + | * '' |
- | * `app.run(debug=True)`: Flask 개발 서버를 실행합니다. | + | * '' |
+ | |||
+ | * **애플리케이션 실행**: | ||
+ | * 터미널에서 가상 환경이 활성화된 상태로 다음 명령어를 실행합니다. | ||
- | * | ||
- | * | ||
< | < | ||
python app.py | python app.py | ||
</ | </ | ||
- | | + | |
+ | | ||
+ | |||
< | < | ||
export FLASK_APP=app.py | export FLASK_APP=app.py | ||
줄 115: | 줄 163: | ||
flask run | flask run | ||
</ | </ | ||
- | * | ||
- | * | ||
- | ---- | + | * 서버가 시작되면 웹 브라우저를 열고 '' |
+ | * '' | ||
===== 4. 템플릿 사용하기 (Jinja2) ===== | ===== 4. 템플릿 사용하기 (Jinja2) ===== | ||
대부분의 웹 애플리케이션은 동적인 HTML 페이지를 생성해야 합니다. Flask는 Jinja2 템플릿 엔진을 사용하여 이를 지원합니다. | 대부분의 웹 애플리케이션은 동적인 HTML 페이지를 생성해야 합니다. Flask는 Jinja2 템플릿 엔진을 사용하여 이를 지원합니다. | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) 템플릿이란? | ==== 1) 템플릿이란? | ||
템플릿은 HTML 구조를 포함하며, | 템플릿은 HTML 구조를 포함하며, | ||
+ | |||
+ | |||
+ | ---- | ||
==== 2) 템플릿 렌더링 ==== | ==== 2) 템플릿 렌더링 ==== | ||
- | Flask에서 템플릿을 사용하려면 | + | Flask에서 템플릿을 사용하려면 |
+ | |||
+ | |||
+ | ---- | ||
==== 3) 데이터 전달 ==== | ==== 3) 데이터 전달 ==== | ||
- | `render_template` 함수에 키워드 인자(keyword arguments)를 통해 템플릿으로 데이터를 전달할 수 있습니다. 전달된 데이터는 Jinja2 템플릿 내에서 변수로 접근할 수 있습니다. | + | '' |
+ | |||
+ | |||
+ | ---- | ||
==== 4) 템플릿 파일 구조 ==== | ==== 4) 템플릿 파일 구조 ==== | ||
프로젝트 루트 디렉토리에 '' | 프로젝트 루트 디렉토리에 '' | ||
+ | |||
+ | |||
< | < | ||
your-flask-project/ | your-flask-project/ | ||
줄 141: | 줄 203: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
< | < | ||
줄 166: | 줄 230: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
# app.py | # app.py | ||
줄 188: | 줄 254: | ||
app.run(debug=True) | app.run(debug=True) | ||
</ | </ | ||
- | * `{{ variable }}`: 템플릿으로 전달된 변수의 값을 출력합니다. | ||
- | * `{% control_structure %}`: `if` 문, `for` 루프와 같은 제어 흐름을 정의합니다. | ||
- | ---- | + | * ''< |
+ | * ''< | ||
===== 5. 정적 파일 (CSS, JS, 이미지) ===== | ===== 5. 정적 파일 (CSS, JS, 이미지) ===== | ||
웹 애플리케이션은 HTML 외에도 CSS, JavaScript, 이미지 파일과 같은 정적 리소스를 필요로 합니다. Flask는 이들을 효율적으로 제공하는 메커니즘을 가지고 있습니다. | 웹 애플리케이션은 HTML 외에도 CSS, JavaScript, 이미지 파일과 같은 정적 리소스를 필요로 합니다. Flask는 이들을 효율적으로 제공하는 메커니즘을 가지고 있습니다. | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) 정적 파일 제공 ==== | ==== 1) 정적 파일 제공 ==== | ||
Flask는 기본적으로 애플리케이션 루트 디렉토리 내의 '' | Flask는 기본적으로 애플리케이션 루트 디렉토리 내의 '' | ||
+ | |||
+ | |||
+ | ---- | ||
==== 2) 템플릿에서 연결 ==== | ==== 2) 템플릿에서 연결 ==== | ||
- | HTML 템플릿에서 정적 파일을 참조할 때는 | + | HTML 템플릿에서 정적 파일을 참조할 때는 |
- | * `url_for(' | + | * '' |
+ | |||
+ | * **'' | ||
- | * | ||
< | < | ||
your-flask-project/ | your-flask-project/ | ||
줄 216: | 줄 290: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
body { | body { | ||
줄 229: | 줄 305: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
< | < | ||
줄 247: | 줄 325: | ||
</ | </ | ||
- | * | + | * **참고**: '' |
- | ---- | ||
===== 6. 양식 처리 (Forms) ===== | ===== 6. 양식 처리 (Forms) ===== | ||
사용자로부터 입력을 받기 위해 HTML 양식(form)을 사용하고, | 사용자로부터 입력을 받기 위해 HTML 양식(form)을 사용하고, | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) 요청 메서드 ==== | ==== 1) 요청 메서드 ==== | ||
- | 웹 양식은 주로 GET 또는 POST HTTP 메서드를 사용하여 데이터를 전송합니다. | + | 웹 양식은 주로 |
- | * | + | * **GET**: URL에 데이터를 포함하여 전송 (쿼리 문자열). 주로 데이터 조회에 사용. |
- | * | + | * **POST**: HTTP 요청 본문에 데이터를 포함하여 전송. 주로 데이터 생성, 업데이트에 사용. |
+ | |||
+ | |||
+ | ---- | ||
==== 2) 양식 데이터 접근 ==== | ==== 2) 양식 데이터 접근 ==== | ||
- | Flask에서는 | + | Flask에서는 |
- | * `request.method`: 현재 요청의 HTTP 메서드를 확인합니다. | + | * '' |
- | * `request.form`: POST 요청으로 전송된 양식 데이터에 접근합니다. 딕셔너리와 유사한 객체입니다. | + | * '' |
- | * `request.args`: GET 요청으로 전송된 쿼리 문자열 데이터에 접근합니다. | + | * '' |
+ | |||
+ | * **'' | ||
- | * | ||
< | < | ||
# app.py | # app.py | ||
줄 293: | 줄 378: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
< | < | ||
줄 318: | 줄 405: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
< | < | ||
줄 344: | 줄 433: | ||
</ | </ | ||
</ | </ | ||
- | * | ||
- | ---- | + | * '' |
===== 7. 데이터베이스 연동 ===== | ===== 7. 데이터베이스 연동 ===== | ||
- | 대부분의 동적 웹 애플리케이션은 데이터를 저장하고 관리하기 위해 데이터베이스를 사용합니다. Flask는 특정 데이터베이스를 강제하지 않지만, Flask-SQLAlchemy와 같은 확장을 통해 ORM(Object-Relational Mapping)을 쉽게 통합할 수 있습니다. | + | 대부분의 동적 웹 애플리케이션은 데이터를 저장하고 관리하기 위해 데이터베이스를 사용합니다. Flask는 특정 데이터베이스를 강제하지 않지만, |
+ | |||
+ | |||
+ | ---- | ||
==== 1) Flask-SQLAlchemy ==== | ==== 1) Flask-SQLAlchemy ==== | ||
- | Flask-SQLAlchemy는 Flask 애플리케이션에서 SQLAlchemy (파이썬의 인기 있는 ORM)를 사용하기 위한 편리한 래퍼(wrapper)입니다. SQLite는 가볍고 파일 기반의 데이터베이스로, | + | '' |
+ | |||
+ | * **설치**: | ||
- | * | ||
< | < | ||
pip install Flask-SQLAlchemy | pip install Flask-SQLAlchemy | ||
</ | </ | ||
- | * | + | * **간단한 예제 ('' |
+ | |||
< | < | ||
# app.py (기존 App 코드에 추가) | # app.py (기존 App 코드에 추가) | ||
줄 398: | 줄 494: | ||
db.session.add(new_user) | db.session.add(new_user) | ||
db.session.commit() | db.session.commit() | ||
- | flash(f' | + | flash(f' |
return redirect(url_for(' | return redirect(url_for(' | ||
except Exception as e: | except Exception as e: | ||
줄 417: | 줄 513: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
< | < | ||
줄 451: | 줄 549: | ||
</ | </ | ||
- | * | + | * **'' |
+ | |||
< | < | ||
< | < | ||
줄 490: | 줄 590: | ||
</ | </ | ||
- | * | + | * **테이블 생성**: 애플리케이션을 처음 실행할 때 '' |
- | ---- | ||
===== 8. 유용한 확장 기능 ===== | ===== 8. 유용한 확장 기능 ===== | ||
Flask의 ' | Flask의 ' | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) 주요 확장 기능 ==== | ==== 1) 주요 확장 기능 ==== | ||
- | * | + | * **Flask-WTF**: |
- | * | + | * **설치**: |
- | * | + | * **Flask-Login**: |
- | * | + | * **설치**: |
- | * | + | * **Flask-RESTful**: |
- | * | + | * **설치**: |
- | * | + | * **Flask-Migrate**: |
- | * | + | * **설치**: |
- | * | + | * **Flask-Mail**: |
- | * | + | * **설치**: |
이 확장 기능들은 Flask 생태계의 일부이며, | 이 확장 기능들은 Flask 생태계의 일부이며, | ||
- | ---- | ||
===== 9. 배포 고려사항 ===== | ===== 9. 배포 고려사항 ===== | ||
개발 서버는 개발 목적으로만 사용해야 하며, 실제 서비스 환경(Production)에는 적합하지 않습니다. 안정적인 운영을 위해서는 적절한 배포 전략이 필요합니다. | 개발 서버는 개발 목적으로만 사용해야 하며, 실제 서비스 환경(Production)에는 적합하지 않습니다. 안정적인 운영을 위해서는 적절한 배포 전략이 필요합니다. | ||
+ | |||
+ | |||
+ | ---- | ||
==== 1) WSGI 서버 ==== | ==== 1) WSGI 서버 ==== | ||
- | Flask는 WSGI(Web Server Gateway Interface) 표준을 따릅니다. 따라서 배포 시에는 WSGI 서버가 필요합니다. | + | Flask는 |
- | * | + | * **Gunicorn**: |
- | * | + | * **설치**: |
- | * | + | * **실행 예**: |
- | * | + | * **uWSGI**: 매우 강력하고 다양한 기능을 제공하는 |
- | * | + | * **설치**: |
+ | |||
+ | |||
+ | ---- | ||
==== 2) 웹 서버 (리버스 프록시) ==== | ==== 2) 웹 서버 (리버스 프록시) ==== | ||
- | WSGI 서버는 주로 애플리케이션을 실행하는 역할을 하며, HTTP 요청을 직접 처리하는 데는 한계가 있습니다. 따라서 Nginx나 Apache와 같은 웹 서버를 리버스 프록시로 사용하여 WSGI 서버 앞에 두는 것이 일반적입니다. | + | '' |
- | * | + | * **Nginx**: 높은 성능과 효율성을 자랑하는 웹 서버입니다. 정적 파일 서빙, 로드 밸런싱, SSL/TLS 종료 등에 사용됩니다. |
- | * | + | * **Apache**: 오랜 역사를 가진 웹 서버로, |
+ | |||
+ | |||
+ | ---- | ||
==== 3) 환경 변수 ==== | ==== 3) 환경 변수 ==== | ||
민감한 정보(예: 데이터베이스 비밀번호, | 민감한 정보(예: 데이터베이스 비밀번호, | ||
- | * | + | * **예시**: |
- | * `python-dotenv` 라이브러리를 사용하여 개발 환경에서 | + | * '' |
- | ---- | ||
====== 결론 ====== | ====== 결론 ====== | ||
이 가이드를 통해 파이썬 Flask 웹 애플리케이션 개발의 핵심적인 개념과 기술을 살펴보았습니다. 우리는 Flask의 소개, 개발 환경 설정, 기본적인 " | 이 가이드를 통해 파이썬 Flask 웹 애플리케이션 개발의 핵심적인 개념과 기술을 살펴보았습니다. 우리는 Flask의 소개, 개발 환경 설정, 기본적인 " | ||
- | Flask는 그 유연성과 확장성 덕분에 소규모 프로젝트부터 대규모 RESTful API 서버 구축에 이르기까지 다양한 용도로 활용될 수 있습니다. 이 가이드는 Flask 여정의 시작점이며, | + | Flask는 그 유연성과 확장성 덕분에 소규모 프로젝트부터 대규모 |
- | * | + | * **블루프린트(Blueprints)**: |
- | * | + | * **테스트**: |
- | * | + | * **오류 처리**: 사용자 친화적인 오류 페이지를 구현하는 방법. |
- | * | + | * **보안**: 일반적인 웹 보안 취약점으로부터 애플리케이션을 보호하는 방법. |
- | * | + | * **비동기 처리**: 웹소켓 또는 |
지속적인 학습과 실습을 통해 Flask 전문가로 성장하시길 바랍니다. | 지속적인 학습과 실습을 통해 Flask 전문가로 성장하시길 바랍니다. |
wiki/it/programming/python/library_flask.1754204484.txt.gz · 마지막으로 수정됨: 저자 syjang0803