# SQL, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด์
์ฒซ ๋ฒ์งธ ์ธ๋ฏธํ๋ก์ ํธ๊ฐ ๋๋ ๋ค, ์ ์ ์ฌ๋ ์ฐจ์์์ ์ดํ๊ฐ DB (Database) ์ด๋ก ๊ณผ SQL ๊ธฐ์ด ๋ฌธ๋ฒ์ ๋ฐฐ์ ๋ค. ์ด๋ก ์ ์ธ ๋ด์ฉ์ ๊น์ด ๋ค์ด๊ฐ์ง ์์๋๋ฐ, ๋ค๋ค๋ ๋ด์ฉ์ ํต์ฌ์ ๋์ดํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- DBMS (Database Management System) ์ ๊ฐ๋ ๊ณผ ์ ํ
- ๋ฐ์ดํฐ๋ชจ๋ธ๋ง 3๋จ๊ณ์ ๋จ๊ณ๋ณ ์ธ๋ถ๋ด์ฉ (๊ฐ๋ ์ , ๋ ผ๋ฆฌ์ , ๋ฌผ๋ฆฌ์ ๋ชจ๋ธ๋ง)
- SQL ๊ณผ ๋ฐ์ดํฐ ์ธ์ด (DDL, DML, DCL)
- SQL ๊ณผ NoSQL
์ด๋ก ์ ์ธ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ์ถํ ๋ณด์ํ ๋ด์ฉ์ด๊ฑฐ๋ ์ ์ค๋ช ๋์ด ์๋ ๋ค๋ฅธ ์ถ์ฒ๊ฐ ๋ง์ผ๋ฏ๋ก, SQL ํ์ต ๊ณผ์ ๊ณผ ์ด์ ๋ํด ๋๋ ์ ์์ฃผ๋ก ์์ฑํด๋ณด๊ณ ์ ํ๋ค.
์ฐ๋ฆฌ๋ SQL ๊ธฐ๋ฐ RDBMS ์ค SQLite ๋ก ์ค์ต์ ์งํํ๋ค. DB ๋ฅผ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ ์ ๋ฐ์ดํฐ ์ ์ด๋ฅผ ๋์์ฃผ๋ SQL cursor ๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฒ, ์ผ์ข ์ ์ ์ฅ์ ์๋ฏธํ๋ Commit ์ ํ๋ ๋ฒ, DB ๊ฒฝ๋ก์ ์ฐ๊ฒฐํ๋ ๋ฒ ๋ฑ ๊ธฐ์ด์ ์ธ ๋ด์ฉ์ ๋จผ์ ์ง๊ณ ๋์ด๊ฐ๋ค. ์ดํ SQLite ์ ํํ ๋ฆฌ์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ chinook.db ๋ฅผ ํ์ฉํ์ฌ ์์ ์ ์งํํ๋ค.
* ์ค์ต์์ ์ฌ์ฉ๋ Chinook ๋ฐ์ดํฐ๋ - ๊ฐ๋จํ ์์ฝํ์๋ฉด - ์จ๋ฒ ํ๋งค ๋ฐ์ดํฐ์ด๋ฉฐ, ๊ตฌ์ฒด์ ์ธ ๋ฐ์ดํฐ๋ www.sqlitetutorial.net/sqlite-sample-database/ ์์ ์ดํด๋ณผ ์ ์๋ค. (ER Diagram ํฌํจ)
์ฐ์ chinook ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ Table ์ ๋ง๋ค๊ณ , ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ณ , ํน์ ๊ฐ์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ , ๋ถํ์ํ๊ฑฐ๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์๋ค. ์ด๋ ๋ฐ์ดํฐ์ CRUD (Create-Read-Update-Delete) ๋ฅผ ๊ฐ๋ฅ์ผ ํ๋ DML (Data Manipulation Language) ์ด๊ธฐ๋ ํ๋ค. ์ดํ ํํฐ๋ง, ์ ๋ ฌ, ์ ํ ๋ฑ์ ๊ตฌ๋ฌธ์ ํ์ฉํ์ฌ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋์ฑ ์์ ๋กญ๊ฒ ํ์ฉํ ์ ์๋๋ก ํ๋ ๋ฌธ๋ฒ์ ์ตํ๋ค.
์กฐ๊ธ ๋ ๋์ด๋๊ฐ ๋์ ๋ฌธ๋ฒ์ด๋ผ๊ณ ์๊ฐ๋ Join ๊ณผ Group ๊ตฌ๋ฌธ๋ค๋ ๋ค๋ค๋๋ฐ, ์ด๋ pandas ์ dataframe ์ ๋ค๋ค๋ณด์๋ค๋ฉด ๋ณ๋ก ์ด๋ ต๊ฒ ๋๊ปด์ง์ง ์๋ ๋ด์ฉ์ด์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์คํ๋ ค ์๊ฐ๋ณด๋ค ์ด๋ ค์ ๋ ๊ฒ์ ์นํฌ๋กค๋ฌ๋ฅผ ํตํด ์์งํ ๋ฐ์ดํฐ๋ฅผ ์ง์ db ์ ์ ์ฅํด์ผ ํ๋ ์ค์ต์ด์๋ค. SQL๊ณผ Python ๋ฌธ๋ฒ์ ๊ฐ๊ฐ ๋ฐ๋ก ๋ฐฐ์ ์ ๋๋ ์ฝ๊ฒ ๋๊ปด์ก๋๋ฐ, ์ด ๋์ ์์ฉํ์ฌ ๊ธด ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ ๋ฌธ๋ฒ ๊ฐ์ ์ ํ์ด ๊ธ๋ฐฉ ๋์ง ์์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊น์ง ์กฐ๊ธ ๊ฑธ๋ ธ๋ค.
SQL ์ ์ ๋ฐ์ ์ผ๋ก ํ์ด๋ณด๋ฉฐ, ํ์ด์ฌ ๋ฌธ๋ฒ์ ๊ณต๋ถํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๊ฒฐํ๊ณ ์ง๊ด์ ์ธ ์ ๋ ฅ๋ฌธ์ ํตํด ์ปดํจํฐ์๊ฒ ๋ช ๋ น์ ๋ด๋ฆฌ๊ณ ์ํ๋ ๊ฒฐ๊ณผ๊ฐ์ ๋์ถํ ์ ์๋ค๋ ์ ์์ ์ฌ๋ฏธ๋ฅผ ๋๊ผ๋ค. ๊ทธ๋ฌ๋ ๋์์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค๋ ๋๋ผ๊ณค ํ๋ค:
1) ์์ (Excel)๋ ์ฌ๋งํ ๋ฐ์ดํฐ ๋ถ์ ํด ๋ชป์ง์์ ํ๋ก๊ทธ๋จ์ด๋ค.
- 1-1) ์์ ํจ์๊ฐ ์๊ฐ๋จ๊ณผ ๋์์ ์์ ์ญ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๊ต์ฅํ ์ข์ ๋๊ตฌ์๋ค.
- 1-2) ์์ ๋ง ์ ๋ฌธ๊ฐ ์์ค์ผ๋ก ๋ค๋ฃจ์ด๋ ์ฌ๋งํ ๋ฐ์ดํฐ ๋ถ์ ์์ ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
- 1-3) ๊ฐ๋ฐ์ ๊ด์ฌ ์๋ ๋ฌธ๊ณผ์๋ค์ด๋ผ๋ฉด ์์ ๋ง ๋ฐฐ์๋ ๋ ๊ฒ์ด๋ค.
2) ๋ฐ์ดํฐ ๋ถ์์ ์ฝ๋ฉ ์ ํฉ์ฑ์ ํ์ ์ญ๋์ด ์๋์ง๋ ๋ชจ๋ฅธ๋ค.
- 2-1) Pandas ๋ชจ๋์ ํ์ฉํ์ฌ Dataframe์ ๋ค๋ฃจ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, SQL ์ ๋ค๋ฃจ๋๋ฐ ์ฝ๋ฉ ์ญ๋์ด ํฌ๊ฒ ํ์ํ์ง ์๋ค.
- 2-2) ๋ฐ์ดํฐ ๋ถ์ ์ ํ์ํ DB ๊ด๋ฆฌ๋ฅผ ์ํด ๋ฐฐ์ฐ๋ ๊ธฐ์ด ๋ด์ฉ (SQL ๋ฑ)์ ์ค์ '์ฝ๋ฉ'๊ณผ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค.
3) ๋ชจ๋ ๊ฒ์ ์ ๋ฌธ๊ฐ ์์ค์ผ๋ก ์ ํ ์๋ ์๋ค.
- 3-1) SQL ์ ๊ธฐ์ด์ ์ธ ๋ด์ฉ์ ๋ถ๊ณผํ๊ณ , SQL ์ 100% ํ์ฉํ๊ธฐ ์ํด์๋ DB ๊ณต๋ถ๋ฅผ ๊พธ์คํ ํด์ผํ๋ค.
- 3-2) ํ์ง๋ง DB๋ ์ปดํจํฐ๊ณตํ์ ํฐ ์ถ์ด๊ธฐ ๋๋ฌธ์ '์๋ฒฝ'ํ๊ฒ ์๋ ค๋ฉด ์๋ ๊ฐ ์ด ๋ถ์ผ๋ฅผ ํ์ผ ํ๋ค.
- 3-3) ๋ด๊ฐ '์ฃผ๋ก ํ๊ณ ์ ํ๋ ์ผ' ์ ํ์ํ ๊ณต๋ถ๋์ด ์ผ๋ง์ธ์ง, ๋ฒ์๋ ์ด๋๊น์ง์ธ์ง ํ์ ํ๋ ๊ฒ๋ ๋ฅ๋ ฅ์ด๋ค.
์์ง ๋ฐ๋ง ๋ด๊ฐ๋ณธ ๋ด๊ฐ ์ฝ๊ฒ ๋งํ ์ ์๋ ๋ถ๋ถ๋ค์ ์๋ ๊ฒ ๊ฐ์ง๋ง, ์ด๋ฐ ๋ด์ฉ๋ ๊ธฐ๋กํด๋์ด์ผ 1๋ , 2๋ ๋ค์ ์ง์์ ๊น์ด๊ฐ ๋์ฑ ๊น์ด์ง ๋ค์ ์๊ฐ๊ณผ ๋น๊ตํด๋ณผ ์ ์์ ๊ฒ์ด๋ค. DB ๋ ์ฌ๋ฏธ์๊ฒ ๊ณต๋ถํ ์ ์๋ ์์ญ์ด๋ผ๊ณ ๋๊ปด์ ธ์ ์์ผ๋ก ๊พธ์คํ ํ์ตํ๊ณ ์ ํ๋ค.
# ๋จธ์ ๋ฌ๋ ์ด๋ก ๊ฒฉํํ๊ธฐ
"์ฌ์ด๊ฐ๊ธฐ ํ์" ์ด์๋ SQL ํํธ๋ฅผ ์ง๋, ๋๋์ด ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ต์ก๊ณผ์ ์ด๋ฆ์ ๊ฑธ๋ง๋ '์ธ๊ณต์ง๋ฅ(AI)' ๋ฅผ ๋ฐฐ์ธ ์๊ฐ์ด ๋ค๊ฐ์๋ค. ๋จธ์ ๋ฌ๋ ํํธ๊ฐ ๋์์จ ๊ฒ์ด๋ค.
์... ํ์ง๋ง ์ฐ์ ๋จธ์ ๋ฌ๋๊ณผ ๋ฅ๋ฌ๋ ๊ณต๋ถ๋ฅผ ๋ชจ๋ ๋๋ง์น ํ ์์ ์์ ๋ด๊ฐ ๋๋ผ๋ ์ ์ ์ ํํํด ์ค ์งค์ ๊ฐ์ ธ์ ๋ณด์๋ค.
์ธ๊ณต์ง๋ฅ์ ๋ํ ๊ฐ๊ด์ ๋ด์ฉ๋ถํฐ '๋จธ์ ๋ฌ๋'์ ๊ด๋ชฉํ๋ ์ด๋ก ๋ค์ ๋ฐฐ์ด ์ดํ ์ด๋ก ์ ๊ตฌํํ๋ ์ค์ต์ ์งํํด ๋ณด์๋๋ฐ, ์ฒด๊ฐ์ ์ด๋ก ์ ์ดํดํ๋๋ฐ ์์๋ ์๋์ง๊ฐ 10์ด๋ผ๋ฉด ์ฝ๋๋ฅผ ๊ตฌํํ๋๋ฐ ์์๋ ์๋์ง๋ 0.00001 ๋ฐ์ ํ์ง ์์๋ค. ๊ทธ๋งํผ ๋จธ์ ๋ฌ๋์ ์ฝ๋ ํ ์ค ํ ์ค์ ์ง๋ ๊ฒ๋ณด๋ค ์ฝ๋์ ๋ด๊ธด ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ๋์๊ฐ์๋ ์ ์ฒด ๊ทธ๋ฆผ์ ๋ณผ ์ค ์๋ ๋ฅ๋ ฅ์ด ์ค์ํ๋ค.
๋จธ์ ๋ฌ๋ํํธ์์ ๋ค๋ฃฌ ๋ด์ฉ์ด ์๋ ๋ฐฉ๋ํ๋ฐ๋ค ์ผ์ผ์ด ์ด๊ฑฐ"๋ง" ํ๋ ๊ฒ ์์ฒด๋ ๋ณ๋ก ์๋ฏธ๊ฐ ์์ ๊ฒ ๊ฐ์ ์๋ตํ๋๋ก ํ๋ค. ํ์ง๋ง ์ด ๊ณผ์ ์ ํตํด ์ค์ ์ ์ผ๋ก ๋ฐฐ์ ๋ ์ ์ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค:
- ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ '์ด๋ค ๋ชจ๋ธ'์ ํ์ฉํ๋ฉด ์ข์์ง ์๊ธฐ๋ง ํด๋ 80%๋ ์ฑ๊ณต์ด๋ค.
- ๋๋จธ์ง 19%๋ ๋ฐ์ดํฐ์ ์, ์ง, ๋ชจ๋ธ์ ์ธ๋ถ์ฌํญ (hyperparameter)์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค.
- 1%๋ฅผ ๋จ๊ฒจ๋ ์ด์ ๋ - ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ์ ๋ง๋๋ ๋ฐ 100% ์ฑ๊ณต์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋ค. (There's always something better you can do about it)
๋ฌด์๋ณด๋ค ์ด๋ฒ ํํธ์์ ๊ฐ์ฅ ์ข์๋ ์ ์ 'AI' ๊ฐ ๋ฌด์์ธ์ง, ์ด๋ ๋ฒ์๊น์ง ํฌ๊ดํ๋์ง, ๊ทธ ๊ฐ๋ฅ์ฑ๊ณผ ํ๊ณ๊ฐ ๋ฌด์์ธ์ง ์ค์ค๋ก ์ฐพ์๋ณผ ์ ์๋๋ก ๊ฐ๋ ์ ์ธ ์ ๋ฆฌ๊ฐ ์ ๋์๋ค๋ ๊ฒ์ด๋ค. ๊ต์ก๊ณผ์ ์ ์ฐธ์ฌํ๊ธฐ ์ด์ ์๋ '์ธ๊ณต์ง๋ฅ'์ด๋ผ๋ ๋จ์ด๋ฅผ ๋ค์ผ๋ฉด ์ํ์ ์ด๋ผ๋ ๋๋์ ํจ๊ป ๋ฐ์๋ค. ๋ถ๋๋ฝ์ง๋ง, ์ด๋ ์ํ๋ ๋ด์ค ๋ฑ์ ๋ฏธ๋์ด์ ์ํฅ์ผ๋ก ๋ด๊ฐ ์ธ๊ณต์ง๋ฅ์ '์์๋ฅผ ๊ฐ์ง ๋ก๋ด' ์ ์ผ์ข ์ผ๋ก ์ธ์ํ๊ณ ์์๊ธฐ ๋๋ฌธ์ด์๋ค.
์ธ๊ณต์ง๋ฅ์ ๊ฐ๋ ๊ณผ ์ด๋ฅผ ๊ตฌ์ฑํ๋ ์ค์ง์ ์ธ '์ฝ๋'๋ฅผ ์๊ฒ ๋๋, ์คํ๋ ค ์ธ๊ณต์ง๋ฅ์ ํ์ฉํ๋ ๊ธฐ์ ์๋ก์์ '์ฃผ์ฒด์ฑ'์ ๊ฐ์ง๊ฒ ๋์๋ค. ์ฝ๋ ํ๋ํ๋๋ฅผ ๋ฏ์ด๋ณด๋ฉฐ ์ํ๋๋๋ก ๋ชจ๋ธ์ ๋ง๋ค์ด๊ฐ๋ ๊ณผ์ ์ด ์์๊ธฐ์ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๋ค.
...๋น๋ก, ์์ ์ฒจ๋ถํ ์งค๋๋ก, ๋จธ์ ๋ฌ๋ ๊ตฌํ์ ์คํ(?) ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ํฌํธ๊ฐ ์ ๋ถ๋ผ๊ณ ํ ์ง๋ผ๋, ๋ ์ข์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๋ฐ์ ์ํค๋ ๋ฐ์๋ ๋ด ์์ค๋ณด๋ค ๋์ฑ ๋ฐฉ๋ํ ์ํ + ์ปดํจํฐ๊ณตํ์ ์ธ ์ง์์ด ํ์ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์์ญ์ ๊พธ์คํ ๊ณต๋ถํด๋๊ฐ ์ ์๋ค๋ ์ ์์ ๋จธ์ ๋ฌ๋์ ์ง๊ฐ๊ฐ ๋๋ฌ๋๋ค๊ณ ์๊ฐํ๊ฒ ๋์๋ค.
๋๊ธ