2์ฃผ ์ฐจ
์ง๋ ์ฃผ๋ณด๋ค ๋ฐฑ์๋ ์ค์ต์ด ํจ์ฌ ๋ง์๋ 2์ฃผ ์ฐจ!
MongoDB์ ํ์ด์ฌ์ ์ฐ๋ํด๋ณด๊ณ , Flask๋ก ์น์๋ฒ๋ฅผ ๊ตฌํํด๋ณด์๋ค. ๊ฑฐ๊ธฐ์ AWS๋ก ๋ฐฐํฌ๊น์ง.. ๐
์ด๋ฒ ์ฃผ๋ฅผ ๋ณด๋ด๋ฉฐ ๊ฒช์๋ ์ฐ์ฌ๊ณก์ ์ ์ ๋ฆฌํด๋ณธ๋ค. ๊ธ์ด ๊ธธ์ด์ง ๊ฒ ๊ฐ์ ๋ช๋ช ๋ถ๋ถ์ ๋ฐ๋ก ์์ฑํด์ผ๊ฒ ๋ค ์ถ๊ธฐ๋..
ํฌ๋ช ๋ก
MongoDB
NoSQL์ธ MongoDB๋ฅผ ์ฒ์ ์ฌ์ฉํด๋ณด์๋ค. ๊ฐ์
๋ถํฐ ํ๋ก์ ํธ, ํด๋ฌ์คํฐ ์์ฑ๊น์ง.. ๐
๊ทธ๋ฐ๋ฐ ๋ง์ DB์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ผ๋ ค ํ๋ ์๋ฌ ๋ฐ์...
๐ซ m1 ๋งฅ๋ถ์์ mongoDB ์ฐ๊ฒฐ ์ ๋๋ ํ์
SSL CERTIFICATE_VERIFY_FAILED ์ค๋ฅ์ธ๋ฐ, pymongo๋ TLS/SSL์ ์ด์ฉํด์ ์๋ฒ์ ์ฐ๊ฒฐํ๋๋ฐ ํน์ ํ๊ฒฝ์์ ์ง์์ ์ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค๊ณ ํ๋ค. ๊ทธ๋์ certifi๋ผ๋ ํจํค์ง๋ฅผ ์ถ๊ฐ๋ก ์ค์นํด์ฃผ์๋ค.
from pymongo import MongoClient
import certifi
ca = certifi.where() // ์ถ๊ฐํ ๋ถ๋ถ
client = MongoClient('[DB URL]', tlsCAFile=ca) // ์ถ๊ฐ๋ ๋งค๊ฐ๋ณ์
db = client.[DB์ด๋ฆ]
๊ด๋ จ ๋ฌธ์
TLS/SSL and PyMongo — PyMongo 4.3.2 documentation
TLS/SSL and PyMongo PyMongo supports connecting to MongoDB over TLS/SSL. This guide covers the configuration options supported by PyMongo. See the server documentation to configure MongoDB. Warning Industry best practices recommend, and some regulations re
pymongo.readthedocs.io
์์ ์์ฑ
์ฌ์ฐจ์ ์ฐจ ํด์ ์์ฑ๋ 4์ฃผ ์ฐจ ์์ ..
์ง๋์ฃผ์ ์์ฑํ๋ ์ ์ ์ธ ํ์ด์ง๋ฅผ ์ข ๋ ๋์ ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ด์๋ค.
ํ์ด์ฌ ์น ํ๋ ์์ํฌ ์ค ํ๋์ธ Flask๋ก ์๋ฒ๋ฅผ ๋ง๋ค์ด์
์์ฑํ๋ฉด mongoDB๋ก ๋ฐ์ดํฐ๊ฐ ๋์ด๊ฐ๊ณ , ์๋ก๊ณ ์นจ ๋๋ฉด์ ๋ฆฌ์คํธ์ ์ถ๊ฐ๋๋ค.
์ดํ AWS EC2 ์ธ์คํด์ค์ ๋ฐฐํฌํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ ์๋ ๋๋ฉ์ธ์์ ํ์ธํด๋ณผ ์ ์๊ฒ ๋์๋๋ฐ,
AWS์ ์๊ธ ํญํ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์๋ง ์กฐ๋ง๊ฐ ์ธ์คํด์ค๋ฅผ ์ข ๋ฃํ์ง ์์๊น ์ถ๋ค ๐...
IVE FAN MESSAGES
์์ด๋ธ์๊ฒ ์์ ํ๋ง๋ ๋จ๊ธฐ๊ณ ๊ฐ์ธ์!
yujleee.shop
AWS๋ ์ฒ์ ์ ํ ๋๋ ๋๋ฌด๋๋ ์ด๋ ค์ ์ง๋ง ๊ฒฝํ์ด ๋ช ๋ฒ ์์ฌ์ ๊ทธ๋ฐ๊ฐ ์ด์ ์ข ๊ด์ฐฎ์๋ฏ..๐
ํฌ๋ ๋ฆฌ์คํธ
์ถ๊ฐ๋ก ํผ์ ์ฐ์ตํด๋ณผ ๊ฒธ ํฌ๋ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค์๋ค.
์๋ฒ ์ชฝ์ ๊ฐ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ฌ์ผ๋ก CRUD ํ๋ API๋ค์ ์ถ๊ฐํด์ ๋ง๋ค์ด์ฃผ์๋ค.
๊ฐ ๊ธฐ๋ฅ์ ๋ง๊ฒ HTTP ๋ฉ์๋๋ฅผ GET, POST, PUT, DELETE๋ก ๊ตฌ์ฑํ๋ค.
๊ฐ์์ ๋ค๋ฅด๊ฒ ํด๋ผ์ด์ธํธ ์ชฝ ๋์์ ๋ฐ๋๋ผ JS๋ก ์ง๋๋ผ JSON ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ณผ์ ์์ ์ฝ๊ฐ์ ์ฝ์ง์ด ์์๋ค..
Flask์์๋ request.is_json์ผ๋ก
request ๋ฐ์ดํฐ๊ฐ JSON ๋ฐ์ดํฐ์ธ์ง ๊ฐ๋จํ๊ฒ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
print(request.is_json)
๊ทธ๋ฆฌ๊ณ get_json()
๋ฉ์๋๋ก JSON ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ๊บผ๋ด์ฌ ์ ์๋ค.
@app.route("/todo/done", methods=["PUT"])
def todo_done():
params = request.get_json()
num_receive = params['num_give']
db.todo.update_one({'num': int(num_receive)}, {'$set': {'done': 1}})
return jsonify({'msg': 'ํฌ๋ ์๋ฃ!'})
๊ทธ๋ฆฌ๊ณ AWS์ ์ธ์คํด์ค๋ฅผ ํ๋ ๋ ๋ง๋ค์ด์ ๋ฐฐํฌํ๋๋ฐ, ์ค์ต ํ ์ธ์คํด์ค๋ฅผ ๋ฐ๋ก ์ข ๋ฃํด์ ํ์ฌ๋ ์ URL๋ก ์ ์ ๋ถ๊ฐ๋ฅ ใ ใ ..
๊ตฌํ
์ถ๊ฐ ๋ฒํผ์ด๋ ์ํฐ๋ฅผ ๋๋ฅด๋ฉด ์ถ๊ฐ๋๋ค.
DB์ ์ฐ๋์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์๋ก๊ณ ์นจํด๋ ๋ฆฌ์คํธ๋ ๊ทธ๋๋ก๋ค.
ํฌ๋ ๋ด์ฉ ๋ถ๋ถ์ ๋๋ฅด๋ฉด ํ๋กฌํํธ ์ฐฝ์ ๋์์ ์์ ์ด ๊ฐ๋ฅํ๋ค.
<ul> ํ๊ทธ์ธ todoList์๊ฒ ์ด๋ฒคํธ๋ฅผ ์์ํด์, ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์์์์ ์์ ์ด ์ผ์ด๋๋๋ก ํ๋ค.
todoList.addEventListener('click', (e) => {
const list = e.target.closest('h2');
if(!list) return;
const li = list.parentNode;
if(li.classList.contains('done')) return;
const text = list.innerText.slice(2).trim();
const num = li.dataset.num;
updateTodo(text,num);
});
์๋ฃ ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฃ ์ฒ๋ฆฌ๋๋ฉฐ ๋ฆฌ์คํธ ํ๋จ์ผ๋ก ์ด๋ํ๊ณ , ์ญ์ ๋ฒํผ์ ๋๋ฅด๋ฉด DB์์๋ ์ญ์ ๋๋ค.
์
๋ ฅ๊ณผ ์๋ฃ์๋ ๋ชจ๋ insertAdjacentHTML()
๋ฉ์๋๋ฅผ ์ด์ฉํด์ ๋ฆฌ์คํธ๋ฅผ ๋ ๋๋ง ํ๋ค.
์ด์ ๊ณง ๋ณธ ์บ ํ ์์.. ๐ฅน
์ด์ฌํ ๋ฌ๋ ค๋ณด์! ๐ ๐ ๐
'๐ Retrospect > ๐ญ ํ๊ณ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
11์ ๋์งธ ์ฃผ ์ฃผ๊ฐ ํ๊ณ (0) | 2022.11.13 |
---|---|
11์ ์ฒซ์งธ ์ฃผ ์ฃผ๊ฐ ํ๊ณ (0) | 2022.11.05 |
์ฌ์ ์บ ํ 1์ฃผ์ฐจ (0) | 2022.10.23 |
ํ ๋ฌ ํ๊ณ : 7์ ํ๊ณ (0) | 2022.08.03 |
ํ ๋ฌ ํ๊ณ : 6์ ํ๊ณ (0) | 2022.07.06 |
Comment