1. 🚀 프레임워크와 프로젝트 구현의 중요성
PRG 패턴 (Post/Redirect/Get)
PRG 패턴은 사용자가 데이터를 여러 번 보내는 것을 방지하는 기법입니다. 이 패턴을 적용하면 웹 애플리케이션에서 동일한 데이터가 여러 번 전송되지 않도록 할 수 있습니다. 예를 들어, 사용자가 데이터를 제출한 후 브라우저가 페이지를 새로 고침하거나 뒤로 가기를 할 경우, 동일한 POST 요청을 다시 보내는 문제를 방지합니다.
- 작동 원리:
- 사용자가 데이터를 입력하고 폼을 제출하면 POST 요청이 발생합니다.
- 서버는 데이터를 처리한 후, Redirect 응답을 보내 새 페이지로 이동하도록 합니다.
- 사용자가 새 페이지를 요청하면 GET 요청이 발생하고, 서버는 그에 맞는 페이지를 반환합니다.
백엔드와 프론트엔드
백엔드 기술에만 집중하면 기술적인 한계에 부딪힐 수 있습니다. 프론트엔드와의 협업은 시스템의 사용성을 높이고, 백엔드 개발자의 가치를 더욱 높여줄 수 있습니다. 특히, 데이터 시각화나 사용자 경험(UI/UX)에 대한 이해가 중요합니다. 프론트엔드를 이해하면 더 효과적인 데이터를 처리하고, 효율적인 사용자 인터페이스를 구현할 수 있습니다.
실제 서비스화 과정
책에 나오는 예제들은 대부분 기초적인 수준에 국한되어 있습니다. 실제 서비스화를 위해서는 더 많은 시간과 노력이 필요합니다. 즉, 실무에서는 책에서 배우지 못한 문제들, 예를 들어 실시간 데이터 처리나 고도화된 기능을 구현해야 할 때가 많습니다. 이러한 상황에 대비하려면, 실제 서비스를 만드는 프로젝트 경험이 중요합니다.
2. 🗂️ 정적인 파일 관리와 URL_FOR의 중요성
정적 페이지와 파일 관리
정적 페이지는 서버나 클라이언트에서 변경되지 않는 고정된 페이지입니다. 예를 들어, HTML, CSS, JavaScript 파일들은 정적인 페이지로 처리됩니다. 플라스크에서는 이를 처리하기 위해 별도의 static 폴더를 만들고, 여기에 정적 파일들을 보관합니다.
- 예시 코드:여기서 home.html은 정적 콘텐츠를 가진 페이지로, 서버에서 요청이 들어오면 이를 반환합니다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/home')
def home():
return render_template('home.html') # templates 폴더에 위치한 HTML 파일을 렌더링
if __name__ == '__main__':
app.run(debug=True)
정적 파일 처리 최적화
플라스크는 정적 파일을 처리할 때 기본적인 기능을 제공합니다. 하지만 웹 애플리케이션이 커지고 성능을 고려해야 할 때, Nginx와 같은 웹 서버를 사용하여 속도를 최적화할 수 있습니다. 정적 파일의 빠른 처리를 위해 이러한 서버를 도입하는 것이 좋습니다.
URL_FOR의 활용
URL_FOR는 URL을 자동으로 생성해주는 기능입니다. 이 기능을 사용하면 파일 경로나 엔드포인트를 수동으로 입력할 필요 없이, 코드 내에서 동적으로 URL을 생성할 수 있어 유지보수가 용이하고, 경로 변경 시에도 효율적으로 관리할 수 있습니다.
- 예시 코드:위 코드는 styles.css 파일을 static 폴더에서 찾아 자동으로 경로를 설정하는 방식입니다. 경로 변경 시에도 이 코드만 수정하면 되므로 효율적입니다.
<link rel="stylesheet" href="{{ url_for('static', filename='styles.css') }}">
3. 🚀 Flask 요청 처리 이해하기
Flask 요청 처리 (GET, POST)
플라스크에서 GET 요청은 데이터를 가져오는 방식입니다. 사용자에게 데이터를 반환할 때 주로 사용됩니다. 반면, POST 요청은 서버에 데이터를 보내는 데 사용됩니다. 예를 들어, 폼 데이터를 제출할 때 POST 요청이 발생합니다.
GET 요청 처리
GET 요청은 URL을 통해 데이터를 요청하는 방식입니다. 예를 들어, 사용자가 /home을 요청하면 해당 페이지의 데이터를 서버가 반환합니다.
- 예시 코드:
@app.route('/home', methods=['GET'])
def home():
return "홈페이지입니다"
POST 요청 처리
POST 요청은 데이터를 서버로 전송할 때 사용됩니다. 사용자로부터 입력을 받을 때 POST 방식이 필요합니다.
- 예시 코드:
from flask import request
@app.route('/submit', methods=['POST'])
def submit():
username = request.form['username'] # 폼에서 데이터를 받음
return f"Hello, {username}"
테스트 리퀘스트 컨텍스트
플라스크에서는 test_request_context를 이용하여 가짜 요청을 시뮬레이션할 수 있습니다. 이를 통해 실제 요청 없이 코드가 정상적으로 동작하는지 확인할 수 있습니다.
- 예시 코드:
with app.test_request_context('/home'):
print(url_for('home')) # /home URL을 자동으로 생성
3.1. ️ Flask의 요청 처리 이해하기
GET과 POST 요청 차이
GET 요청은 데이터를 요청하는 것이고, POST 요청은 데이터를 서버에 제출하는 것입니다. 실제 웹 애플리케이션에서는 두 가지 요청을 모두 활용하여 클라이언트와 서버 간의 데이터 처리를 합니다.
POST 요청의 구현
HTML 폼에서 데이터를 입력받을 때 POST 방식으로 서버에 제출하는데, 이를 Flask에서 어떻게 처리할 수 있는지 위의 예제 코드를 통해 확인할 수 있습니다.
3.2. ️ 플라스크 URL_FOR 와 엔드포인트 사용법
URL4와 엔드포인트
플라스크에서 URL4는 엔드포인트 이름을 사용하여 URL을 동적으로 생성합니다. URL4를 사용하면 주소가 바뀌더라도 코드 내에서 수정할 부분이 줄어듭니다. 이를 통해 유지보수와 확장성이 용이해집니다.
- 예시 코드:위 예제에서 url_for('profile', username='John')를 사용하면 /user/John URL이 동적으로 생성됩니다.
@app.route('/user/<username>', methods=['GET'])
def profile(username):
return f"User profile: {username}"
4. 📜 Flask 라우팅과 리다이렉트 기능 설명
리다이렉트와 URL_FOR
플라스크에서 리다이렉트는 사용자를 다른 URL로 강제로 이동시키는 기능입니다. redirect() 함수를 사용하여 리다이렉트를 구현할 수 있습니다. URL_FOR를 함께 사용하면 리다이렉트된 URL을 동적으로 생성할 수 있습니다.
- 예시 코드:
from flask import redirect, url_for
@app.route('/go_home')
def go_home():
return redirect(url_for('home'))
5. 🎉 Flask 템플릿에서 데이터 전달 및 조건문 사용
Flask 템플릿
Flask 템플릿을 사용하면 HTML 파일 내에서 파이썬 변수와 로직을 포함할 수 있습니다. 템플릿에서 조건문을 활용하여 데이터를 동적으로 출력하거나 조건에 맞는 결과를 보여줄 수 있습니다.
- 예시 코드:
<p>
{% if age >= 18 %}
성인입니다.
{% else %}
미성년자입니다.
{% endif %}
</p>
변수 전달
Flask에서 render_template() 함수를 사용하여 변수를 템플릿에 전달할 수 있습니다.
- 예시 코드:
@app.route('/check_age', methods=['POST'])
def check_age():
age = request.form['age']
return render_template('check_age.html', age=age)
'특강' 카테고리의 다른 글
3-1 개발과 개발자로서 성장하는 법 with 파머 (0) | 2025.04.23 |
---|---|
2-1 Flask 요청 처리 이해하기 특강 with 파머강사 (0) | 2025.04.22 |
1-3 Flask 특강 웹 개발 환경 설정 및 기본 기능 구현 with 파머강사 (0) | 2025.04.21 |
1-2 Flask 특강 프레임워크와 개발 방향성: Flask, Django, FastAPI with 파머강사 (0) | 2025.04.21 |
1-1 Flask 특강 동기부여 with 파머강사 (0) | 2025.04.21 |