μ€λ μ£Όμ μ¬ν (5/18, λͺ©μμΌ)
- λ³΅μ΅ - AWS, GETκ³Ό POST
- λ°ν μ€λΉ
μ€μ 9μλΆν° λ°€ 9μκΉμ§ μ΄ 12μκ°μ μμμ 곡λΆλ§ νλ 건 νλ€μ§ μμλ°, λλκ³ λ³΄μμ¬λ¦¬(?)κ° λ°λν΄μ λλ€κ° λ¦κ² μλ μΌμ΄ μ’
μ’
λ°μνλ€. λ¦μ μ·¨μΉ¨ β μμΉ¨ μΌμ° κΈ°μ β λ¦μ μ·¨μΉ¨ β (λ°λ³΅) ...
μ νλ€λ³΄λ μμΉ¨μ μ μ νΌκ³€ν΄μ§λ μ
μνμ΄... μ€λμ μΌμ° μμκ³ λ€μ§νλ©΄μ TIL 4μΌμ°¨ μμ± μμ.
λ΄μΌμ΄ λλ§μ λ°ν μΌ... λ°λ‘ κ³΅μ© μνΈλ₯Ό νμ λͺ©ν, ν΅μ¬ κΈ°λ₯, μλ‘κ² λ°°μ΄ κ²λ€, μκ°μ νμλ€κ³Ό ν¨κ» μμ±νλ€. μμ±ν μλ₯μ μμ λ¬Όλ€μ ν λλ‘ λ°ν λ΄λΉμ λΆμ΄ λ°ν μμμ 촬μνμ€ μμ .
μ€λ μμ΅μ μΉκ°λ° μ’
ν©λ° κ°μ 5μ£Όμ°¨μ μλ AWSμ λν΄ λ³΅μ΅ν΄λ³Ό μμ . (λ°λ‘ μ 리νμ§λ μμλ€) μΆκ°λ‘ GET
κ³Ό POST
λͺ
λ Ήμ λν κ²λ λ€μ νμ΅ νλλ°, 골머리 μνλ fetch()
λ¬Έμ λλμ΄ μ΄ν΄νκ² λμλ€. νλ ¨ν¨ γ
γ
POST
μμ² μ¬μ©νκΈ°app.py
μ index.html
κ°μ GET
κ³Ό POST
μμ²μ΄ μ΄λ»κ² λμκ°λμ§... λ€μ ν λ² κ³΅λΆνλ€. μ΄μ μμ±νλ pymongo
μ flask
μ λν κΈλ μ°Έκ³ μ©μΌλ‘ 첨λΆ.
π pymongoλ‘ MongoDB μμνκΈ°
π¨βπ¬ flask μμνκΈ°
1β£ κ°μμλ²(venv
)λ₯Ό μ΄κ³ flask
, pymongo
, dnspython
μ μ€μΉ
pip install flask pymongo dnspython
2β£ μ¬μ©ν νλ μμν¬λ₯Ό import
νκ³ , MongoDBμλ μ°κ²°
# νλ μμν¬ μν¬νΈ
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
# db μ°κ²°
from pymongo import MongoClient
client = MongoClient('λ΄ MongoDB URL')
db = client.dbsparta
POST
μμ²app.py
POST
= μ 보λ₯Ό μ μ₯(μμ±)νκ±°λ κ°±μ ν λ μ¬μ©νλ λͺ
λ Ήμ΄μ΄λ€. 'bucket_give'
λ₯Ό ν΅ν΄ λ€μ΄μ€λ μ 보λ₯Ό bucket_recieve
λ³μμ μ μ₯νλλ°, μ΄ 'bucket_give'
λ μλ πindex.html
μ save_bucket()
λ©μλλ‘λΆν° λ°μμ¨λ€.
@app.route("/bucket", methods=["POST"])
def bucket_post():
# 'bucket_give'λ₯Ό ν΅ν΄ λ€μ΄μ€λ μ 보 μ μ₯
bucket_receive = request.form['bucket_give']
doc = {
'bucket' : bucket_receive
}
# λ΄ λͺ½κ³ DB bucket μ½λ μ
μ λ°μ΄ν° μ½μ
# = pymongo(insert_one)
db.bucket.insert_one(doc)
# 'μ μ₯ μλ£!' λΌλ λ©μΈμ§(msg)λ₯Ό λμ
return jsonify({'msg': 'μ μ₯ μλ£!'})
index.html
.val()
μ μμ(form)μ κ°μ κ°μ Έμ€κ±°λ κ°μ μ€μ νλ λ©μλλΌκ³ νλ€. id
κ° #bucket
μΈ <input>
μΌλ‘λΆν° κ°μ κ°μ Έμ€λ κ²μ΄λ€.
μΆμ²: jQuery / Method / .val() - μμ(form)μ κ°μ κ°μ Έμ€κ±°λ κ°μ μ€μ νλ λ©μλ
FormData
λ HTML
λ¨μ΄ μλ μλ°μ€ν¬λ¦½νΈ
λ¨μμ νΌ λ°μ΄ν°λ₯Ό λ€λ£¨λ κ°μ²΄μ΄λ€. append(key, value)
λ©μλλ₯Ό ν΅ν΄ 'bucket_give'
λΌλ key
κ°κ³Ό bucket
μ΄λΌλ value
κ°μ μΆκ°νλ€.
μΆμ²: π FormData μ¬μ©λ² & μμ© μ΄μ 리 (+ fetch μ μ‘)
function save_bucket() {
// idκ° #bucketμΈ <input>μΌλ‘λΆν°
// κ°μ κ°μ Έμ bucket λ³μμ μ μ₯
let bucket = $('#bucket').val();
// key = "bucket_give"
// value = bucket
let formData = new FormData();
formData.append("bucket_give", bucket);
// method: "POST" = μλ‘μ΄ POST μμ±
// body: formData = formData λ³μ ν λΉ
// .then()
// 1) μμ²μ΄ λλλ©΄ μλ΅μ JSON ννλ‘ νμ±ν΄μ€.
// 2) μμ²μ΄ λλλ©΄ `bucket_post()` λ©μλλ‘λΆν° λ°νλ
// `'msg': 'μ μ₯ μλ£!'`λΌλ λ©μΈμ§λ₯Ό νμ΄μ§μ λμμ€.
fetch('/bucket', { method: "POST", body: formData, })
.then((response) => response.json())
.then((data) => {
// νμ΄μ§μ "msg" λ©μΈμ§ λμ°κΈ°
alert(data["msg"]);
// μλ‘κ³ μΉ¨
window.location.reload();
});
}
fetch('μλ²μ£Όμ')
λ μΉ λΈλΌμ°μ μκ² 'μ΄ μλ²μ£Όμλ‘ μμ²ν΄μ€'
λΌλ μλ―Έμ΄λ€. μ¬κΈ°μλ MongoDBμ 'bucket' μ½λ μ
μ μλ―Ένλκ² μλκ° μΆλ€.
μλ‘μ΄ ν¬μ€νΈλ₯Ό μμ±νκΈ° μν΄μ method
μ΅μ
μ "POST"
λ‘ μ§μ νκ³ , body
μ΅μ
μλ formData
λ³μλ₯Ό ν λΉνλ€.
.then
μ΄ λΆμΌλ©΄ 'μμ² λλκ³ μ΄ ν μΌμ ν΄μ€!'
λΌλ μλ―Έμ΄λ€. response.json()
μ μλ΅μ JSON ννλ‘ νμ±νλ μ 보μ΄κΈ° λλ¬Έμ, 'μμ²μ΄ λλλ©΄ μλ΅μ JSON ννλ‘ νμ±ν΄μ€.' μ λλ‘ ν΄μν μ μκ² λ€.
κ·Έλ° λ€μ data
λ³μλ₯Ό μμλ‘ λ§λ€μ΄ λͺ
λ Ήμ μ²λ¦¬νλλ°, μμ πapp.py
μ bucket_post()
λ©μλλ‘λΆν° λ°νλ 'msg': 'μ μ₯ μλ£!'
λΌλ λ©μΈμ§λ₯Ό νμ΄μ§μ λμ°λ μΌμ νλ€.
GET
μμ² μ¬μ©νκΈ°app.py
GET
= μ 보λ₯Ό κ°μ Έμ¬ λ μ¬μ©νλ λͺ
λ Ήμ΄μ΄λ€. db.[μ½λ μ
λͺ
].find()
λ‘λΆν° κ°μ Έμ¨ μ 보λ₯Ό all_buckets
λ³μμ μ μ μ₯νλ€. κ·Έλ¦¬κ³ λ°νλ 'result'
λ μλ πindex.html
μ show_bucket()
λ©μλλ‘ μ λ¬λλ λͺ¨μμ(?)λ‘ λ³΄μΈλ€.
@app.route("/bucket", methods=["GET"])
def bucket_get():
# μ 보 κ°μ Έμ€κΈ°
all_buckets = list(db.bucket.find({}, {'_id': False}))
# all_bucketsλ₯Ό 'result'λ‘ λ°ν
return jsonify({'result': all_buckets})
index.html
μμ POST
μμ μΈκΈνλ― fetch('μλ²μ£Όμ')
λ μΉ λΈλΌμ°μ μκ² 'μ΄ μλ²μ£Όμλ‘ μμ²ν΄μ€'
λΌλ μλ―Έμ΄λ€. POST
μλ λ¬λ¦¬ method
λ body
μ΅μ
μ λ°λ‘ 건λλ¦¬μ§ μμ κ±Έ νμΈν μ μλ€.
fetch
λ΄λΆμμλ πapp.py
λ‘λΆν° λ°νλ 'result': all_buckets
λ₯Ό rows
λ³μμ μ μ₯νλ€. κ·Έλ° λ€μ, forEach()
λ¬ΈμΌλ‘ rows
λ₯Ό νμνλ©΄μ bucket μ½λ μ
μ μλ λ°μ΄ν°λ₯Ό κ°μ Έμ μΆλ ₯νλ€.
function show_bucket() {
// '/bucket'μ GET μμ²
// μλ΅μ json ννλ‘ νμ±ν λ€μ
// dataλ₯Ό μ²λ¦¬νλ€
fetch('/bucket')
.then(res => res.json())
.then(data => {
// μμ `bucket_get`μΌλ‘ λΆν° μ λ¬λ°μ
// 'result'λ₯Ό row λ³μμ μ λ¬
let rows = data['result'];
// idκ° '#bucket-list'μΈ νλͺ©μ λΉμ΄λ€λ λ»
// (= κ°±μ ν λλ§λ€ μ΄κΈ°ν)
$('#bucket-list').empty();
// forEach() λ¬Έμ λλ©΄μ
rows.forEach((e) => {
// bucket μ½λ μ
μ μλ λ°μ΄ν°λ₯Ό κ°μ Έμ¨λ€
let bucket = e['bucket']
// html νκ·Έλ₯Ό μμ±
// ${bucket} = λ°μμ¨ bucket μ 보λ₯Ό μΆλ ₯νκΈ° μν λ¬Έλ²
let temp_html
= `
<li>
<h2>β
${bucket}</h2>
</li>
`
// idκ° #bucket-listμΈ κ³³μ temp_html κ°μ λΆμΈλ€.
$('#bucket-list').append(temp_html);
}); // rows.forEach
}) // fetch
}
$('#bucket-list').append(temp_html)
λ id
κ° #bucket-list
μΈ κ³³μ μμ±λ temp_html
μ λΆμ¬μ£Όλ μΌμ νλ€.
μ΄μ νλ‘μ νΈ μμ λΆλμ λλΆλΆμ λλ΄μ κ·Έλ°μ§ μ€λμ μ λ² λλνλ€. νμλΆλ€ μ€ ν λΆμ΄ νμ°¨νμ μ μ λ ¬μ μ΄μ§ μ λ κ² λ§κ³ λ? λ ν λ§ν 건 보μ΄μ§ μμκ³ , μμ΅κ³Ό 리νλ μμ μκ°μ λ ν μ ν μ μλ λ μ΄μλ€. κ°μκΈ° λΉκ° μ€λ λ°λμ μ μ¨ λ§λ €λμ λΉ¨λκ° λ€ μ μ΄μ μ μ μ΄ μμμ§λ§...................... π§οΈπ§οΈπ§οΈ
μ¬ν λ€λ₯Έ νλ€ κ²°κ³Όλ¬Όμ΄ κΆκΈνλλ°, λ§λ ν λ³Ό μ μλ λ°©λ²μ΄ μμ΄μ μμ¬μ λ€. νμ§λ§ λ΄μΌμ λλ§μ λ°νμΌμ΄κΈ° λλ¬Έμ... λλμ΄ λ³Ό μ μλ κΈ°νκ° μ겼ꡬλ! μΆμ΄μ λ΄μΌμ΄ μ€κΈ°λ₯Ό κ½€ κΈ°λνκ³ μλ€. (κΈμμΌμ΄κΈ°λ νκ³ !)