프로젝트에 고려하는 요소 중 하나는 데이터를 전송하는 '방식'에 관한 내용이다.
오늘은 그 방식인 'GET'/'POST' 가 어떤 장단점을 가지는지 알고,
실제 예제를 통해 실습을 진행해 보자 한다.

### 오늘은 데이터 전송 방식에 대해 알아봅니다
### python 언어를 이용합니다.
### flaks 서버를 이용합니다.
1. 데이터 전통 방식 GET / POST ?
이 두가지 데이터 전송 방식을 한 마디로 설명하면 다음과 같다.
- GET 방식 : 데이터를 URL에 포함해 요청.
- POST 방식 : 데이터를 HTTP헤더 본문에 포함해 요청.
간단한 예시로 음식점에 간 상황을 생각해보자.

[ENFP]인 당신은 마음에 드는 메뉴를 보자마자 이렇게 외친다.
"싸장님! 원 햄버거 플리즈!"
(그리고 매장 안의 모든 사람들은 주목을 받았다..)
이에 반하여,

극한의 ISTJ인 당신의 친구는 점원과의 대화를 피하고 싶었고, 종이에
'햄버거 하나, 콜라 하나 주세요.'
라는 글을 써서 점원에게 수줍게 전달했다.
이때
당신의 메뉴 전달 방식(데이터 전달 방식)은, GET방식
친구의 메뉴 전달 방식은, POST방식
으로 생각하면 직관적으로 이해가 쉽다.(정리하자면 다음과 같다.)
GET
- 데이터를 URL에 포함시켜 요청
- 데이터가 URL에 보이므로 민감한 정보를 전송하는 데 적합하지 않음
- 주로 데이터 검색 또는 조회에 사용
- URL에 데이터가 포함되어 있으므로 북마크나 공유하기 쉬움
POST
- 데이터를 HTTP 헤더의 본문에 포함시켜 요청
- 데이터가 URL에 보이지 않음
- 주로 데이터의 생성, 수정, 삭제 등에 사용
- 민감한 정보를 전송하는 데 더 적합
2. 플라스크로 GET / POST 실습
이제 데이터 전달을 실습해 보자. 실습을 위해 아래의 총 4가지 파일을 만들자.
- app.py - 파이썬 / 플라스크 서버
- index.html - html / 초기 화면
- getResult.html - html / get방식의 결과 화면
- postResult.html - html / post방식의 결과 화면
이때 주의할 점은 .html파일들은(index.html, getResult.html,postResult.html)은
[templates]이라는 폴더 내부에 만들어야 flaks가 실행된다.
- app.py - 파이썬 / 플라스크 서버
### 플라스크 코드 ###
from flask import Flask, render_template, request
app = Flask(__name__)
# 기본 index 페이지
@app.route('/')
def index():
return render_template("index.html")
# post 페이지로 이동
@app.route('/postResult', methods=['POST','GET'])
def postResult():
# msg_input(POST방식으로 데이터 전송)
msg_input_post = request.form["msg_input_post"]
return render_template("postResult.html", msg_input_post = msg_input_post)
# get 페이지로 이동
@app.route('/getResult', methods=['POST','GET'])
def getResult():
# msg_input(Get방식으로 데이터 전송)
msg_input_get = request.args.get("msg_input_get")
return render_template("getResult.html", msg_input_get = msg_input_get)
if __name__ == '__main__':
app.run('0.0.0.0',port=5000, debug=True)
- index.html - html / 초기 화면
<h1>이곳은 index페이지 입니다</h1>
<p><h3>Post로 전달할 단어를 적어주세요</h3></p>
<form action="/postResult" method="post" value="post">
<input type="text" name="msg_input_post" placeholder="질문을 입력하세요">
<input type="submit">
</form>
<p><h3>Get으로 전달할 단어를 적어주세요</h3></p>
<form action="/getResult" method="get" value="get">
<input type="text" name="msg_input_get" placeholder="질문을 입력하세요">
<input type="submit">
</form>
- getResult.html - html / get방식의 결과 화면
<h1>이곳은 get 페이지입니다</h1>
<h2>{{msg_input_get}}</h2>
- postResult.html - html / post방식의 결과 화면
<h1>이곳은 post 페이지입니다</h1>
<h2>{{msg_input_post}}</h2>
이 과정이 끝났다면
python app.py
를 터미널 창에 실행하자.

그 결과는 다음과 같다.
[index 결과]

[postResult 결과]

[getResult 결과]

페이지의 url을 살펴보면 GET방식과 POST방식의 더욱 명확한 차이를 알 수 있다.
GET 방식 : 127.0.0.1:5000/getResult?msg_input_get=Get방식인데요%3F
POST 방식 : 127.0.0.1:5000/postResult