DB
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ณธ ์ฉ์ด
โจ ํ
์ด๋ธ(Table)
ํ๊ณผ ์ด๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ์ ์งํฉ์ ํ ์ด๋ธ์ด๋ผ๊ณ ํ๋ค.
ํํ ์๊ฐํ๋ ์์ ์ ๋ ์ฌ๋ฆฌ๋ฉด ํธํ๋ค.
์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํ๊ณผ ์ด๋ง ์์ผ๋ฉด ํ ์ด๋ธ์ด๋ผ๊ณ ํ์ง๋ง, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ์ฌ๊ธฐ์ ํน๋ณํ ์ ์ฝ์ ์ถ๊ฐํด์ **๋ฆด๋ ์ด์ (Relation)**์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ํ ์ด๋ธ๋ง์ด ๋ฆด๋ ์ด์ ์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋ฆด๋ ์ด์ ์ ํ ์ด๋ธ์ด์ง๋ง, ๋ชจ๋ ํ ์ด๋ธ์ด ๋ฆด๋ ์ด์ ์ธ๊ฑด ์๋๋ค.
๋ชจ๋ ๊ฐ์ ์ ์ผํ ๊ฐ์ ๊ฐ์ง๋ค.
ํ๋์ ๋ฆด๋ ์ด์ ์์ ์ค๋ณต๋๋ ํ์ด ์กด์ฌํ๋ฉด ์๋๋ค.
โจ ํ(Row)
ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๋ค ์ค ๊ฐ๋ก๋ก ๋ฌถ์ ๋ฐ์ดํฐ์ ์ ์๋ฏธํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ํ์ ํ ๊ฐ์ฒด์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ ํํ ๋๋ ๋ ์ฝ๋๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฐ๋ค.
โจ ์ด(Colum)
ํ ์ด๋ธ์ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ๋ค ์ค ์ธ๋ก๋ก ๋ฌถ์ ๋ฐ์ดํฐ์ ์ ์๋ฏธํ๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ด์ ๊ทธ ํ ์ด๋ธ์ ์์ฑ์ ์๋ฏธํ๋ฉฐ ์ด์ ๊ตฌ์ฑํ๋ ๊ฐ๋ค์ ๊ฐ์ **๋๋ฉ์ธ(Domain)**์ผ๋ก ๋์ด ์๋ค.
์ด๋ํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์๋ **์์ฑ(Attribute)**์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ถ๋ฆฐ๋ค.
โจ ๋๋ฉ์ธ(Domain)
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํ๋(Field)์ ์ฑ์์ง ์ ์๋ ๊ฐ์ ์งํฉ์ด๋ค.
์๋ฅผ ๋ค์ด, ๋๋ฉ์ธ์ด 1์์ 10์ฌ์ด์ ์ ์์ธ ์์ฑ์ ํ๋์ 11์ด๋ -1์ฒ๋ผ ๋๋ฉ์ธ์ ๋ฒ์ด๋๋ ๊ฐ ๋๋ "๊ณ ์์ด"์ฒ๋ผ ์์ ์๋ฃํ์ด ๋ค๋ฅธ ๊ฐ์ด ๋ค์ด๊ฐ ์ ์๋ค.
โจ ์คํค๋ง(Schema)
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์กฐ๋ฅผ ์ ๋ฐ์ ์ผ๋ก ๊ธฐ์ ํ ๊ฒ์ ๋งํ๋ค.
๊ตฌ์ฒด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ์ดํฐ ๋ ์ฝ๋์ ํฌ๊ธฐ, ํค์ ์ ์, ๋ ์ฝ๋ ๊ฐ์ ๊ด๊ณ ๋ฑ์ ์ ์ํ ๊ฒ์ ๋งํ๋ค.
์ฌ์ฉ์์ ๊ด์ ์ ๋ฐ๋ผ ์ธ๋ถ ์คํค๋ง, ๊ฐ๋ ์คํค๋ง, ๋ด๋ถ ์คํค๋ง๋ก ๊ตฌ๋ถํ๋ค.
DBMS๋ ์ธ๋ถ ์คํค๋ง์ ๋ช ์ธ๋ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ๊ฐ๋ ์คํค๋ง ํํ๋ก ๋ณํํ๊ณ , ์ด๋ฅผ ๋ค์ ๋ด๋ถ ์คํค๋ง ํํ๋ก ๋ณํํ๋ค.
์ธ๋ถ ์คํค๋ง
์ฌ์ฉ์์ ์ ์ฅ์์ ์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ
๋ฐ์ดํฐ๋ค์ ์ด๋ค ํ์, ๊ตฌ์กฐ, ํ๋ฉด์ ํตํด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ๊ฒ์ธ๊ฐ์ ๋ํ ๋ช ์ธ๋ฅผ ๋งํ๋ฉฐ ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ์ฌ๋ฌ ๊ฐ์ ์ธ๋ถ ์คํค๋ง๊ฐ ์์ ์ ์๋ค.
์ผ๋ฐ ์ฌ์ฉ์์๊ฒ๋ ์ง์์ด๋ฅผ ์ด์ฉํด DB๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ํ๊ณ ์์ฉ ํ๋ก๊ทธ๋๋จธ๋ ์ธ์ด๋ฅผ ์ฌ์ฉํด์ DB์ ์ ๊ทผํ๋๋ก ํ๋ค.
๊ฐ๋ ์คํค๋ง
์กฐ์ง์ฒด ์ ์ฒด๋ฅผ ๊ด์ฅํ๋ ์ ์ฅ์์ DB๋ฅผ ์ ์ํ ์คํค๋ง.
DB์ ๋ํ ๋ชจ๋ ๋ ผ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ๋๋ง ์กด์ฌํ๋ฉฐ, ํต์ ์คํค๋ง๋ผ๊ณ ํ๋ฉด ๊ฐ๋ ์คํค๋ง๋ฅผ ์ผ์ปซ๋๋ค.
๋ด๋ถ ์คํค๋ง
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ด๋ป๊ฒ ์ ์ฅ ์ฅ์น์ ์ ์ฅ๋ ์ง์ ๋ํ ๋ช ์ธ.
๋ฌผ๋ฆฌ์ ์ธ ์ ์ฅ ์ฅ์น์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ฏ๋ก ์์คํ ํ๋ก๊ทธ๋๋จธ๋ ์์คํ ์ค๊ณ์๊ฐ ๋ณด๋ ๊ด์ ์ ์คํค๋ง์ด๋ค.
Key
Key๋? ๊ฒ์์ด๋ ์ ๋ ฌ ์ Tuple์ ๊ตฌ๋ถํ ์ ์๋ ๊ธฐ์ค์ด ๋๋ Attribute.

โจ 1. Candidate Key(ํ๋ณดํค)
๋ฆด๋ ์ด์ ์ ๊ตฌ์ฑํ๋ ์์ฑ๋ค ์ค์์ Tuple์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ์์ฑ๋ค์ ๋ถ๋ถ ์งํฉ์ ์๋ฏธํ๋ค.(๊ธฐ๋ณธํค๋ก ์ฌ์ฉํ ์ ์๋ ์์ฑ๋ค์ ํ๋ณดํค๋ผ ํ๋ค.)
๋ชจ๋ ๋ฆด๋ ์ด์ ์ ๋ฐ๋์ ํ๋ ์ด์์ ํ๋ณด ํค๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
๋ฆด๋ ์ด์ ์ ์๋ ๋ชจ๋ ํํ์ ๋ํด์ ์ ์ผ์ฑ๊ณผ ์ต์์ฑ์ ๋ง์กฑ์์ผ์ผ ํ๋ค.
์๋ 2๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
์ ์ผ์ฑ : Key๋ก ํ๋์ Tuple์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์์.
์ต์์ฑ : ๊ผญ ํ์ํ ์์ฑ์ผ๋ก๋ง ๊ตฌ์ฑ.
โจ 2. Primary Key(๊ธฐ๋ณธํค)
ํ๋ณด ํค ์ค ์ ํํ Main key
ํ ๋ฆด๋ ์ด์ ์์ ํน์ ํํ์ ์ ์ผํ๊ฒ ๊ตฌ๋ณํ ์ ์๋ ์์ฑ
Null ๊ฐ์ ๊ฐ์ง ์ ์๋ค.(๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ์ ์ฒซ ๋ฒ์งธ ์กฐ๊ฑด)
๊ธฐ๋ณธ ํค๋ก ์ ์๋ ์์ฑ์๋ ๋์ผํ ๊ฐ์ด ์ค๋ณต๋์ด ์ ์ฅ๋ ์ ์๋ค.(๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ์ ๋ ๋ฒ์งธ ์กฐ๊ฑด)
์๋ ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
์ ์ผ์ฑ
: ๊ธฐ๋ณธํค๋ฅผ ๊ตฌ์ฑํ๋ ์ปฌ๋ผ์ ํ ์ด๋ธ์์ ๋ ์ฝ๋๋ฅผ ์๋ณํ ์ ์๋๋ก ์ ์ผํด์ผ ํ๋ค.์ต์์ฑ
: ์ ์ผ์ฑ์ ๋ง์กฑํ๋ ํ๋ ๋ด์์ ์ต์ํ์ ์ปฌ๋ผ(ํ๋ ์ด์)์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํ๋ค.๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ
: ๊ธฐ๋ณธํค๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ ์ ์ผ์ฑ์ ๋ณด์ฅ๋ฐ์์ผ ํ๋ค.
โจ 3. Alternate Key(๋์ฒดํค)
ํ๋ณดํค๊ฐ ๋ ์ด์์ผ ๋, ๊ธฐ๋ณธ ํค๋ฅผ ์ ์ธํ ๋๋จธ์ง ํ๋ณดํค๋ค์ ๋งํ๋ค.
๋ณด์กฐํค๋ผ๊ณ ๋ ํ๋ค.
โจ 4. Super Key(์ํผํค)
ํ ๋ฆด๋ ์ด์ ๋ด์ ์๋ ์์ฑ๋ค์ ์งํฉ์ผ๋ก ๊ตฌ์ฑ๋ ํค๋ก์ ๋ฆด๋ ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํํ ์ค ์ํผํค๋ก ๊ตฌ์ฑ๋ ์์ฑ์ ์งํฉ๊ณผ ๋์ผํ ๊ฐ์ ๋ํ๋ด์ง ์๋๋ค.
๋ฆด๋ ์ด์ ์ ๊ตฌ์ฑํ๋ ๋ชจ๋ ํํ์ ๋ํด์ ์ ์ผ์ฑ์ ๋ง์กฑํ์ง๋ง, ์ต์์ฑ์ ๋ง์กฑ์ํค์ง ๋ชปํ๋ค.
โจ 5. Foreignn Key(์ธ๋ํค)
๊ด๊ณ(Relation)๋ฅผ ๋งบ๊ณ ์๋ ๋ฆด๋ ์ด์ R1,R2์์ ๋ฆด๋ ์ด์ R1์ด ์ฐธ์กฐํ๊ณ ์๋ ๋ฆด๋ ์ด์ R2์ ๊ธฐ๋ณธํค์ ๊ฐ์ R1 ๋ฆด๋ ์ด์ ์ ์์ฑ์ ์ธ๋ํค๋ผ๊ณ ํ๋ค.
์ธ๋ํค๋ ์ฐธ์กฐ๋๋ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธํค์ ๋์๋์ด ๋ฆด๋ ์ด์ ๊ฐ์ ์ฐธ์กฐ ๊ด๊ณ๋ฅผ ํํํ๋ ๋ฐ ์ค์ํ ๋๊ตฌ๋ก ์ฌ์ฉ๋๋ค.
์ธ๋ํค๋ก ์ง์ ๋๋ฉด ์ฐธ์กฐ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค์ ์๋ ๊ฐ์ ์ ๋ ฅํ ์ ์๋ค.(์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ์ ์กฐ๊ฑด)
๊ธฐํ
Null ๊ฐ?
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์์ง ์๋ ค์ง์ง ์์๊ฑฐ๋, ๋ชจ๋ฅด๋ ๊ฐ์ผ๋ก์ "ํด๋น ์์" ๋ฑ์ ์ด์ ๋ก ์ ๋ณด ๋ถ์ฌ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ฌ์ฉํ๋, ์ด๋ก ์ ์ผ๋ก ์๋ฌด๊ฒ๋ ์๋ ํน์ํ ๋ฐ์ดํฐ๋ฅผ ๋ปํ๋ค.
SQL injection
ํด์ปค์ ์ํด ์กฐ์๋ SQL ์ฟผ๋ฆฌ๋ฌธ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ทธ๋๋ก ์ ๋ฌ๋์ด ๋น์ ์์ ๋ช ๋ น์ ์คํ์ํค๋ ๊ณต๊ฒฉ ๊ธฐ๋ฒ์ ๋งํ๋ค.
โจ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ
1) ์ธ์ฆ ์ฐํ
๋ณดํต ๋ก๊ทธ์ธ์ ํ ๋, ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ input ์ฐฝ์ ์ ๋ ฅํ๋ค.
์๋ฅผ ๋ค์ด, ์์ด๋๊ฐ abc ๋น๋ฐ๋ฒํธ๊ฐ 1234์ผ ๋, ์ฟผ๋ฆฌ๋ ์๋์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ ์ก๋ ๊ฒ์ด๋ค.
SELECT * FROM USER WHERE ID = "abc" AND PASSWORD = "1234";
SQL Injection์ผ๋ก ๊ณต๊ฒฉํ ๋, input ์ฐฝ์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํจ๊ณผ ๋์์ ๋ค๋ฅธ ์ฟผ๋ฆฌ๋ฌธ์ ํจ๊ป ์ ๋ ฅํ๋ ๊ฒ์ด๋ค.
1234; DELETE * FROM USER WHERE ID = "1";
๋ณด์์ด ์๋ฒฝํ์ง ์์ ๊ฒฝ์ฐ, ์ด์ฒ๋ผ ๋น๋ฐ๋ฒํธ๊ฐ ์์ด๋์ ์ผ์นํด์ True๊ฐ ๋๊ณ ๋ค์ ์์ฑํ DELETE๋ฌธ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฅ์ ์ค ์๋ ์๊ฒ ๋๋ ์น๋ช ์ ์ธ ์ํฉ์ด๋ค.
์ด ๋ฐ์๋ ๊ธฐ๋ณธ ์ฟผ๋ฆฌ๋ฌธ์ WHERE์ ์ OR๋ฌธ์ ์ถ๊ฐํ์ฌ '1' = '1'
๊ณผ ๊ฐ์ true๋ฌธ์ ์์ฑํ์ฌ ๋ฌด์กฐ๊ฑด ์ ์ฉ๋๋๋ก ์์ ํ ๋ค DB๋ฅผ ๋ง์๋๋ก ์กฐ์ํ ์๋ ์๋ค.
2) ๋ฐ์ดํฐ ๋ ธ์ถ
์์คํ ์์ ๋ฐ์ํ๋ ์๋ฌ ๋ฉ์์ง๋ฅผ ์ด์ฉํด ๊ณต๊ฒฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ณดํต ์๋ฌ๋ ๊ฐ๋ฐ์๊ฐ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ฉด์์ ๋์์ ๋ฐ์ ์ ์๋ ์กด์ฌ์ด๋ค. ํด์ปค๋ค์ ์ด๋ฅผ ์ญ์ด์ฉํด ์ ์์ ์ธ ๊ตฌ๋ฌธ์ ์ฝ์ ํ์ฌ ์๋ฌ๋ฅผ ์ ๋ฐ์ํจ๋ค.
์๋ฅผ ๋ค๋ฉด, ํด์ปค๋ GET ๋ฐฉ์์ผ๋ก ๋์ํ๋ URL ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ถ๊ฐํ์ฌ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
์ด์ ํด๋นํ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ์ด๋ฅผ ํตํด ํด๋น ์น์ฑ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ ์ถํ ์ ์๊ณ ํดํน์ ํ์ฉํ๋ค.
โจ ๋ฐฉ์ด ๋ฐฉ๋ฒ
1) input ๊ฐ์ ๋ฐ์ ๋, ํน์ ๋ฌธ์ ์ฌ๋ถ ๊ฒ์ฌํ๊ธฐ
๋ก๊ทธ์ธ ์ , ๊ฒ์ฆ ๋ก์ง์ ์ถ๊ฐํ์ฌ ๋ฏธ๋ฆฌ ์ค์ ํ ํน์๋ฌธ์๋ค์ด ๋ค์ด์์ ๋ ์์ฒญ์ ๋ง์๋ธ๋ค.
2) SQL ์๋ฒ ์ค๋ฅ ๋ฐ์ ์, ํด๋นํ๋ ์๋ฌ ๋ฉ์์ง ๊ฐ์ถ๊ธฐ
view๋ฅผ ํ์ฉํด ์๋ณธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์๋ ์ ๊ทผ ๊ถํ์ ๋์ธ๋ค. ์ผ๋ฐ ์ฌ์ฉ์๋ view๋ก๋ง ์ ๊ทผํ์ฌ ์๋ฌ๋ฅผ ๋ณผ ์ ์๋๋ก ๋ง๋ ๋ค.
3) prepare statement ์ฌ์ฉํ๊ธฐ
prepare statement๋ฅผ ์ฌ์ฉํ๋ฉด ํน์๋ฌธ์๋ฅผ ์๋์ผ๋ก escaping ํด์ค๋ค.
(statement์๋ ๋ค๋ฅด๊ฒ ์ฟผ๋ฆฌ๋ฌธ์์ ์ ๋ฌ์ธ์ ๊ฐ์ ?๋ก ๋ฐ๋๊ฒ)์ด๋ฅผ ํ์ฉํด ์๋ฒ ์ธก์์ ํํฐ๋ง ๊ณผ์ ์ ํตํด์ ๊ณต๊ฒฉ์ ๋ฐฉ์ดํ๋ค.
Join
โจ ์กฐ์ธ์ด๋
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
ํ ์ด๋ธ์ ์ฐ๊ฒฐํ๋ ค๋ฉด, ์ ์ด๋ ํ๋์ ์นผ๋ผ์ ์๋ก ๊ณต์ ํ๊ณ ์์ด์ผ ํ๋ฏ๋ก ์ด๋ฅผ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ ๊ฒ์์ ํ์ฉํ๋ค.
โจ Join ์ข
๋ฅ
INNER JOIN
LEFT OUTER JOIN
RIGHT OUTER JOIN
FULL OUTER JOIN
CROSS JOIN
SELF JOIN
๋ฌธ๋ฒ SELECT ํ
์ด๋ธ๋ณ์นญ.์กฐํํ ์ปฌ๋ผ, ํ
์ด๋ธ๋ณ์นญ.์กฐํํ ์ปฌ๋ผ FROM ๊ธฐ์คํ
์ด๋ธ ๋ณ์นญ INNER JOIN ์กฐ์ธํ
์ด๋ธ ๋ณ์นญ ON ๊ธฐ์คํ
์ด๋ธ๋ณ์นญ.๊ธฐ์คํค = ์กฐ์ธํ
์ด๋ธ๋ณ์นญ.๊ธฐ์คํค ...
1) INNER JOIN

์ฝ๊ฒ ๋งํด ๊ต์งํฉ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ธฐ์ค ํ ์ด๋ธ๊ณผ Joinํ ํ ์ด๋ธ์ ์ค๋ณต๋ ๊ฐ์ ๋ณด์ฌ์ค๋ค.
๊ฒฐ๊ณผ๊ฐ์ A์ ํ ์ด๋ธ๊ณผ B ํ ์ด๋ธ์ด ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ๋ง ๊ฒ์๋๋ค.
Ex) SELECT A.NAME, B.AGE FROM EX_TABLE A INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
2) LEFT OUTER JOIN

๊ธฐ์ค ํ ์ด๋ธ์ ๊ฐ + ํ ์ด๋ธ๊ณผ ๊ธฐ์คํ ์ด๋ธ์ ์ค๋ณต๋ ๊ฐ์ ๋ณด์ฌ์ค๋ค.
์ผ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก Join์ ํ๊ฒ ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ฒฐ๊ณผ๊ฐ์ A ํ ์ด๋ธ์ ๋ชจ๋ ๊ฐ๊ณผ A ํ ์ด๋ธ๊ณผ B ํ ์ด๋ธ์ ์ค๋ณต๋๋ ๊ฐ์ด ๊ฒ์๋๋ค.
SELECT A.NAME, B.AGE FROM EX_TABLE A LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
3) RIGHT OUTER JOIN

LEFT OUTER JOIN์ ๋ฐ๋์ด๋ค.
์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก Join์ ํ๊ฒ ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
๊ฒฐ๊ณผ๊ฐ์ B ํ ์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ์ A ํ ์ด๋ธ๊ณผ B ํ ์ด๋ธ์์ ์ค๋ณต๋๋ ๊ฐ์ด ๊ฒ์๋๋ค.
SELECT A.NAME, B.AGE FROM EX_TABLE A RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
4) FULL OUTER JOIN

์ฝ๊ฒ ๋งํด ํฉ์งํฉ์ ์๊ฐํ๋ฉด ๋๋ค.
A ํ ์ด๋ธ์ด ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ, B ํ ์ด๋ธ์ด ๊ฐ์ง๊ณ ์๋ ๋ฐ์ดํฐ ๋ชจ๋ ๊ฒ์๋๋ค.
์ฌ์ค์, ๊ธฐ์ค ํ ์ด๋ธ์ ์๋ฏธ๊ฐ ์๋ค.
SELECT A.NAME, B.AGE FROM EX_TABLE A FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
5) CROSS JOIN

๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ ํํํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
๊ธฐ์ค ํ ์ด๋ธ์ด A์ผ ๊ฒฝ์ฐ, A์ ๋ฐ์ดํฐ ํ ROW๋ฅผ B ํ ์ด๋ธ ์ ์ฒด์ JOINํ๋ ๋ฐฉ์์ด๋ค.
๊ฒฐ๊ณผ๊ฐ์ N*M์ด๋ค.
์์ ๊ฒฝ์ฐ A ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ 3๊ฐ, B ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ 4๊ฐ๊ฐ ์์ผ๋ฏ๋ก ์ด 12๊ฐ๊ฐ ๊ฒ์๋๋ค.
-์ฒซ ๋ฒ์งธ ๋ฐฉ์-- SELECT A.NAME, B.AGE FROM EX_TABLE A CROSS JOIN JOIN_TABLE B --๋ ๋ฒ์งธ ๋ฐฉ์-- SELECT A.NAME, B.AGE FROM EX_TABLE A, JOIN_TABLE B
SELF JOIN

์๊ธฐ ์์ ๊ณผ ์๊ธฐ ์์ ์ ์กฐ์ธํ๋ค๋ ์๋ฏธ์ด๋ค.
ํ๋์ ํ ์ด๋ธ์ ์ฌ๋ฌ๋ฒ ๋ณต์ฌํด์ ์กฐ์ธํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์์ ์ด ๊ฐ์ง๊ณ ์๋ ์นผ๋ผ์ ๋ค์ํ๊ฒ ๋ณํ์์ผ ํ์ฉํ ๊ฒฝ์ฐ์ ์์ฃผ ์ฌ์ฉํ๋ค.
SELECT A.NAME, B.AGE FROM EX_TABLE A, EX_TABLE B
SQL vs NoSQL
โจ SQL (๊ด๊ณํ DB)
SQL์ ์ฌ์ฉํ๋ฉด RDBMS์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ, ์์ , ์ญ์ ๋ฐ ๊ฒ์ํ ์ ์๋ค.
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ํต์ฌ์ ์ธ ๋ ๊ฐ์ง ํน์ง์ด ์๋ค.
๋ฐ์ดํฐ๋ ์ ํด์ง ๋ฐ์ดํฐ ์คํค๋ง์ ๋ฐ๋ผ ํ ์ด๋ธ์ ์ ์ฅ๋๋ค.
๋ฐ์ดํฐ๋ ๊ด๊ณ๋ฅผ ํตํด ์ฌ๋ฌ ํ ์ด๋ธ์ ๋ถ์ฐ๋๋ค.
๋ฐ์ดํฐ๋ ํ ์ด๋ธ์ ๋ ์ฝ๋๋ก ์ ์ฅ๋๋๋ฐ, ๊ฐ ํ ์ด๋ธ๋ง๋ค ๋ช ํํ๊ฒ ์ ์๋ ๊ตฌ์กฐ๊ฐ ์๋ค. ํด๋น ๊ตฌ์กฐ๋ ํ๋์ ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ์ ์๋๋ค.
๋ฐ๋ผ์ ์คํค๋ง๋ฅผ ์ค์ํ์ง ์์ ๋ ์ฝ๋๋ ํ ์ด๋ธ์ ์ถ๊ฐํ ์ ์๋ค. ์ฆ, ์คํค๋ง๋ฅผ ์์ ํ์ง ์๋ ์ด์์ ์ ํด์ง ๊ตฌ์กฐ์ ๋ง๋ ๋ ์ฝ๋๋ง ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ ๊ฒ์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ง ์ค ํ๋์ด๋ค.
๋ํ, ๋ฐ์ดํฐ์ ์ค๋ณต์ ํผํ๊ธฐ ์ํด ๊ด๊ณ
๋ฅผ ์ด์ฉํ๋ค.

ํ๋์ ํ ์ด๋ธ์์ ์ค๋ณต ์์ด ํ๋์ ๋ฐ์ดํฐ๋ง์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ ์ด๋ธ์์ ๋ถ์ ํํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ์ํ์ด ์ค์ด๋๋ ์ฅ์ ์ด ์๋ค.
โจ NoSQL(๋น๊ด๊ณํ DB)
๋ง๊ทธ๋๋ก ๊ด๊ณํ DB์ ๋ฐ๋์ด๋ค.
์คํค๋ง๋ ์๊ณ ๊ด๊ณ๋ ์๋ค.
NoSQL์์๋ ๋ ์ฝ๋๋ฅผ ๋ฌธ์(documents)๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์ฌ๊ธฐ์ SQL๊ณผ ํต์ฌ์ ์ธ ์ฐจ์ด๊ฐ ์๋ค. SQL์ ์ ํด์ง ์คํค๋ง๋ฅผ ๋ฐ๋ฅด์ง ์์ผ๋ฉด ๋ฐ์ดํฐ ์ถ๊ฐ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค.
ํ์ง๋ง NoSQL์์๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ์ปฌ๋ ์ ์ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ฌธ์(documents)๋ Json๊ณผ ๋น์ทํ ํํ๋ก ๊ฐ์ง๊ณ ์๋ค. ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฒ๋ผ ์ฌ๋ฌ ํ ์ด๋ธ์ ๋๋์ด๋ด์ง ์๊ณ , ๊ด๋ จ ๋ฐ์ดํฐ๋ฅผ ๋์ผํ '์ปฌ๋ ์ '์ ๋ฃ๋๋ค.
๋ฐ๋ผ์ ์์ ์ฌ์ง์ SQL์์ ์งํํ Orders, Users, Products ํ ์ด๋ธ๋ก ๋๋ ๊ฒ์ NoSQL์์๋ Orders์ ํ๊บผ๋ฒ์ ํฌํจํด์ ์ ์ฅํ๊ฒ ๋๋ค.
๋ฐ๋ผ์ ์ฌ๋ฌ ํ ์ด๋ธ์ ์กฐ์ธํ ํ์์์ด ์ด๋ฏธ ํ์ํ ๋ชจ๋ ๊ฒ์ ๊ฐ์ถ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ด NoSQL์ด๋ค.
(NoSQL์๋ ์กฐ์ธ์ด๋ผ๋ ๊ฐ๋ ์ด ์กด์ฌํ์ง ์๋๋ค.)
๊ทธ๋ฌ๋ฉด ์กฐ์ธํ๊ณ ์ถ์ ๋ NoSQL์ ์ด๋ป๊ฒ ํ ๊น?
์ปฌ๋ ์ ์ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ์ฌ ๊ฐ ์ปฌ๋ ์ ์ผ๋ถ๋ถ์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ๊ฒ ์ฐ์ถํ๋๋ก ํ๋ค.
ํ์ง๋ง, ์ด๋ฌ๋ฉด ๋ฐ์ดํฐ๊ฐ ์ค๋ณต๋์ด ์๋ก ์ํฅ์ ์ค ์ํ์ด ์๋ค. ๋ฐ๋ผ์ ์กฐ์ธ์ ์ ์ฌ์ฉํ์ง ์๊ณ ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๋ฐ์ดํฐ์ผ ๋, NoSQL์ ์ฐ๋ฉด ์๋นํ ํจ์จ์ ์ด๋ค.
โจ ํ์ฅ ๊ฐ๋
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋น๊ตํ ๋ ์ค์ํ Scaling ๊ฐ๋ ๋ ์กด์ฌํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ํ์ฅ์ฑ์ ์์ง์ ํ์ฅ๊ณผ ์ํ์ ํ์ฅ์ผ๋ก ๋๋์ด์ง๋ค.
์์ง์ ํ์ฅ : ๋จ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๊ฒ(ex. CPU ์ ๊ทธ๋ ์ด๋)
์ํ์ ํ์ฅ : ๋ ๋ง์ ์๋ฒ๊ฐ ์ถ๊ฐ๋๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ ์ฒด์ ์ผ๋ก ๋ถ์ฐ๋จ์ ์๋ฏธํ๋ค.(ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์๋ํ์ง๋ง, ์ฌ๋ฌ ํธ์คํธ์์ ์๋)
๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ์์ผ๋ก ์ธํด SQL DB๋ ์ผ๋ฐ์ ์ผ๋ก ์์ง์ ํ์ฅ๋ง ์ง์ํ๋ค.
์ํ์ ํ์ฅ์ NoSQL DB์์๋ง ๊ฐ๋ฅํ๋ค.
๋ ์ค์ ๋ญ ์ ํํ๋๋์ ๋ํ ์ ๋ต์ ์๋ค. ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋์ ๋ฐ๋ผ ์ํ๋ ๋ฐฉ์์ ๋ง๊ฒ ์ ํ์ ๊ณ ๋ คํ๋ฉด ๋๋ค.
โจ SQL ์ฅ/๋จ์
[์ฅ์ ]
๋ช ํํ๊ฒ ์ ์๋ ์คํค๋ง, ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
๊ด๊ณ๋ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต ์์ด ํ๋ฒ๋ง ์ ์ฅ.
[๋จ์ ]
๋ ์ ์ฐํ๋ค. ๋ฐ์ดํฐ ์คํค๋ง๋ฅผ ์ฌ์ ์ ๊ณํํ๊ณ ์๋ ค์ผ ํ๋ค.(๋์ค์ ์์ ํ๊ธฐ ํ๋ฆ.)
๊ด๊ณ๋ฅผ ๋งบ๊ณ ์์ด์ ์กฐ์ธ๋ฌธ์ด ๋ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๊ฐ ๋ง๋ค์ด์ง ์ ์์.
๋์ฒด๋ก ์์ง์ ํ์ฅ๋ง ๊ฐ๋ฅํ๋ค.
โจ NoSQL ์ฅ/๋จ์
[์ฅ์ ]
์คํค๋ง๊ฐ ์์ด์ ์ ์ฐํ๋ค. ์ธ์ ๋ ์ง ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ ํ๊ณ ์๋ก์ด ํ๋ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ฐ์ดํฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ์๋ก ํ๋ ํ์์ผ๋ก ์ ์ฅ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๋ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
์์ง ๋ฐ ์ํ ํ์ฅ์ด ๊ฐ๋ฅํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ฐ์์ํค๋ ๋ชจ๋ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ฒญ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
[๋จ์ ]
์ ์ฐ์ฑ์ผ๋ก ์ธํด ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ฒฐ์ ์ ๋ฏธ๋ฃจ๊ฒ ๋ ์ ์๋ค.
๋ฐ์ดํฐ ์ค๋ณต์ ๊ณ์ ์ ๋ฐ์ดํธ ํด์ผ ํ๋ค.
๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ์ค๋ณต๋์ด ์๊ธฐ ๋๋ฌธ์ ์์ ์ ๋ชจ๋ ์ปฌ๋ ์ ์์ ์ํํด์ผ ํ๋ค. (SQL์์๋ ์ค๋ณต ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฏ๋ก ํ๋ฒ๋ง ์ํ์ด ๊ฐ๋ฅ)
โจ SQL DB ์ฌ์ฉ์ด ๋ ์ข์ ๋
๊ด๊ณ๋ฅผ ๋งบ๊ณ ์๋ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ๋ณ๊ฒฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ
NoSQL์์๋ ์ฌ๋ฌ ์ปฌ๋ ์ ์ ๋ชจ๋ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋นํจ์จ์
๋ณ๊ฒฝ๋ ์ฌ์ง๊ฐ ์๊ณ , ๋ช ํํ ์คํค๋ง๊ฐ ์ฌ์ฉ์์ ๋ฐ์ดํฐ์๊ฒ ์ค์ํ ๊ฒฝ์ฐ
โจ NoSQL DB ์ฌ์ฉ์ด ๋ ์ข์ ๋
์ ํํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ ์ ์๊ฑฐ๋ ๋ณ๊ฒฝ/ํ์ฅ์ด ๋ ์ ์๋ ๊ฒฝ์ฐ
์ฝ๊ธฐ๋ฅผ ์์ฃผ ํ์ง๋ง, ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์์ฃผ ์๋ ๊ฒฝ์ฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ์ผ๋ก ํ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ(๋ง๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ๋ ๊ฒฝ์ฐ)
์ด์(Anomaly)
โจ ์ ๊ทํ๋ฅผ ํด์ผ ํ๋ ์ด์ ๋ ์๋ชป๋ ํ ์ด๋ธ ์ค๊ณ๋ก ์ธํด Anomaly(์ด์ ํ์)๊ฐ ๋ํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ฌ๊ธฐ์ Anomaly๊ฐ ๋ฌด์์ธ์ง ์์๋ณด์.
Ex)
{Student ID, CourseID, Department, Course ID, Grade}
1) ์ฝ์ ์ด์(Insertion Anomaly)
๊ธฐ๋ณธํค๊ฐ {Student ID, Course ID} ์ธ ๊ฒฝ์ฐ
Course๋ฅผ ์๊ฐํ์ง ์์ ํ์์ Course ID๊ฐ ์๋ ํ์์ด ๋ฐ์ํ๋ค. ๊ฒฐ๊ตญ, Course ID๋ฅผ Null๋ก ํ ์ ๋ฐ์ ์๋๋ฐ, ๊ธฐ๋ณธํค๋ Null์ด ๋ ์ ์์ผ๋ฏ๋ก ํ ์ด๋ธ์ ์ถ๊ฐ๋ ์ ์๋ค.
๊ตณ์ด ์ฝ์ ํ๊ธฐ ์ํด์๋ '๋ฏธ์๊ฐ'๊ณผ ๊ฐ์ Course ID๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํด์ผ ์ฝ์ ํ ์ ์๋ ์ํฉ => Insertion Anomaly
2) ๊ฐฑ์ ์ด์(Update Anomaly)
๋ง์ฝ ์ด๋ค ํ์์ ์ ๊ณต {Department}์ด "์ปดํจํฐ -> ์์ "์ผ๋ก ๋ฐ๋๋ ๊ฒฝ์ฐ
๋ชจ๋ Department๋ฅผ "์์ "์ผ๋ก ๋ฐ๊พธ์ด์ผ ํ๋ค. ๊ทธ๋ฌ๋ ์ผ๋ถ๋ฅผ ๊น๋นกํ๊ณ ๋ฐ๊พธ์ง ๋ชปํ๋ ๊ฒฝ์ฐ, ์ ๋๋ก ํ์ ํ์ง ๋ชปํ๋ค.
์ผ๋ถ๋ง ๋ณ๊ฒฝํ์ฌ ๋ฐ์ดํฐ๊ฐ ๋ถ์ผ์นํ๋ ๋ชจ์์ ๋ฌธ์ => Update Anomaly
3) ์ญ์ ์ด์(Deletion Anomaly)
๋ง์ฝ ์ด๋ค ํ์์ด ์๊ฐ์ ์ฒ ํํ๋ ๊ฒฝ์ฐ, {Student ID, Course ID, Department, Course ID, Grade}์ ์ ๋ณด ์ค Course ID๋ฅผ ์ญ์ ํ๋ฉด Student ID, Department์ ๊ฐ์ ํ์์ ๋ํ ์ ๋ณด๋ ํจ๊ป ์ญ์ ๋๋ค.
ํํ ์ญ์ ๋ก ์ธํด ๊ผญ ํ์ํ ๋ฐ์ดํฐ๊น์ง ํจ๊ป ์ญ์ ๋๋ ๋ฌธ์ => Deletion Anomaly
์ธ๋ฑ์ค(INDEX)
โจ INDEX์ ์๋ฏธ
RDBMS์์ ๊ฒ์ ์๋๋ฅผ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๋์ ๊ธฐ์ ์ด๋ค.
INDEX๋ ์์ธ์ด๋ค.
ํด๋น Table์ ์ปฌ๋ผ์ ์์ธํ(๋ฐ๋ก ํ์ผ๋ก ์ ์ฅ)ํ์ฌ ๊ฒ์์ ํด๋น Table์ ๋ ์ฝ๋๋ฅผ full scanํ๋๊ฒ ์๋๋ผ ์์ธํ ๋์ด์๋ INDEX ํ์ผ์ ๊ฒ์ํ์ฌ ๊ฒ์ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ค.
INDEX ๊ตฌ์กฐ๋ Tree ๊ตฌ์กฐ๋ก ์์ธํํ๋ค.
RDBMS์์ ์ฌ์ฉํ๋ INDEX๋ Balance Search Tree๋ฅผ ์ฌ์ฉํ๋ค.
โจ INDEX์ ์๋ฆฌ
INDEX๋ฅผ ํด๋น ์ปฌ๋ผ์ ์ฃผ๊ฒ ๋๋ฉด ์ด๊ธฐ Table ์์ฑ์, FRM, MYD, MYI 3๊ฐ์ ํ์ผ์ด ๋ง๋ค์ด์ง๋ค.
FRM : ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ์ ์ฅ๋์ด ์๋ ํ์ผ
MYD : ์ค์ ๋ฐ์ดํฐ๊ฐ ์๋ ํ์ผ
MYI : INDEX ์ ๋ณด๊ฐ ๋ค์ด์๋ ํ์ผ
INDEX๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ, MYI ํ์ผ์ ๋น์ด์ ธ ์๋ค.
๊ทธ๋ฌ๋ INDEX๋ฅผ ํด๋น ์ปฌ๋ผ์ ๋ง๋ค๊ฒ ๋๋ฉด ํด๋น ์ปฌ๋ผ์ ๋ฐ๋ก ์ธ๋ฑ์ฑํ์ฌ MYI ํ์ผ์ ์ ๋ ฅํ๋ค.
์ดํ์ ์ฌ์ฉ์๊ฐ SELECT ์ฟผ๋ฆฌ๋ก INDEX๋ฅผ ์ฌ์ฉํ๋ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉ์ ํด๋น Table์ ๊ฒ์ํ๋ ๊ฒ์ด ์๋๋ผ MYI ํ์ผ์ ๋ด์ฉ์ ๊ฒ์ํ๋ค.
๋ง์ฝ, INDEX๋ฅผ ์ฌ์ฉํ์ง ์์ SELECT ์ฟผ๋ฆฌ๋ผ๋ฉด ํด๋น Table Full scanํ์ฌ ๋ชจ๋ ๊ฒ์ํ๋ค.
์ด๋ ์ฑ ์ ๋ท๋ถ๋ถ์ <์ฐพ์๋ณด๊ธฐ>์ ๊ฐ์ ์๋ฏธ๋ก ์ ๋ฆฌํด๋ ๋จ์ด ์ค์์ ์ํ๋ ๋จ์ด๋ฅผ ์ฐพ์์ ํ์ด์ง์๋ฅผ ๋ณด๊ณ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ ๊ฐ๋ ๊ณผ ๊ฐ๋ค. ๋ง์ฝ, ์ด <์ฐพ์๋ณด๊ธฐ>๊ฐ ์๋ค๋ฉด ์ฒ์๋ถํฐ ๋๊น์ง ๋ชจ๋ ํ์ด์ง๋ฅผ ๋ณด๊ณ ์ฐพ์์์ผํ ๊ฒ์ด๋ค.
โจ INDEX ์ฅ์
ํค ๊ฐ์ ๊ธฐ์ด๋ก ํ์ฌ ํ ์ด๋ธ์์ ๊ฒ์๊ณผ ์ ๋ ฌ ์๋๋ฅผ ํฅ์์ํจ๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ ํ์ ๊ณ ์ ์ฑ์ ๊ฐํ์ํฌ ์ ์๋ค.
ํ ์ด๋ธ์ ๊ธฐ๋ณธํค๋ ์๋์ผ๋ก ์ธ๋ฑ์ค๋๋ค.
ํ๋ ์ค์๋ ๋ฐ์ดํฐ ํ์ ๋๋ฌธ์ ์ธ๋ฑ์ค ๋ ์ ์๋ ํ๋๋ ์๋ค.
์ฌ๋ฌ ํ๋๋ก ์ด๋ฃจ์ด์ง(๋ค์ค ํ๋)์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒซ ํ๋ ๊ฐ์ด ๊ฐ์ ๋ ์ฝ๋๋ ๊ตฌ๋ถํ ์ ์๋ค.
์ฐธ๊ณ ๋ก ์ก์ธ์ค์์ ๋ค์ค ํ๋ ์ธ๋ฑ์ค๋ ์ต๋ 10๊ฐ์ ํ๋๋ฅผ ํฌํจํ ์ ์๋ค.
โจ INDEX ๋จ์
์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๋ฉด .mdb ํ์ผ ํฌ๊ธฐ๊ฐ ๋์ด๋๋ค.
์ฌ์ฉ์๊ฐ ํ ํ์ด์ง๋ฅผ ๋์์ ์์ ํ ์ ์๋ ๋ณํ์ฑ์ด ์ค์ด๋ ๋ค.
์ธ๋ฑ์ค๋ ํ๋์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๊ฑฐ๋ ๋ ์ฝ๋๋ฅผ ์ถ๊ฐ ๋๋ ์ญ์ ํ ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
์ธ๋ฑ์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต๊ฐ์ ์ฐจ์ง์ฌ ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ด ํ์ํด์ง๋ค.(DB์ 10% ๋ด์ธ์ ๊ณต๊ฐ์ด ์ถ๊ฐ๋ก ํ์ํ๋ค.)
์ธ๋ฑ์ค๋ฅผ ์์ฑํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ์์๋ ์ ์๋ค.
๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์ ์ด ์์ฃผ ์ผ์ด๋ ๊ฒฝ์ฐ์ ์ธ๋ฑ์ค๋ฅผ ์ฌ์์ฑํด์ผ ํ ํ์๊ฐ ์๊ธฐ์ ์ฑ๋ฅ์ ์ํฅ์ ๋ผ์น ์ ์๋ค.
๋ฐ๋ผ์ ์ด๋ ํ๋๋ฅผ ์ธ๋ฑ์คํด์ผ ํ๋์ง ๋ฏธ๋ฆฌ ์ํํด๋ณด๊ณ ๊ฒฐ์ ํ๋ ๊ฒ์ด ์ข๋ค. ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์ฟผ๋ฆฌ ์๋๊ฐ 1์ด ์ ๋ ๋นจ๋ผ์ง์ง๋ง, ๋ฐ์ดํฐ ํ์ ์ถ๊ฐํ๋ ์๋๋ 2์ด ์ ๋ ๋๋ ค์ง๊ฒ ๋์ด ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ๋ ์ฝ๋ ์ ๊ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋, ๋ค๋ฅธ ํ๋์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ง๋ค๊ฒ ๋๋ฉด ์ฑ๋ฅ์ด ๋ณ๋ก ํฅ์๋์ง ์์ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด, ํ ์ด๋ธ์ ํ์ฌ ์ด๋ฆ ํ๋์ ์ฑ ํ๋๊ฐ ์ด๋ฏธ ์ธ๋ฑ์ค๋ ๊ฒฝ์ฐ์ ์ฐํธ ๋ฒํธ๋ฅผ ํ๋๋ก ์ถ๊ฐํด ์ธ๋ฑ์ค์ ํฌํจํด๋ ์ฑ๋ฅ์ด ๊ฑฐ์ ํฅ์๋์ง ์๋๋ค. ๋ง๋๋ ์ฟผ๋ฆฌ์ ์ข ๋ฅ์ ๊ด๊ณ ์์ด ๊ฐ์ฅ ๊ณ ์ ํ ๊ฐ์ ๊ฐ๋ ํ๋๋ง ์ธ๋ฑ์คํด์ผ ํ๋ค.
โจ INDEX์ ๋ชฉ์
RDBMS์๋ INDEX๊ฐ ์๋ค. ์ธ๋ฑ์ค์ ๋ชฉ์ ์ RDBMS์ ๊ฒ์ ์๋๋ฅผ ๋์ด๋๋ฐ ์๋ค.
SELECT ์ฟผ๋ฆฌ์ WHERE์ ์ด๋ JOIN ์์ฝ์ด๋ฅผ ์ฌ์ฉํ์ ๋๋ง ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉฐ, SELECT ์ฟผ๋ฆฌ์ ๊ฒ์ ์๋๋ฅผ ๋น ๋ฅด๊ฒ ํ๋๋ฐ ๋ชฉ์ ์ ๋๊ณ ์๋ค.
DELETE, INSERT, UPDATE ์ฟผ๋ฆฌ์๋ ํด๋น ์ฌํญ์ด ์์ผ๋ฉฐ INDEX ์ฌ์ฉ์ ์คํ๋ ค ์ข ๋๋ ค์ง๋ค.
โจ ์ํฉ ๋ถ์
[์ฌ์ฉํ๋ฉด ์ข์ ๊ฒฝ์ฐ]
Where์ ์์ ์์ฃผ ์ฌ์ฉ๋๋ Column
์ธ๋ํค๊ฐ ์ฌ์ฉ๋๋ Column
Join์ ์์ฃผ ์ฌ์ฉ๋๋ Column
[Index ์ฌ์ฉ์ ํผํด์ผ ํ๋ ๊ฒฝ์ฐ]
Data ์ค๋ณต๋๊ฐ ๋์ Column
DML์ด ์์ฃผ ์ผ์ด๋๋ Column
โจ DML์ ์ทจ์ฝ
INSERT
indext split : ์ธ๋ฑ์ค์ Block๋ค์ด ํ๋์์ ๋๊ฐ๋ก ๋๋์ด์ง๋ ํ์.
์ธ๋ฑ์ค๋ ๋ฐ์ดํฐ๊ฐ ์์๋๋ก ์ ๋ ฌ๋์ด์ผ ํ๋ค. ๊ธฐ์กด ๋ธ๋ก์ ์ฌ์ ๊ณต๊ฐ์ด ์๋ ์ํฉ์์ ๊ทธ ๋ธ๋ก์ ์๋ก์ด ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋์ด์ผ ํ ๊ฒฝ์ฐ, ์ค๋ผํด์ด ๊ธฐ์กด ๋ธ๋ก์ ๋ด์ฉ ์ค ์ผ๋ถ๋ฅผ ์ ๋ธ๋ก์๋ค๊ฐ ๊ธฐ๋กํ ํ, ๊ธฐ์กด ๋ธ๋ก์ ๋น ๊ณต๊ฐ์ ๋ง๋ค์ด์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฒ ๋๋ค.
์ฑ๋ฅ๋ฉด์์ ๋งค์ฐ ๋ถ๋ฆฌํ๋ค.
Index split์ ์๋ก์ด ๋ธ๋ก์ ํ ๋น๋ฐ๊ณ Key๋ฅผ ์ฎ๊ธฐ๋ ๋ณต์กํ ์์ ์ ์ํํ๋ค. ๋ชจ๋ ์ํ ๊ณผ์ ์ด Redo์ ๊ธฐ๋ก๋๊ณ ๋ง์ ์์ Redo๋ฅผ ์ ๋ฐํ๋ค.
Index split์ด ์ด๋ฃจ์ด์ง๋ ๋์ ํด๋น ๋ธ๋ก์ ๋ํด ํค ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ์๋๋ฏ๋ก DML์ด ๋ธ๋กํน๋๋ค.
DELETE
ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๊ฐ Delete๋ ๊ฒฝ์ฐ, ์ง์์ง๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ๊ทธ ๊ณต๊ฐ์ ์ฌ์ฉํ ์ ์๋ค.
index์์ ๋ฐ์ดํฐ๊ฐ delete๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๊ฐ ์ง์์ง์ง ์๊ณ ์ฌ์ฉ ์๋จ ํ์๋ง ํด๋๋ค.
์ฆ, ํ ์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ 1๋ง๊ฑด ์๋ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์๋ 2๋ง๊ฑด์ด ์์ ์ ์๋ค๋ ๋ป์ด๋ค.
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํด๋ ์ํ ์๋๋ฅผ ๊ธฐ๋ํ๊ธฐ ํ๋ค๋ค.
UPDATE
์ธ๋ฑ์ค์๋ Update ๊ฐ๋ ์ด ์๋ค.
ํ ์ด๋ธ์ update๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ, ์ธ๋ฑ์ค์์๋ delete๊ฐ ๋จผ์ ๋ฐ์ํ ํ ์๋ก์ด ์์ ์ insert ์์ ์ด ๋ฐ์ํ๋ค.
delete์ insert ๋ ๊ฐ์ ์์ ์ด ์ธ๋ฑ์ค์์ ๋์์ ์ผ์ด๋ ๋ค๋ฅธ DML๋ณด๋ค ๋ ํฐ ๋ถํ๋ฅผ ์ฃผ๊ฒ ๋๋ค.
์ ๊ทํ
๋ฐ์ดํฐ์ ์ค๋ณต์ ์ค์ด๊ณ , ๋ฌด๊ฒฐ์ฑ์ ํฅ์์ํฌ ์ ์๋ ์ ๊ทํ์ ๋ํด ์์๋ณด์
โจ Normalization
๊ฐ์ฅ ํฐ ๋ชฉํ๋ ํ ์ด๋ธ ๊ฐ ์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ง ์๋ ๊ฒ์ด๋ค.
์ค๋ณต๋ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค์ง ์์ผ๋ฉด, ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์๊ณ , DB ์ ์ฅ ์ฉ๋ ๋ํ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
โจ ๋ชฉ์
๋ฐ์ดํฐ์ ์ค๋ณต์ ์์ ๋ฉด์ ๋ถํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ต์ํ์ํจ๋ค.
๋ฌด๊ฒฐ์ฑ์ ์งํค๊ณ , ์ด์ ํ์์ ๋ฐฉ์งํ๋ค.
ํ ์ด๋ธ ๊ตฌ์ฑ์ ๋ ผ๋ฆฌ์ ์ด๊ณ ์ง๊ด์ ์ผ๋ก ํ ์ ์๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ํ์ฅ์ ์ฉ์ดํด์ง๋ค.
์ ๊ทํ์๋ ์ฌ๋ฌ๊ฐ์ง ๋จ๊ณ๊ฐ ์์ง๋ง, ๋์ฒด์ ์ผ๋ก 1~3๋จ๊ณ ์ ๊ทํ๊น์ง์ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
โจ ์ 1์ ๊ทํ(1NF)
ํ ์ด๋ธ ์ปฌ๋ผ์ด ์์๊ฐ(ํ๋์ ๊ฐ)์ ๊ฐ๋๋ก ํ ์ด๋ธ์ ๋ถ๋ฆฌ์ํค๋ ๊ฒ์ ๋งํ๋ค.
๋ง์กฑํด์ผ ํ ์กฐ๊ฑด์ ์๋์ ๊ฐ๋ค.
์ด๋ค ๋ฆด๋ ์ด์ ์ ์ํ ๋ชจ๋ ๋๋ฉ์ธ์ด ์์๊ฐ๋ง์ผ๋ก ๋์ด ์์ด์ผํ๋ค.
๋ชจ๋ ์์ฑ์ ๋ฐ๋ณต๋๋ ๊ทธ๋ฃน์ด ๋ํ๋์ง ์๋๋ค.
๊ธฐ๋ณธํค๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ จ ๋ฐ์ดํฐ์ ๊ฐ ์งํฉ์ ๊ณ ์ ํ๊ฒ ์๋ณํ ์ ์์ด์ผ ํ๋ค.
ํ์ฌ ํ ์ด๋ธ์ ์ ํ๋ฒํธ๋ฅผ ์ฌ๋ฌ๊ฐ ๊ฐ์ง๊ณ ์์ด ์์๊ฐ์ด ์๋๋ค. ๋ฐ๋ผ์ 1NF์ ๋ง์ถ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด ๋ถ๋ฆฌํ ์ ์๋ค.
โจ ์ 2์ ๊ทํ(2NF)
ํ ์ด๋ธ์ ๋ชจ๋ ์ปฌ๋ผ์ด ์์ ํจ์์ ์ข ์์ ๋ง์กฑํด์ผ ํ๋ค.
์กฐ๊ธ ์ฝ๊ฒ ๋งํ๋ฉด, ํ ์ด๋ธ์์ ๊ธฐ๋ณธํค๊ฐ ๋ณตํฉํค(ํค1, ํค2)๋ก ๋ฌถ์ฌ์์ ๋, ๋ ํค ์ค ํ๋์ ํค๋ง์ผ๋ก ๋ค๋ฅธ ์ปฌ๋ผ์ ๊ฒฐ์ ์ง์ ์ ์์ผ๋ฉด ์๋๋ค.
๊ธฐ๋ณธํค์ ๋ถ๋ถ์งํฉ ํค๊ฐ ๊ฒฐ์ ์๊ฐ ๋์ด์ ์๋๋ค๋ ๊ฒ
Manufacture
๊ณผ Model
์ด ํค๊ฐ ๋์ด Model Full Name
์ ์ ์ ์๋ค.
Manufacturer Country
๋ Manufacturer
๋ก ์ธํด ๊ฒฐ์ ๋๋ค. (๋ถ๋ถ ํจ์ ์ข
์)
๋ฐ๋ผ์, Model
๊ณผ Manufacturer Country
๋ ์๋ฌด๋ฐ ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ ์ํฉ์ด๋ค.
๊ฒฐ๊ตญ ์์ ํจ์์ ์ข ์์ ์ถฉ์กฑ์ํค์ง ๋ชปํ๊ณ ์๋ ํ ์ด๋ธ์ด๋ค. ๋ถ๋ถ ํจ์ ์ข ์์ ํด๊ฒฐํ๊ธฐ ์ํด ํ ์ด๋ธ์ ์๋์ ๊ฐ์ด ๋๋ ์ 2NF๋ฅผ ๋ง์กฑํ ์ ์๋ค.
โจ ์ 3์ ๊ทํ(3NF)
2NF๊ฐ ์งํ๋ ํ ์ด๋ธ์์ ์ดํ์ ์ข ์์ ์์ ๊ธฐ ์ํด ํ ์ด๋ธ์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ดํ์ ์ข ์ : A โ B, B โ C๋ฉด A โ C๊ฐ ์ฑ๋ฆฝ๋๋ค
์๋ ๋๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑ์์ผ์ผ ํ๋ค.
๋ฆด๋ ์ด์ ์ด 2NF์ ๋ง์กฑํ๋ค.
๊ธฐ๋ณธํค๊ฐ ์๋ ์์ฑ๋ค์ ๊ธฐ๋ณธํค์ ์์กดํ๋ค.
ํ์ฌ ํ
์ด๋ธ์์๋ Tournament
์ Year
์ด ๊ธฐ๋ณธํค๋ค.
Winner
๋ ์ด ๋ ๋ณตํฉํค๋ฅผ ํตํด ๊ฒฐ์ ๋๋ค.
ํ์ง๋ง Winner Date of Birth
๋ ๊ธฐ๋ณธํค๊ฐ ์๋ Winner
์ ์ํด ๊ฒฐ์ ๋๊ณ ์๋ค.
๋ฐ๋ผ์ ์ด๋ 3NF๋ฅผ ์๋ฐํ๊ณ ์์ผ๋ฏ๋ก ์๋์ ๊ฐ์ด ๋ถ๋ฆฌํด์ผ ํ๋ค.
์ ์ฅ ํ๋ก์์ (Stored Procedure)
โจ ์ผ๋ จ์ ์ฟผ๋ฆฌ๋ฅผ ๋ง์น ํ๋์ ํจ์์ฒ๋ผ ์คํํ๊ธฐ ์ํ ์ฟผ๋ฆฌ์ ์งํฉ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ SQL์ ํตํด ์์ ์ ํ๋ค ๋ณด๋ฉด, ํ๋์ ์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ ๋๊ฐ ์๊ธด๋ค. ์ํ๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ป๊ธฐ ์ํด ์ฌ์ฉํ ์ฌ๋ฌ์ค์ ์ฟผ๋ฆฌ๋ฌธ์ ํ ๋ฒ์ ์์ฒญ์ผ๋ก ์คํํ๋ฉด ์ข์ง ์์๊น? ๋ํ, ์ธ์ ๊ฐ๋ง ์ํฉ์ ๋ฐ๋ผ ๋ฐ๋๊ณ ๋์ผํ ๋ก์ง์ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฌธ์ ํ์ํ ๋๋ง๋ค ์์ฑํ๋ค๋ฉด ๋นํจ์จ์ ์ด์ง ์์๊น?
์ด๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด ๋ฐ๋ก ํ๋ก์์ ๋ค.
โจ ํ๋ก์์ ์ฅ์
์ต์ ํ & ์บ์
ํ๋ก์์ ์ ์ต์ด ์คํ ์ ์ต์ ํ ์ํ๋ก ์ปดํ์ผ์ด ๋๋ฉฐ, ๊ทธ ์ดํ ํ๋ก์์ ์บ์์ ์ ์ฅ๋๋ค.
๋ง์ฝ ํด๋น ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ๋ฒ ์ฌ์ฉ๋ ๋, ๋ค์ ์ปดํ์ผ ์์ ์ ๊ฑฐ์น์ง ์๊ณ ์บ์์์ ๊ฐ์ ธ์ค๊ฒ ๋๋ค.
์ ์ง ๋ณด์
์์ ์ด ๋ณ๊ฒฝ๋ ๋, ๋ค๋ฅธ ์์ ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ํ๋ก์์ ๋ด๋ถ์์ ์์ ๋ง ํ๋ฉด ๋๋ค. (But, ์ฅ์ ์ด ๋จ์ ์ด ๋ ์๋ ์๋ ๋ถ๋ถ์ด๊ธฐ๋.. )
ํธ๋ํฝ ๊ฐ์
ํด๋ผ์ด์ธํธ๊ฐ ์ง์ SQL๋ฌธ์ ์์ฑํ์ง ์๊ณ , ํ๋ก์์ ๋ช ์ ๋งค๊ฐ๋ณ์๋ง ๋ด์ ์ ๋ฌํ๋ฉด ๋๋ค. ์ฆ, SQL๋ฌธ์ด ์๋ฒ์ ์ด๋ฏธ ์ ์ฅ๋์ด ์๊ธฐ ๋๋ฌธ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ๋คํธ์ํฌ ์ ํธ๋ํฝ์ด ๊ฐ์๋๋ค.
๋ณด์
ํ๋ก์์ ๋ด์์ ์ฐธ์กฐ ์ค์ธ ํ ์ด๋ธ์ ์ ๊ทผ์ ๋ง์ ์ ์๋ค.
โจ ํ๋ก์์ ๋จ์
ํธํ์ฑ
๊ตฌ๋ฌธ ๊ท์น์ด SQL / PSM ํ์ค๊ณผ์ ํธํ์ฑ์ด ๋ฎ๊ธฐ ๋๋ฌธ์ ์ฝ๋ ์์ฐ์ผ๋ก์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์๋ค.
์ฑ๋ฅ
๋ฌธ์ ๋๋ ์ซ์ ์ฐ์ฐ์์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ธ C๋ Java๋ณด๋ค ์ฑ๋ฅ์ด ๋๋ฆฌ๋ค.
๋๋ฒ๊น
์๋ฌ๊ฐ ๋ฐ์ํ์ ๋, ์ด๋์ ์๋ชป๋๋์ง ๋๋ฒ๊น ํ๋ ๊ฒ์ด ํ๋ค ์ ์๋ค.
Statement vs PreparedStatement
์ฐ์ ์๋ ๋ฉด์์ PreparedStatement
๊ฐ ๋น ๋ฅด๋ค๊ณ ์๋ ค์ ธ ์๋ค. ์ด์ ๋ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ ์ ์ ์ด๋ฏธ ์ฟผ๋ฆฌ๊ฐ ์ปดํ์ผ ๋์ด ์์ผ๋ฉฐ, ๋ฐ๋ณต ์ํ์ ๊ฒฝ์ฐ ํ๋ฆฌ ์ปดํ์ผ๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด ์ํ์ด ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์ด๋ค.
Statement
์๋ ๋ณดํต ๋ณ์๋ฅผ ์ค์ ํ๊ณ ๋ฐ์ธ๋ฉํ๋ static sql
์ด ์ฌ์ฉ๋๊ณ Prepared Statement
์์๋ ์ฟผ๋ฆฌ ์์ฒด์ ์กฐ๊ฑด์ด ๋ค์ด๊ฐ๋ dynamic sql
์ด ์ฌ์ฉ๋๋ค. PreparedStatement
๊ฐ ํ์ฑ ํ์์ ์ค์ฌ์ฃผ๋ ๊ฒ์ ๋ถ๋ช
ํ์ง๋ง dynamic sql
์ ์ฌ์ฉํ๋๋ฐ ๋ฐ๋ฅด๋ ํผํฌ๋จผ์ค ์ ํ๋ฅผ ๊ณ ๋ คํ์ง ์์ ์ ์๋ค.
ํ์ง๋ง ์ฑ๋ฅ์ ๊ณ ๋ คํ ๋ ์๊ฐ ๋ถ๋ถ์์ ๊ฐ์ฅ ํฐ ๋น์ค์ ์ฐจ์งํ๋ ๊ฒ์ ํ
์ด๋ธ์์ ๋ ์ฝ๋(row)๋ฅผ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ด๊ณ SQL ๋ฌธ์ ํ์ฑํ๋ ์๊ฐ์ ์ด ์๊ฐ์ 10 ๋ถ์ 1 ์ ๋ถ๊ณผํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ SQL Injection
๋ฑ์ ๋ฌธ์ ๋ฅผ ๋ณด์ํด์ฃผ๋ PreparedStatement
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ณ๋ค.
ํธ๋์ญ์
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํ๋ฅผ ๋ณํ์ํค๊ธฐ ์ํด ์ํํ๋ ์์ ๋จ์
์ํ๋ฅผ ๋ณํ์ํจ๋ค๋ ๊ฒ์ SQL ์ง์์ด๋ฅผ ํตํด DB์ ์ ๊ทผํ๋ ๊ฒ์ด๋ค.
SELECT INSERT DELETE UPDATE
์์ ๋จ์ -> ๋ง์ SQL ๋ช ๋ น๋ฌธ๋ค์ ์ฌ๋์ด ์ ํ๋ ๊ธฐ์ค์ ๋ฐ๋ผ ์ ํ๋ ๊ฒ
Ex) ๊ฒ์ํ์์ ์ฌ์ฉ์๊ฐ ๊ธ์ ์์ฑํ๊ณ ์ฌ๋ฆฌ๊ธฐ ๋ฒํผ์ ๋๋ฅธ ํ ๊ฒ์ํ์ ๋ค์ ๋์์ค๋ฉด ๊ฒ์ํ์ ๋ด๊ฐ ์ด ๊ธ์ด ์ ๋ฐ์ดํธ๋ ์ํ๋ฅผ ๋ณผ ์ ์๋ค.
์ด๋ DB ์์
์ฌ๋ฆฌ๊ธฐ ๋ฒํผ์ ๋๋ฅธ๋ค. : INSERT๋ฌธ์ ์ฌ์ฉํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฒ์๊ธ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊น.
๊ฒ์ํ ์๋ก ๊ตฌ์ฑ : SELECT๋ฌธ์ ์ฌ์ฉํด ์ต์ ์ ๋ณด๋ฅผ ์ ์ง.
ํ์ฌ ์์ ๋จ์ : INSERT๋ฌธ+SELECT๋ฌธ
์ด๋ฅผ ํตํ์ด ํ๋์ ํธ๋์ญ์ ์ด๋ผ๊ณ ํ๋ค.
์ฆ, ํ๋์ ํธ๋์ญ์ ์ค๊ณ๋ฅผ ์ ๋ง๋๋ ๊ฒ์ด ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ๋ง์ ์ด์ ์ ๊ฐ์ ธ๋ค์ค๋ค.
โจ ํธ๋์ญ์
ํน์ง
์์์ฑ(Atomicity)
ํธ๋์ญ์ ์ด DB์ ๋ชจ๋ ๋ฐ์๋๊ฑฐ๋ ํน์ ์ ํ ๋ฐ์๋์ง ์์์ผ ํ๋ค.
์ผ๊ด์ฑ(Consistency)
ํธ๋์ญ์ ์ ์์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ ํญ์ ์ผ๊ด์ฑ ์์ด์ผ ํ๋ค.
๋ ๋ฆฝ์ฑ(Isolation)
๋ ์ด์์ ํธ๋์ญ์ ์ด ๋์์ ๋ณํ ์คํ๋๊ณ ์์ ๋, ์ด๋ค ํธ๋์ญ์ ๋ ๋ค๋ฅธ ํธ๋์ญ์ ์ฐ์ฐ์ ๋ผ์ด๋ค ์ ์๋ค.
์ง์์ฑ(Durability)
ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋์์ผ๋ฉด, ๊ฒฐ๊ณผ๋ ์๊ตฌ์ ์ผ๋ก ๋ฐ์๋์ด์ผ ํ๋ค.
Commit
ํ๋์ ํธ๋์ญ์ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋ฌ๊ณ , DB๊ฐ ์ผ๊ด์ฑ์๋ ์ํ์ผ ๋ ์ด๋ฅผ ์๋ ค์ฃผ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ฐ์ฐ์ด๋ค.
Rollback
ํ๋์ ํธ๋์ญ์ ์ฒ๋ฆฌ๊ฐ ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ด ํธ๋์ญ์ ์ ์์์ฑ์ด ๊นจ์ง ๊ฒฝ์ฐ
ํธ๋์ญ์ ์ด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋์ง ์์์ ๋, last consistent state(ex. ํธ๋์ญ์ ์ ์์ ์ํ)๋ก roll backํ ์ ์๋ค.
Redis
๋น ๋ฅธ ์คํ ์์ค ์ธ ๋ฉ๋ชจ๋ฆฌ ํค ๊ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์คํ ์ด
๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ ๋์คํฌ๋ SSD์ ์ ์ฅํ๋ค. ํ์ง๋ง Redis๋ ๋ฉ๋ชจ๋ฆฌ(RAM)์ ์ ์ฅํด์ ๋์คํฌ ์ค์บ๋์ด ํ์์์ด ๋งค์ฐ ๋น ๋ฅธ ์ฅ์ ์ด ์กด์ฌํจ
์บ์ฑ๋ ๊ฐ๋ฅํด ์ค์๊ฐ ์ฑํ ์ ์ ํฉํ๋ฉฐ ์ธ์ ๊ณต์ ๋ฅผ ์ํด ์ธ์ ํด๋ฌ์คํฐ๋ง์๋ ํ์ฉ๋๋ค.`
RAM์ ํ๋ฐ์ฑ ์๋๊ฐ์? ๊ป๋คํค๋ฉด ๋ค ๋ ์๊ฐ๋๋ฐ..
์ด๋ฅผ ๋ง๊ธฐ์ํ ๋ฐฑ์ ๊ณผ์ ์ด ์กด์ฌํ๋ค.
snapshot : ํน์ ์ง์ ์ ์ค์ ํ๊ณ ๋์คํฌ์ ๋ฐฑ์
AOF(Append Only File) : ๋ช ๋ น(์ฟผ๋ฆฌ)๋ค์ ์ ์ฅํด๋๊ณ , ์๋ฒ๊ฐ ์ ง๋ค์ด๋๋ฉด ์ฌ์คํํด์ ๋ค์ ๋ง๋ค์ด ๋๋ ๊ฒ
๋ฐ์ดํฐ ๊ตฌ์กฐ๋ key/value ๊ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. (๋ฐ๋ผ์ Redis๋ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋น๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ ์์คํ ์ด๋ค)
โจ value 5๊ฐ์ง
String (text, binary data) - 512MB๊น์ง ์ ์ฅ์ด ๊ฐ๋ฅํจ
set (String ์งํฉ)
sorted set (set์ ์ ๋ ฌํด๋ ์ํ)
Hash
List (์๋ฐฉํฅ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๊ฐ๋ฅ)
Last updated