์‚ฌ์ „์บ ํ”„ 2์ฃผ์ฐจ
728x90

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์˜ ์š”๊ธˆ ํญํƒ„์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์•„๋งˆ ์กฐ๋งŒ๊ฐ„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ข…๋ฃŒํ•˜์ง€ ์•Š์„๊นŒ ์‹ถ๋‹ค ๐Ÿ‘€...

 

http://yujleee.shop/

 

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() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ Œ๋”๋ง ํ–ˆ๋‹ค.

 

 

 

์ด์ œ ๊ณง ๋ณธ ์บ ํ”„ ์‹œ์ž‘.. ๐Ÿฅน

์—ด์‹ฌํžˆ ๋‹ฌ๋ ค๋ณด์ž! ๐Ÿ‘ ๐Ÿ‘ ๐Ÿ‘ 

 

728x90