[Python] Python Database API - Python์์๋ ์ด๋ป๊ฒ DB์ ์ฐ๊ฒฐํ ๊น?
์ค๋์ ๊ธฐ์ด์ ์ธ ์ง์์ ๋์๋ณด๊ฒ ์ต๋๋ค.โ
์ฐ๋ฆฌ๊ฐ ์๋ฒ๋ฅผ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์์ฐ์ค๋ ๋ฑ์ฅํ๋ ๊ฒ์ด ๋ฐ๋ก Database์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์คํ๋ ๋ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋๋์ฒด ๋ฌด์์ผ๊น์?
What is Database ?
๋ฐ์ดํฐ๋ฒ ์ด์ค, ํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ(?)์ ๊ณต๋ถํ๋ค๋ณด๋ฉด ์์ฐ์ค๋ ๋ฑ์ฅํ๋ ๋จ์ด์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋, ์ปดํจํฐ ์์คํ ์์ ์ ์์ ์ผ๋ก ์ ์ฅ๋๊ณ ์ก์ธ์ค๋๋ ์กฐ์งํ ๋ ๋ฐ์ดํฐ ๋ชจ์์ ์ด์ผ๊ธฐํฉ๋๋ค. ํ๋ง๋๋ก ํ์ค ์ธ๊ณ์ ์กด์ฌํ๋ ์ซ์, ๋ฌธ์ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ์ ์์ ์ผ๋ก(๋ฉ๋ชจ๋ฆฌ, ๋์คํฌ) ์ ์ฅํ๊ณ , ์ด๋ฅผ ์กฐ์งํํ์ฌ ์ก์ธ์ค ํ๋ ๊ฒ์ด์ฃ .
๊ทธ๋ผ DBMS๋ ๋ฌด์์ผ๊น์? DBMS๋ Database Management System์ ์ฝ์๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ๋ฅผ ์ํ ํต์ฌ ๊ธฐ๋ฅ์ ํฌํจํ์ฌ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ์ํธ์์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ์ก์ธ์คํ๋ ์ํํธ์จ์ด์ ๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ์ ์ฅ๋์ด ์์ง๋ง ์ฌ๋์ด ์ฝ๊ฒ ์ฝ์ ์ ์์ด, ์ด๋ฅผ ์ํธ์์ฉ ํ๋ ์ํํธ์จ์ด์ธ ๊ฒ์ด์ง์.
๊ฐ๋ น ์ฐ๋ฆฌ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ "Neon K.I.D ๋ธ๋ก๊ทธ | https://blog.neonkid.xyz" ์ด๋ ๊ฒ ์ ์ฅํ๋ค๊ณ ํ๋๋ผ๋ ์ปดํจํฐ๋ ์ด๋ฅผ ๊ทธ๋๋ก ์ ์ฅํ์ฌ ๋ณด๊ดํ์ง ์์ต๋๋ค. ์ปดํจํฐ์ ์์ด ๊ณ์ฐ์ธ ์ด์ง์(0000100000) ํํ๋ก ์ ์ฅํ๋๋ฐ, ์ด๋ฅผ ์ฌ์ฉ์๊ฐ ํด์ํ๊ฑฐ๋ ์ฝ์ ์ ์์ผ๋ฏ๋ก ์ด๋ฅผ ์ฝ๊ฒ ์ ์ฅํ๊ณ , ์ฝ์ ์ ์๋๋ก ๋์์ฃผ๋ ๊ฒ์ด ๋ฐ๋ก DBMS ์ ๋๋ค.
Python์์ DB์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ
Python์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์๋ pyODBC๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. pyODBC๋ ODBC๋ฅผ ์ฌ์ฉํ์ฌ Database๋ฅผ ์ฐ๊ฒฐํ๋ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ODBC์ ๋ํด์ ์ ๋ชจ๋ฅด์ ๋ค๋ฉด, ์๋์ ๊ธ์ ์ฐธ๊ณ ํด๋ณด์ธ์.
๊ทธ๋ฌ๋ ODBC๋ ์ด์์ฒด์ ์ ๋ง๊ฒ ๋๋ผ์ด๋ฒ๋ฅผ ์ค์นํด์ผ ํ๊ณ , ์ค์น๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ ํด๋น ๋๋ผ์ด๋ฒ์ ์์น์ ODBC ์ค์ ์ ํด์ค์ผ๋ง ๋น๋ก์ ์ฐ๊ฒฐ์ ํ ์ ์๋ ๋ณต์กํ ์ ์ฐจ๋ฅผ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
์ด๋ฐ ๋ณต์กํจ์ ๋์ด์ฃผ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋๋ฐ, Python์์๋ ์ด๋ฅผ DB API๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ, API๋ ๋ญ์ฃ ?
What is API ?
API๋ Application Programming Interface์ ์ฝ์๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ด์์ฒด์ ๋๋ DBMS ๋๋ ํต์ ํ๋กํ ์ฝ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ ์ด ํ๋ก๊ทธ๋จ๊ณผ ํต์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ธ์ด ๋ฐ ๋ฉ์์ง ํ์์ ๋งํฉ๋๋ค.
๊ฐ๋ น ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก Python ๋ฟ๋ง ์๋๋ผ C++, Java, Go, Rust ๋ฑ ๋ค์ํ ์ธ์ด๊ฐ ์๊ณ ํด๋น ์ธ์ด์ ๋ง๊ฒ DB์ ์ฐ๊ฒฐํ๊ณ ํต์ ํ๋กํ ์ฝ์ ์ ์ดํ๋ ๋ฑ ๊ทธ ์ธ์ด์ ๋ง๊ฒ ์ ๊ณต๋๋ ํ์์ ๋งํ๋ ๊ฒ์ด์ง์. ์ด๋ฌํ API๋ ์คํ์ ํ์ํ ํ๋ก๊ทธ๋จ ๋ด ํจ์ ํธ์ถ๋ก ์์ฑํ์ฌ ๊ตฌํ๋ฉ๋๋ค.
Python DBAPI 2.0
ํ์ด์ฌ์์๋ DB์ ์ฐ๊ฒฐํ๋ API๋ฅผ DBAPI(Database API)๋ผ ํฉ๋๋ค. DBAPI๋ ํ์ฌ 2.0๊น์ง ๊ณ ์๋์ด ์๊ณ , ์ด๋ 2001๋ ์ฒ์ ๊ณํ ๋์ด(PEP249) ์ง๊ธ๊น์ง ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
Python์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. Application๊ณผ DB ์ฌ์ด์ Connector๊ฐ ์กด์ฌํ๋ฉฐ(DB๋ง๋ค ๋ค๋ฆ) ์ด ์ปค๋ฅํฐ๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ DB๋ก ์ฐ๊ฒฐ์ ์์ฒญํฉ๋๋ค. DB์์ ์์ฒญ์ ์๋ฝํ๋ฉด, ์ปค์๋ฅผ ์ด์ฉํด SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ ์ฅํ ์ ์์ต๋๋ค.
Python DBAPI ๊ฐ๋
DB API์ ๊ตฌ์กฐ๋ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Database์์ ํ์ํ ์ฐ๊ฒฐ ๊ฐ์ฒด(DB ์ฐ๊ฒฐ)์ ์ปค์ ๊ฐ์ฒด(๋ฐ์ดํฐ ์ก์ธ์ค ๋ฐ ์์)๋ก ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
๋จผ์ ์ฐ๊ฒฐ ๊ฐ์ฒด(Connection Objects)์๋ ์๋์ 4๊ฐ์ง ๋ฉ์๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- cursor(factory=Cursor)
cursor ๋ฉ์๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปค๋ฅ์ ์ผ๋ก ์์ฑํ๋ฉฐ, ์ฐ๊ฒฐ๋ DB๋ก Cursor ๊ฐ์ฒด๋ฅผ ์ํํ๋ ๋ฉ์๋์ ๋๋ค.
Cursor ๊ฐ์ฒด์๋ SQL ์ง์(Query)๋ฅผ ์ํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ก SELECT ์ฟผ๋ฆฌ๋ฅผ ์ํํ ๋ ์ฌ์ฉํฉ๋๋ค. (INSERT, UPDATE์ ๊ฐ์ DB ๋จ์ผ ์ ์ฉ ์ฟผ๋ฆฌ๋ ์ ์ธ) - commit()
commit์ ํ์ฌ ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ ๋ฉ์๋์ ๋๋ค. (์ปค๋ฐ์ ๋ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํธ๋์ญ์ ์ ๋ํด ์ฐธ๊ณ ํด๋ณด์ธ์.) ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๊ฐ ์์๋์ง ์์ต๋๋ค. - rollback()
rollback์ ๋ง์ง๋ง commit ๋ฉ์๋ ํธ์ถ ์ดํ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ๋๋๋ฆฌ๋ ๋ฉ์๋์ ๋๋ค. - close()
close๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๊ธฐ ์ , ๋ฐ๋์ commit ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์ข ๋ฃํ๋ ๊ฑธ ๊ถ์ฅํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ชจ๋ ๋ด์ฉ์ด ์์ค๋ฉ๋๋ค.
์ปค์ ๊ฐ์ฒด(Cursor Objects)์๋ ์๋์ 4๊ฐ์ง ๋ฉ์๋๊ฐ ์ ๊ณต๋ฉ๋๋ค.
- execute(sql[, parameters])
SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฉ์๋๋ก ๋งค๊ฐ๋ณ์์ ๋ค์ด๊ฐ๋ SQL์ JPQL์ฒ๋ผ ํ๋ผ๋ฏธํฐํ ํ ์ ์์ต๋๋ค. - executemany(sql, seq_of_parameters)
๋งคํ์ ํตํด ์ฌ๋ฌ ํ๋ผ๋ฏธํฐ ๊ฐ์ด ๋ค์ด์๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๋ฉ์๋์ ๋๋ค.
ex) INSERT INTO members (name, city) VALUES = (%s, %s), [('์ด์ฐ', '๋ถ์ฐ'), ('์ด๋ฐ', '์์ธ')] - fetchone()
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์์ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ํ์ ๊ฐ์ ธ์ค๋ ๋ฉ์๋์ ๋๋ค. ๋ง์ฝ, ์๋ฌด๋ฐ ๋ฐ์ดํฐ๋ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ None์ ๋ฐํํฉ๋๋ค. - fetchmany(size=cursor.arraysize)
๋ชจ๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฉ์๋์ ๋๋ค. ๋ง์ฝ ์๋ฌด๋ฐ ๋ฐ์ดํฐ๋ ์๋ ๊ฒฝ์ฐ ๋น ๋ฆฌ์คํธ(emtpy list, [])๋ฅผ ๋ฐํํฉ๋๋ค.
๋งค๊ฐ๋ณ์์ธ size๋ ํ ๋ฒ ํธ์ถ๋น ๊ฐ์ ธ์ฌ ์ต๋์ ํ์๋ฅผ ๊ฐ์ ธ์ค๊ฒ ๋๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ cursor์์ DB๋ฅผ ํตํด ๊ฐ์ ธ์จ ๋ฐฐ์ด ํฌ๊ธฐ๋ก ์ง์ ๋ฉ๋๋ค.
Python์์๋ ์ฐ๊ฒฐ ๊ฐ์ฒด์ ์ปค์ ๊ฐ์ฒด๋ฅผ ์ ์ฌ์ฉํ ์ค๋ง ์๋ค๋ฉด ์ด๋ ต์ง ์๊ฒ DB์ ์ฐ๊ฒฐํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์, ์ก์ธ์คํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ๊ฐ๋จํ ์์ ๋ฅผ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
DB API Example
์์ ๋ก ์ฐ๋ฆฌ๋ PostgreSQL์ ์ฌ์ฉํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๋ง์ฝ, PostgreSQL์ ์ค์นํ์ง ์์๋ค๋ฉด Docker ๋ฑ์ ์ด์ฉํด์ PostgreSQL์ ์คํํด์ฃผ์ธ์.
$ pip install psycopg2-binary
$ poetry add psycopg2-binary
pip ํน์ poetry ๋ฑ์ ์ด์ฉํ์ฌ PostgreSQL DB Connector ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด๋ก๋ ํฉ๋๋ค.
connect ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ๋งค๊ฐ๋ณ์์ DB ์ฃผ์๋ฅผ ์ง์ ํ๊ณ ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ค์ ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํด๋ด ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ์ปค๋ฅ์ ์ ๋ซ์ ๋ค์์๋ ์ฐ๊ฒฐ ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํด๋ด ๋๋ค.
์ฐ๊ฒฐ์ ์ฑ๊ณตํ๋ฉด ๋ ๊ฐ์ฒด์ ๋ชจ์ต์ด ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋ ๊ฒ์ ๋๋ค. ์ฐ๊ฒฐ ๊ฐ์ฒด์๋ dsn(DB ์ฐ๊ฒฐ ์ ๋ณด)๊ณผ ํ์ฌ ์ฐ๊ฒฐ ์ํ๊ฐ ์ฐ๊ฒฐ ์ค์ธ์ง, ๋์ด์ก๋์ง๋ฅผ ํ์ํ๋ closed๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ด์ ์ฐ๊ฒฐ์ด ๋์์ผ๋ฉด cursor๋ฅผ ๋์์ SQL ๋ฌธ์ ์คํํด๋ณผ ์ ์๋๋ฐ์. memos๋ผ๋ ํ ์ด๋ธ์ ํ๋ ์์ฑํ๊ณ ์ ๋ชฉ(title)๊ณผ content(๋ด์ฉ) ์ปฌ๋ผ์ ์ถ๊ฐํด์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ , ํ์ ์ถ๊ฐํ ๋ค์ ์ด๋ฅผ ์กฐํํ๋ SELECT ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค๋ดค์ต๋๋ค.
๊ทธ๋ฌ๋ฉด fetchone๊น์ง ์ ํํ๊ฒ ๋๋ฉด์ ๋ฐ์ดํฐ๊น์ง ์ ํํ๊ฒ ๋ก๋ํ๊ณ ์๋ ๊ฑธ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ..............................
์ด? ๋ถ๋ช ํ CREATE TABLE, INSERT ์ฟผ๋ฆฌ๋ฅผ ๋ฃ์ด์ ํ ์ด๋ธ์ ๋ง๋ค๊ณ ํ๊น์ง ์ถ๊ฐํ๋๋ฐ, DBMS์ ์ ์ํด์ ๋ณด๋ ๋์ค์ง ์์ต๋๋ค. ์ ๊ทธ๋ฐ ๊ฒ์ผ๊น์?
๋ฐ๋ก ์ปค๋ฐ(commit)์ ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. DBAPI์์ DB ์ฐ๊ฒฐ ํ cursor๋ฅผ ์ด์ฉํด ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๋ค์ commit์ ํด์ฃผ์ง ์๊ณ DB ์ฐ๊ฒฐ์ ์ข ๋ฃํ๋ ๊ฒฝ์ฐ, ๊ณผ๊ฑฐ์ ์์๋ ๋ด์ฉ๋ค์ ๋ชจ๋ ์์ค๋ฉ๋๋ค.
(์๋ํ๋ฉด, ์ปค๋ฐ์ ํ๊ธฐ ์ด์ ๊น์ง๋ ๋ฉ๋ชจ๋ฆฌ์๋ง ๊ธฐ๋ก์ด ๋จ๊ธฐ ๋๋ฌธ์ ๋๋ค)
๋ฐ๋ผ์ commit ๋ฉ์๋๋ฅผ ์คํํด์ค์ผ๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๊ตฌ์ ์ผ๋ก ์ ์ฅ์ด ๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ , ์์ , ์ญ์ ํ ๊ฒฝ์ฐ์๋ ๋ฐ๋์ commit ๋ฉ์๋๋ฅผ ํธ์ถํด์ฃผ๋๋ก ํฉ๋๋ค.
DBMS์ ์ ์ํด์ ํ์ธํ๋ฉด title, content ์ปฌ๋ผ์ด ์๋ memos ํ ์ด๋ธ์ด ๋ง๋ค์ด์ก๊ณ , ํ ๋ฐ์ดํฐ๊น์ง ์ ํํ ์์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
DB API๋ ํ์ด์ฌ์์ ์ ๊ณตํ๋ ํ์ค API๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ง ์ปค๋ฅ์ ํ๋ ํ๋กํ ์ฝ์ ๊ฐ์ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํ๋ฉฐ ๋์ ๊ฐ์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋์ ์ฌ์ฉ๋ฒ์ด๋ ์ปค๋ฅ์ ์ ์์ฑํ๊ณ ์ปค์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๋ชจ๋ ๋์ผํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
- MySQL (mysql-connector-python)
- PostgreSQL (psycopg2-binary)
- Microsoft SQL Server (pymssql)
- SQLite3 (sqlite3)
๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์์ค ๋ฒค๋๋ณ๋ก DBAPI๋ฅผ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ ๋ชจ์๋์์ต๋๋ค. pip, poetry ๋ฑ์ ํจํค์ง ๋งค๋์ ๋ช ๋ น์ด๋ฅผ ์ด์ฉํด์ ์ฝ๊ฒ ์ค์น ํด๋ณผ ์ ์์ต๋๋ค.
๋ง์น๋ฉฐ...
ํ์ด์ฌ ์ธ์ด๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฒ์ ๋ค๋ฃจ์๋ ๋ถ๋ค์ด ๋ง์ด ์ฌ์ฉํ์๋ ์ธ์ด ์ค์ ํ๋์ ๋๋ค. ๋ฐ๋ผ์ ํด๋น ์ธ์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ฉ์์ง ํ ๋ฑ ๋ค์ํ ๋ฏธ๋ค์จ์ด ์ฐ๊ฒฐ ๋ฐ ๊ธฐ๋ฅ ๊ตฌํ์ ๋ํด ๊ฒ์๋ค์ ๋ง์ด ํ์๋๋ฐ์.
์ด ๊ธ์์ ์ค์ํ ์ ์ Database์ ๊ธฐ์ด์์ด๋ ์ด ๊ธ์ ์ฝ์ง ๋ง์๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ๋ฐ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ์ด์ ์ธ ์ง์ (ํธ๋์ญ์ , SQL)์ ๊ฐ์ถ ๋ค์ ๋ณด๊ธฐ๋ฅผ ๊ถ์ฅํ๋ฉฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃจ๊ธฐ ๋ณด๋จ Python ์ธ์ด์์ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋์ง์ ๋ํด ๊ณต๋ถํ๊ณ ์ ํ ๋ ๋ณด์๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.