๐ Front End Developer ์ Back End ๋์ ๊ธฐ ! ๐
์ด ๊ธ์ PROJECT LION : ํธ์ฝ์น ๊ฐ์ฌ๋์ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉฐ ์ฐธ๊ณ ํ ๊ธ์ ๋๋ค.
์์ ์ค, ๊ฐ๋ฐ๊ณผ์ ์ ๋ฆฌ ๋ฐ issue๊ฐ ๋์๋ ๋ถ๋ถ๋ค์ ๊ณต์ ๋ฐ ๊ธฐ๋กํ๊ณ ์ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
โ ๋ชจ๋ ๊ฒ์ ๊ด๋ฆฌํ๋ cloud database -> data๋ฅผ ์ ์ฅํ๋ ๊ณต๊ฐ
- ๊ฐ์
- Cluster ์์ฑ (ํ๋ก์ ํธ / DB ์์ฑ)
- Flask ์ฐ๋
text๋ก ๋ดค์๋๋ ๊ฐ๋จํด ๋ณด์ธ๋ค ๐
๊ตฌ๊ตฌ์ ์ ์ค๋ช
ํ๊ธฐ ๋ณด๋ค๋, ์์ฐจ์ ์ผ๋ก ์คํํด๋ณด์ !
๐จ Mongo DB Atlas๋ฅผ flask์ ์ฐ๋์ํค๋ฉด์, ํฌ๊ณ ์์ issue๋ค์ด ๋ฐ์ํ์๋ค.
์ด๊ฒ๋ ๋ชปํด๋ด๋ฉด ๋จ์๊ฐ ์๋๋ค(^^) ๋ผ๋ ์๊ฐ์ผ๋ก ์ค๋ฅ๋ฅผ ์ก๊ณ ๋ง๋ฌด๋ฆฌํ๊ฒ ๋ค๊ณ ๊ธฐํ์ฝ ๋ค์งํ๋ค. ๊ทธ ๊ฒฐ๊ณผ 2์๊ฐ์ด๋ ์์๊ฐ ๋์๋ค ๐
ํ์ง๋ง, ์ค๋ฅ๋ฅผ ์ค์ค๋ก ํด๊ฒฐํ ์ฌ๋์ ์๊ฒ์ด๋ค. ๊ทธ ์พ๊ฐ์ !!
issue ๋ฐ๊ฒฌ๋ถํฐ ํด๊ฒฐํ ๊ณผ์ ๊น์ง ์์ฃผ ์์ธํ๊ฒ ์ค๋ช
ํด๋ณด๊ฒ ๋ค.
๋๊ฐ์ issue ๊ฐ ๋ฐ์ํ ์ฌ๋๋ค์๊ฒ ๊ผญ ๋์์ด ๋ ์ ์๊ธธ โ๏ธ
๐ ์์ ์์ (โจ = issue)
Create Cluster ํ, database access ๋ฅผ ์ํด ์ฌ์ฉ์ ๋ฑ๋ก์ด ํ์ํ๋ค.
password๋ ์๋์์ฑ ํ ์ ์ฅํด ๋์ด๋ ๋๊ณ , ๋ง์ฝ ๊น๋จน์๋ค๋ฉด ์๋กญ๊ฒ update ์ํฌ ์ ์์ผ๋ ๊ฑฑ์ ์ํด๋ ๋๋ค.๐ ์ฃผ์ = password์ @ ํฌํจ์ํค์ง ๋ง์์ผ ํ๋ค.. ๊ผญ...
์ด์ ๋ ํ๋จ ํด๊ฒฐ part ์์ ์ค๋ช ํ๊ฒ ๋ค.
Network Access
= ip address๋ฅผ ์ถ๊ฐํ์ฌ์ผ ํ๋ค.
(์ด๋ค ip์์ ์ ๊ทผํ ์ ์๋์ง์ ๋ํ ์ค์ ์ธ๋ฐ ํ์ฌ ์์
๋ฌผ์ ๋ณด์์ ์์ด์ ํฌ๊ฒ ์ ๊ฒฝ์ธ ํ์๋ ์์ ๊ฒ ๊ฐ๋ค.
๊ทธ๋ฌ๋ฏ๋ก, Allow access from anywhere. ์ฆ ์ด๋์๋ ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ์ค์ ํด ๋๊ฒ ๋ค.)
์ถํ ๋ณด์์ด ํ์ํ ๊ฒฝ์ฐ์๋, ํน์ ip์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก setting ํ ์ ์๋ค.
โจ ์ฐ๋
DataBase Menu๋ฅผ ํด๋ฆญ ์ cluster ๊ฐ ์์ฑ๋์ด ์์ ๊ฒ์ด๋ค.
๊ทธ ํ, flask์ ์์ฑ๋ MongoDB Cluster๋ฅผ ์ฐ๋ ์ํค๋ฉด ๋๋ค.
3-1. editor ์ ์ ๋ฐ models folder ์์ฑ
3-2. mongodb.py file ์์ฑ
๐ ์ฃผ์ code ํด์
๐ฒ import pymongo
= requirements ์์ ์ค์นํ pymongo ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค.๐ฒ MONGO_URI
= MongoDB์ cluster ์ฃผ์๋ฅผ ๋ฃ๋๋ค.
MongoDB site -> Database -> connect -> Connect your application -> Driver Python ์ค์ ๋ฐ 3.6 ์ด์ ์ค์ -> ํ๋จ url ๋ณต์ฌ
๐ : ๋ค์์ค๋ password ๋,
1๋ฒ) ์ฌ์ฉ์๋ฑ๋ก ์ ๊ธฐ์ ํ password๋ฅผ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.๐ฒ MONGO_CONN = pymongo.MongoClient(MONGO_URI)
= MongoDB์ ์ฐ๊ฒฐ์ ์ํด ์์ฑ๐ฒ def conn_mongodb()
= ํจ์์์ฑ. pymongo package ๋ฅผ ์ฌ์ฉํ์ฌ MONGO_URI ์ ์ฐ๋์ ํ๊ฒ ๋ค.๐ฒ db = MONGO_CONN.online_store
= ์ฐ๋์ด ๋์์ ์, cluster ์์ online_store ๋ผ๋ database ๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค.๐ฒ test_connection = db.test_connection.insert_one({'test':'test'})
= db ์์ test_connection ์ด๋ผ๋ collection์ test๋ผ๋ ์ ๋ณด๋ฅผ ๋ด์ ์์ฑํ๊ฒ ๋ค.
์ฆ, test_connection ์์ test ๋ผ๋ document ๋ฅผ ์์ฑํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. (์ดํด๋ฅผ ๋๊ธฐ ์ํ ๊ทธ๋ฆผ์ธ๋ฐ ์์๋ณด๋ฉด ๋คํ์ผ ๊ฒ ๊ฐ๋ค.. ๐)
์ธํ ์ ๋ง๋ฌด๋ฆฌ๋์๋ค!
ํจ์ ํธ์ถ ํ, terminal ์์ mongodb file์ ์คํํด๋ณด๊ฒ ๋ค.
= ๊ฐ์ํ๊ฒฝ(venv) mode ์ ์ ํ, python3 models/mongodb.py
์ฐ๋์ด ์ ๋๋ก ๋์๋ค๋ฉด,
๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ๊ณ enter ์ ์๋ฌด ๋ฐ์์ด ์์ผ๋ฉด ์ ์์ด๋ค.
(.venv) C:\OnlineStore>python3 models/mongodb.py
Python
(.venv) C:\OnlineStore>
python text๋ง ์ถ๋ ฅ์ด ๋์๋ค.
= ์๋ฌด๊ฒ๋ ์ถ๋ ฅ์ด ๋์ง ์์์ผ ํ ํ
๋ฐ ๋ง์ด๋ค..
ํ์ง๋ง, ์ด๋ฐ ๋ฌธ์ ๊ฐ ์ฒซ๋ฒ์งธ ๊ฒ์๊ธ์ 2๋ฒ์งธ ์ด์์ฌํญ์์ ๋ฐ์ํ์๋๊ฒ ๋ฐ๋ก ๊ธฐ์ต์ด ๋ฌ๋ค!
๊ทธ๋ฌํ์ฌ, ๊ตฌ๋ฌธ์ ๋ฐ๊ฟ ๋ค์ ์๋ํ์๋ค.
(.venv) C:\OnlineStore>py -3 models/mongodb.py
Traceback (most recent call last):
File "C:\OnlineStore\models\mongodb.py", line 1, in
import pymongo
ModuleNotFoundError: No module named 'pymongo'
python3 models -> py -3 models ๋ณ๊ฒฝ
1๋ฒ๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ง์ ์ค๋ฅ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ์ด ๋์๋ค.
์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณด๋, pymongo๋ฅผ ์ฐพ์ ์ ์๋ค๋ ๊ฒ ๊ฐ๋ค.
venv ํด๋ ์ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ผ๊ฐ ๋ณด๊ธฐ๋ ํ๊ณ , ์ฌ์ค์น๋ฅผ ํด๋ณด๋ ค๊ณ pip ๋ก pymongo๋ฅผ ์ค์นํด๋ณด๋ ์ด๋ฏธ ์กด์ฌํ๋ค๊ณ ํ์๋ค.
์ฆ, ์ค์น๊ฐ ๋์ด์๋ค๋ ๋ง์ด๋ค(?)
2-1. ์ฐ์ , python ๊ณผ pymongo ์ version ํธํ์ฑ์ ์ฒดํฌํด ๋ณด์๋ค.
python์ version์ 3.10.4 ๊ฐ ์ค์น๋์ด ์์๊ณ ,
pymongo์ version์ 4.2.0์ผ๋ก ํ์ธ์ด ๋์๋ค.
issue ๊ฐ๋ฅ์ฑ์ด ์์ด๋ณด์ฌ searchํด ๋ณด์๋๋ฐ ๋ณ๋ค๋ฅธ ํน์ด์ฌํญ์ ์์๋ค.
ํด๊ฒฐ์ด ๋ ์ค๋ง ์์๋ version๋ issue ๊ฐ๋ฅ์ฑ์ด ์์ด๋ณด์ฌ, python์ด ์ค์น๋ script folder๋ฅผ ์ฐพ์๊ฐ๋ค.
python์ด ์ค์น๋์ด ์๋ scripts folder ์ ์ ํ pip.exe ํ์ผ์ด ์๋์ง ํ์ธ
terminal ํ๊ฒฝ์์ scripts folder์ ์ ์ํ์ฌ pymongo ๋ฐ pymongo[srv]๋ฅผ ์ฌ์ค์น ํ ํ์ธ.
๊ฐ์ํ๊ฒฝ์์๋ง requirements.txt ๋ก ์์ฑํ library๋ค์ด ์ค์น๋์ด ์์๋ ๊ฒ์ด๊ณ , python์ด ์ค์น๋ ํ๊ฒฝ์์๋ ์๋ง ์์๊ธฐ์ not found ๊ฐ ๋ํ๋ฌ์ ๊ฒ์ด๋ค.
ํ์ง๋ง, ๊ธฐ๋ปํ๊ธด ๋๋ฌด ์ผ๋ ๋๋ณด๋ค. ์ค๋ฅ๊ฐ ๋ ๋ฐ์ํ๋ค. ๐
RFC 3986 error
= ์ด ์ค๋ฅ๋ ๋น๊ต์ ๊ฐ๋จํ ํด๊ฒฐํ๋ค.
์ฒ์ user๋ฅผ ๋ฑ๋กํ ๋ password์ @ ๋ฅผ ํฌํจ์์ผฐ๋๋ฐ, ์ด๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
ํน์ ๋๊ฐ์ ์ํฉ์ ๊ฒช๋ ๋ถ๋ค์ด ๊ณ์ค์ค๋ ๋ชจ๋ฅด๋, ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค !!
์์ธ์ ์๊ธฐ๊น์ง ์ฌ๋ฌ ๋ฐฉ๋ฉด์ผ๋ก ํ๋ฌ๊ฐ๋ logic ๋ ๊ทธ๋ ค๋ณด๋ฉฐ ๊ณ์ ์๊ฐํด๋ณด์๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฌ๋ค๊ณ ์๊ฐํ๋ค.
๋๊น์ง ๋ชฐ์ ํด์ ํ๊ณ ๋ค๋ฉด ๊ฒฐ๊ตญ ํด๋ผ ์ ์๋ค!!! ๐
๋ค์ ์์๋ MongoDB Compass๋ฅผ ์ค์นํด ๋ณด๊ฒ ๋ค.