๋ชฉ์ฐจ
1. 23.11.17(๊ธ)
โ โ โ JDBC(Java DataBase Connectivity) ๊ฐ๋ โ โ โ
1. JDBC(Java DataBase Connectivity)๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ด DBMS์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก API ๋ฅผ ์ ๊ณตํ๋ ์๋ฐ ํด๋์ค๋ค์ ๋ชจ์์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
1) JDBC ๋ ํจ์ ํธ์ถ์ฉ SQL ์ธํฐํ์ด์ค
2) JDBC ๋ ANSI SQL-92 ํ์ค์ ์ง์
3) JDBC ๋ ๊ณตํต๊ดธ SQL ์ธํฐํ์ด์ค๋ฅผ ๋ฐํ
4) JDBC ๋ ์ตํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๋ค.
==>> JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฐ ์์
์ ํ๊ธฐ ์ํ
JAVA ์ ํ์ค ์ธํฐํ์ด์ค์ด๋ค.
2. JDBC ๊ตฌ์ฑ
1) ์์ฉ ํ๋ก๊ทธ๋จ
a. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ์ ์์ฒญ
b. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL ๋ฌธ์ ์ ์ก
c. SQL ๋ฌธ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ ์์ฒญ
d. ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์ค๋ฅ ์ฒ๋ฆฌ
e. ํธ๋์ญ์
์ ์ ์ด
f. ์ฐ๊ฒฐ ์ข
๋ฃ
2) ๋๋ผ์ด๋ฒ ๋งค๋์
a. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋ ๋๋ผ์ด๋ฒ ๊ฒ์
b. JDBC ์ด๊ธฐํ๋ฅผ ์ํ ์์
์ํ
3) ๋๋ผ์ด๋ฒ
a. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ
b. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQl ๋ฌธ์ ์ ๋ฌ
c. ์์ฉ ํ๋ก๊ทธ๋จ์ ๊ฒ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ
d. ํ์ํ ๊ฒฝ์ฐ ์ปค์๋ฅผ ์กฐ์
e. ํ์ํ ๊ฒฝ์ฐ ํธ๋์ญ์
์ ์์
4) DBMS
a. ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์๋ ์ฅ์
3. System Architecture
JDBC API ๋ 2-tier ์ 3-tier ๋ฅผ ๋ชจ๋ ์ง์ํ๋ค.
โป tier
์ผ๋ จ์ ์ ์ฌํ ๊ฐ์ฒด๊ฐ ๋์ด๋ ์ํ์์ ๊ณ์ธต ๋๋ ์ด์ ๋ํ๋ธ๋ค.
ํ๋ก๊ทธ๋จ์ ์ผ๋ถ๊ฐ ์ฌ๋ฌ ๊ฐ์ฒด์ ๋๋์ด ์กด์ฌํ ์ ์์ผ๋ฉฐ
๊ทธ ๊ณ์ธต ๋ํ ๋คํธ์ํฌ ์์ ๋ค๋ฅธ ์ปดํจํฐ์ ์์นํ ์ ์๋ค.
1) 2-tier
a. ์๋ฐ ์ ํ๋ฆฟ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ด JDBC ๋ฅผ ์ด์ฉํ์ฌ DBMS์ ์ง์ ์ ๊ทผ
b. ๊ฐ์ฅ ๋ํ์ ์ธ C/S ๊ตฌ์กฐ (Client and Server)
c. ํ๋ก๊ทธ๋จ์ด ๊ฐ๋จํ๋ค๋ ์ฅ์
d. ๋ณด์, ๋ก๋๋ฐธ๋ฐ์ฑ, ํ์ฅ์ฑ(์ค๋ธ์ญํธ ์ฌ์ฌ์ฉ) ๋ฑ์ ๋ฌธ์ ์
e. 2-tier ๋์์ธ์ด ์ ํฉํ ๊ฒฝ์ฐ
- ์ ํ๋ฆฌ์ผ์ด์
์ด ํ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง์ ์ฌ์ฉ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ด ํ๋์ CPU ์์ ๋์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ณ์ ๊ฑฐ์ ๊ฐ์ ํฌ๊ธฐ๋ก ์ ์ง
- ์ฌ์ฉ์ ๊ธฐ๋ฐ์ด ๊ฐ์ ํฌ๊ธฐ๋ก ์ ์ง
- ์๊ตฌ๊ฐ ํ์ ๋์ด ๋ณํ ๊ฐ๋ฅ์ฑ์ด ๊ทนํ ์ ๊ฑฐ๋ ์๋ ๊ฒฝ์ฐ
- ์ ํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฃํ ํ์๋ ์ต์ํ์ ์ง์์ฑ์ ์๊ตฌํ๋ ๊ฒฝ์ฐ
/*ํ๋ก ๋งค์ฅ์์ ๊ณ์ฐ๊ณผ ์์์ ๊ฐ์ดํ๋ ํํ*/
2) 3-tier
a. ์๋ฐ ์ ํ๋ฆฟ์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์ด DBMS์ ์ง์ ์ ๊ทผํ๋ ๊ฒ์ด ์๋๋ผ
์ค๊ฐ์ ๋ฏธ๋ค์จ์ด(๋ฏธ๋คํฐ์ด)๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ
b. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ ๋ถ๋ถ์ ๋ถ๋ฆฌ์ํด์ผ๋ก์จ
Presentation Layer ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ ๋ฐฉ๋ฒ์ ์ ๊ฒฝ์ ์ฐ์ง ์์๋ ๋๋ค.
c. ํด๋ผ์ด์ธํธ๋ ๋จ์ง ๋ฏธ๋คํฐ์ด๋ฅผ ๊ฐ์กฐ
d. ๋ฏธ๋คํฐ์ด ์๋ฒ๋ DBMS ์ ๊ฐ์ด ํน์ ํ ์์
๋ง์ ์ํํ๋ ์ต์ข
์๋ฒ์
ํต์ ์ ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ํ ์ด ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
- tier 1: ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํ๋ ํด๋ผ์ด์ธํธ
- tier 2: http, ์ฝ๋ฐ ๋ฑ์ ์ง์ํ๋ ์์ฉ ์ฒ๋ฆฌ ์๋ฒ
- tier 3: DBMS์ ๊ฐ์ด ์ฌ์ฉ์๊ฐ ์ต์ข
์ ์ผ๋ก ์ํ๋ ๊ธฐ๋ฅ์ ์ํํ ์๋ฒ
/*์์, ๊ณ์ฐ, ์๋น์ ๋๋์ด ๊ฐ๊ฐ ๋ถ์ฌํ ํํ*/
/* tier๋ ์ด๋ป๊ฒ ์ข๋ค๊ธฐ ๋ณด๋ค๋ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฆ*/
4. JDBC Driver ์ ํ
1) Type 1
/*์ฒซ๋ฒ์งธ ๊ณ์ธต์ด๋ผ ์ดํดํ๋ฉด X*/
- JDBC-ODBC Driver
- ํน์ง
๊ฐ. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋ํ๊ธฐ ์ํด ๋ธ๋ฆฟ์ง ๊ธฐ์ ์ ์ฌ์ฉ
๋. ODBC API๋ก์ ๊ฒ์ดํธ์จ์ด๋ฅผ ์ ๊ณตํ์ฌ
์ค์ ๋ก๋ ODBC ์ API๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋
๋ค. ๋ธ๋ฆฟ์ง ์๋ฃจ์
์ ๋ณดํต ํด๋ผ์ด์ธํธ์ ์ํํธ์จ์ด๊ฐ ์ค์น๋ ๊ฒ์ ์๊ตฌ
๋ผ. JDBC-ODBC Driver ๋ ODBC ๋๋ผ์ด๋ฒ๊ฐ ํ๋ถํ๊ธฐ ๋๋ฌธ์
๊ฑฐ์ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ
์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ,
JDBC-ODBC Driver ๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ์
์ฌ์ ์ ODBC Driver ๊ฐ ์ค์น๋์ด ์๋ ๊ฒฝ์ฐ ๋งค์ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
๋ง. ์๋์ ๊ด๋ จํ ๊ฐ์ฅ ํฐ ๋ฌธ์
JDBC ๋ฅผ ํตํด ํธ์ถ๋ ๋ช
๋ น์ด ๋ค์ ODBC ๋ฅผ ํตํด ๋๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์
๋ ๊ฐ์ ๋ธ๋ฆฟ์ง๋ฅผ ๊ฑฐ์น๋ฉฐ, ์ด๋ก ์ธํด ๋น ๋ฅธ ์๋๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ด๋ ต๋ค.
๋น ๋ฅธ ์ฑ๋ฅ์ ์๊ตฌํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ์๋
Type 1. JDBC-ODBC ๋ธ๋ฆฟ์ง๋ ์ ๋นํ์ง ์๋ค.
๋ฐ. JDBC-ODBC ๋ธ๋ฆฟ์ง๋ฅผ ์ฌ์ฉํ๋ ์์คํ
์๋
๋ฐ๋์ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์๋ ODBC Driver ๊ฐ ์ค์น๋์ด์ผ ํ๋ฉฐ,
์ด ๋จ์ ์ ์ ํ๋ฆฟ์์ JDBC ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ํด์ผ ํ ๊ฒฝ์ฐ
๋ง์ ๋ฌธ์ ๊ฐ ๋๋ค.
์ ํ๋ฆฟ์ ์ฌ์ฉํ์ฌ JDBC-ODBC ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ,
์ ํ๋ฆฟ์ ๋ค์ด ๋ฐ์ ํด๋ผ์ด์ธํธ์ ๋ฏธ๋ฆฌ ํด๋น ODBC Driver ๊ฐ ์ค์น๋์ด
์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ ๋ฑ์ ๋ง์ ๋ฌด์ ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
2) Type 2
- Native-API / Partly Java Driver(์ฌ์ฉ ์ผ๋ถ ์๋ฐ)
- ํน์ง
๊ฐ. ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์กฐ์
์ฒด๋ค์ด ์ ๊ณตํ C ํน์ C++ ๋ฉ์๋๋ฅผ
์๋ฐ ์ฝ๋๊ฐ ํธ์ถํ๋ ๋ฐฉ์
๋. ๋ถ๋ถ์ ์ผ๋ก ์๋ฐ ๋๋ผ์ด๋ฒ์ธ ์์ API ๋ผ๊ณ ์ผ์ปฌ์ด์ง
๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ๋๋ ๋ถ๋ถ์ด Native Code ๋ก ๊ตฌํ๋์ด ์๋ ๋งํผ
JDBC-ODBC ๋ธ๋ฆฟ์ง์ ๋นํด ๋น ๋ฅธ ์๋๋ฅผ ์ ๊ณตํ๋ค.
๋ผ. JDBC Driver ๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ ๊ฐ๊ฐ์ ํด๋ผ์ด์ธํธ์
DBMS Vender ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ก๋๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์
์ธํฐ๋ท์ด๋ CS ํ๊ฒฝ์์๋ ์ฌ์ฉํ๊ธฐ ์ ํฉํ์ง ์๋ค.
๋ํ Type 3, 4 ๋๋ผ์ด๋ฒ์ ๋นํด ๋ฎ์ ์ฑ๋ฅ
3) Type 3
- Net-Protocal / All-Java Driver(์์ ์๋ฐ)
- ํด๋ผ์ด์ธํธ์์ ์ผ๋ฐ์ ์ธ Network API ๋ฅผ ์ด์ฉํด ๋ณด๋ธ ์ ๋ณด๋ฅผ
์๋ฒ๊ฐ Database ์ ๋
์ ์ ํํ๋ก ๋ณํํ๋ ๋ฐฉ์
- ํน์ง
๊ฐ. ํด๋ผ์ด์ธํธ์ ์กด์ฌํ๋ JDBC Driver ๋ ์๊ฒ์ ์ฌ์ฉํ์ฌ
์๋ฒ์ ์กด์ฌํ๋ ๋ฏธ๋ค์จ์ด(Middleware) ์ ํ๋ฆฌ์ผ์ด์
์ ์ฐ๊ฒฐ
๋. ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฌ์ฉํ๊ณ ์ ํ๋
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋
์ ์ ์ API๋ก ์ ํ
๋ค. ํ๋์ ๋๋ผ์ด๋ฒ๋ก ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๋
๋ผ. ํด๋ผ์ด์ธํธ์ ์ํํธ์จ์ด๋ฅผ ์ค์นํ ํ์๊ฐ ์์
4) Type 4
- Native-Protocal / All-Java Driver(์์ ์๋ฐ)
- Database Engine ์ ์ฌ์ฉ๋๋ Network Protocol ์
Java Socket ์ผ๋ก ์ง์ Database ์ ๊ต์ ํ๋ ๋ฐฉ์
- ํน์ง
๊ฐ. ๊ฐ์ฅ ์ง์ ์ ์ธ ์์ ์๋ฐ ์๋ฃจ์
๋. ๊ฑฐ์ ๋๋ถ๋ถ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์กฐ์
์ฒด๊ฐ ์ ๊ณตํ๋ค.
๋ค. DOBC ๋ NativeLib ํํ๋ก request ๋ฅผ ๋ณํํ์ง ์๊ธฐ ๋๋ฌธ์
Performance ๊ฐ ๋งค์ฐ ์ข๋ค.
๋ํ, ํน๋ณํ๊ฒ Driver ๋ Lib, Middleware ๋ฑ์
์ค์นํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋ฐฐํฌ ๋ฑ์ด ๋งค์ฐ ์ฉ์ดํ๋ค.
5. Oracle JDBC Driver
1) Type 4
/*์ฐ๋ฆฌ๊ฐ์ฐ๊ฒ๋ ๋๋ผ์ด๋ฒ*/
์ค๋ผํด <Thin Driver> ๋ผ๊ณ ๋ถ๋ฆฌ์ด๋ค.
์๋ฐ๋ก ์์ฑ๋ Net8 ์ TCP/IP ๋ฒ์ ์ ์์ฒด์ ์ธ ์คํ์ ํฌํจํ๋ฉฐ
ํ๋ซํผ์ ๋
๋ฆฝ์ ์ด๊ณ ์คํ ์๊ฐ์ ๋ธ๋ผ์ด์ ๋ก ๋ค์ด๋ก๋ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฒ ์ธก์ TCP/IP Lisener ๊ฐ ํ์ํ๋ฉฐ,
์ฐ๊ฒฐ ์คํธ๋ง์ TNSNAMES ์ํธ๋ฆฌ๊ฐ ์๋ TCP/IP ์ฃผ์์ ํฌํธ๋ฒํธ์ด๋ค.
URL Format -> jdbc:oracle:thin:@[host]:[port]:[database]
6. JDBC API
JDBC API ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ก์ธ์คํ ์ ์๋๋ก ์ ๊ณต๋๋
ํ์ค ์๋ฐ API ํด๋์ค์ ์ธํฐํ์ด์ค๋ก ๊ตฌ์ฑ๋๋ฉฐ
๋ค์์ ๊ธฐ๋ฅ์ ์คํํ๊ธฐ ์ํ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
- Java ํ๋ก๊ทธ๋จ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์ ์ ์
- SQl๋ฌธ์ ๊ตฌ์ฑ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ์์ ์คํ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฒ๊ฐ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ ๊ฐ์ ธ์ค๊ธฐ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ณด, ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํ ์ ๋ณด ๋ฑ์ ๊ฐ์ ธ์ค๊ธฐ
โป ใjava.sql.*ใ ํจํค์ง
- JAVA Application ์ผ๋ก ๋ถํฐ Database ๋ฅผ ์กฐ์ํ๋ API ๋
JDK ์ ์ฝ์ด(core) API๋ก java.sql ํจํค์ง์ ์ค์ ๋์ด ์๋ค.
- JDBC ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ๊ธฐ ์ํด
ํ๊ฐ์ ํด๋์ค(java.sql.DriverManager)์
๋ ๊ฐ์ ์ธํฐํ์ด์ค(java.sql.Driver ์ java.sql.Connection)๋ฅผ ์ฌ์ฉํ๋ค.
** ์ค๋ช **
-์๋ฐ: ๋ณด์จ๋ณ
-์ค๋ผํด: ๋ณด์จ๋ณ ์ผ์ด์ค
-jdbc๋ ๋๊ฐ๋ฅผ ์ฐ๊ฒฐํ๋ ์ผ์ด๋ธ
- ์ผ์ด๋ธ๋ ํ์ชฝ์ C ํ์
, ๋ฐ๋ํธ์ usb ๋ฑ...
์ด๋ฐ๊ฑธ๋ก jdbc ์ ํ์ด ๋๋จ
๋ฒค๋๊ฐ ์ ๊ณตํ๋ ๊ฒ, ํด๋ผ์ด์ธํธ๊ฐ ์ ๊ณตํ๋๊ฒ
- ์ฌํ์ ์ธ์ง๋๊ฐ ๋ฎ์ ํ์ฌ: ์ฐ๋ฆฌ ํ์ฌ์ ๋๋ฐ์ด์ค์ ์ผ์ฑ ๋๋ฐ์ด์ค๋ฅผ ์ฐ๊ฒฐํจ
- ์ฌํ์ ์ธ์ง๋๊ฐ ๋์ ํ์ฌ: ์ฐ๊ฒฐํ์ ๋ ์ผ์ฑ ๋๋ฐ์ด์ค๊ฐ ์ข์์ง๋
๋ก ๋๋๋ค๊ณ ์๊ฐํ๊ธฐ
๊ณผ๊ฑฐ: ์ค๋ผํดํ๊ณ ์ฐ๊ฒฐํ๊ธฐ ์ํ jdbc๋ฅผ ์์ ์๋ ์ง์ ๋ง๋ค์์
ํ์ฌ: (์ผ๋ถ ๋ง๋ค์ด์ ์ธ ์ ๋ ์์ง๋ง)
์ค๋ฌด์์ type1,2,3 ์์ฐ์