JDBC(Java Database Connectivity)
์๋ฐ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ํ ์ ์๋๋ก ํ๋ ์๋ฐ API๋ก, Java๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐ ๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํ ํ์ค ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ค.
java.sql.Connection
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฐ๊ฒฐ(์ธ์ )์ ๋ํ๋ด๋ ์ธํฐํ์ด์ค
java.sql.Statement
SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๋ ์ญํ ์ ํ๋ ์ธํฐํ์ด์ค
java.sql.PreparedStatement
๋ฏธ๋ฆฌ ์ปดํ์ผ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ์ธํฐํ์ด์ค๋ก, Statement๋ฅผ ์์
java.sql.ResultSet
SQL ์ฟผ๋ฆฌ์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ์ธํฐํ์ด์ค
JDBC ๋๋ผ์ด๋ฒ
ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฒค๋์์ ์ ๊ณตํ๋ JDBC ํ์ค ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด
JDBC Flow
1. Get Connection
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ DriverManager ํด๋์ค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ
java.sql.Connection ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๋ DriverManager.getConnection() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Connection ๊ฐ์ฒด ์์ฑ
2. Create Statement
Connection ๊ฐ์ฒด๋ก๋ถํฐ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ธฐ ์ํ Statement ๊ฐ์ฒด๋ฅผ ์์ฑ
java.sql.Statement ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๋ Connection.createStatement() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Statement ๊ฐ์ฒด ์์ฑ
3. Configure Statement
์์ฑ๋ Statement ๊ฐ์ฒด์ ์คํํ๋ ค๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์ค์ (๋ณดํต PreparedStatement ์ฌ์ฉ)
java.sql.PreparedStatement ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ PreparedStatement ๊ฐ์ฒด ์์ฑ ๋ฐ ๋งค๊ฐ๋ณ์ ์ค์
4. Execute Statement
๊ตฌ์ฑ๋ SQL ์ฟผ๋ฆฌ๋ฅผ ์คํ
- executeQuery(): SELECT ๋ฌธ์ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ResultSet ๊ฐ์ฒด๋ก ๋ฐํ
- executeUpdate(): INSERT, UPDATE, DELETE ๋ฑ์ ๋ฐ์ดํฐ ์กฐ์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ์ํฅ์ ๋ฐ์ ํ์ ์๋ฅผ ๋ฐํ
5. Handle Warning
SQL ์ฟผ๋ฆฌ ์คํ ์ค์ ๋ฐ์ํ ๊ฒฝ๊ณ ๋ ์์ธ ์ฒ๋ฆฌ
- try-catch ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ
6. Return Result
์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ ๋ฐํ
- ResultSet ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ ๋ฐ ์ฒ๋ฆฌ
7. Close Statement
์์
์ด ์๋ฃ๋๋ฉด ์ฌ์ฉํ Statement ๊ฐ์ฒด๋ฅผ Statement.close() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
์์ ์ผ๋ก ๋ซ์ ์์ ํด์
java.sql.Statement ์ธํฐํ์ด์ค์ close() ๋ฉ์๋
8. Close Connection
๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์๋ฃ ํ Connection ๊ฐ์ฒด๋ฅผ Connection.close() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ช
์์ ์ผ๋ก ๋ซ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ์์์ ํด์ ํ ์ฐ๊ฒฐ์ ์ข
๋ฃ
java.sql.Connection ์ธํฐํ์ด์ค์ close() ๋ฉ์๋
๊ต์ฅํ ๋ง์ ๊ณผ์ ์ ํ์๋ก ํ์ง๋ง JdbcTemplate๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๊ณผ์ ์ ๋์ ์ฒ๋ฆฌํด์ฃผ์ด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
Statement / PreparedStatement
JDBC๋ SQL์ ์คํํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ก Statement์ PreparedStatement๋ฅผ ์ ๊ณตํ๋ค.
Statement: SQL ์ฟผ๋ฆฌ๋ฅผ ์คํ ์์ ์ ์์ฑํ๊ณ ์คํํ๋ ๋ฐฉ์
PreparedStatement: SQL ์ฟผ๋ฆฌ์ ํ ํ๋ฆฟ์ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ , ์คํ ์์ ์ ํ๋ผ๋ฏธํฐ๋ง ์ ๋ฌํ์ฌ ์คํํ๋ ๋ฐฉ์
์ฑ๋ฅ: ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ ๋ฌ๋ฐ์ SQL ํ ํ๋ฆฟ์ ๋ฏธ๋ฆฌ ํ์ฑํ๊ณ ์ปดํ์ผํ์ฌ ์คํ ๊ณํ์ ์บ์ฑ
์ดํ ๋์ผํ ์ฟผ๋ฆฌ๊ฐ ํ๋ผ๋ฏธํฐ๋ง ๋ฐ๋์ด ์์ฒญ๋๋ฉด ์บ์๋ ์คํ ๊ณํ์ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ด์ ์ ๊ฐ์ง
๋ณด์: ํ๋ผ๋ฏธํฐ ๋ฐ์ธ๋ฉ ๋ฉ์ปค๋์ฆ์ ํตํด SQL Injection ๊ณต๊ฒฉ์ ์์ฒ์ ์ผ๋ก ๋ฐฉ์ง
๊ฐ๋ ์ฑ ๋ฐ ์ ์ง๋ณด์: SQL ์ฟผ๋ฆฌ์ ํ๋ผ๋ฏธํฐ๊ฐ ๋ถ๋ฆฌ๋์ด ์ฝ๋๊ฐ ๋ ๊น๋ํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฉ์ด
JDBC ์ฌ์ฉ์ ๋ฌธ์ ์
JDBC API๋ฅผ ์ง์ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์์ง๋ง, ์ค์ฉ์ ์ธ ๊ด์ ์์ ๋ช ๊ฐ์ง ๋ฌธ์ ์ ์ ๊ฐ์ง๋ค.
๋ฐ๋ณต์ ์ธ ์ฝ๋: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ,
Statement์์ฑ,ResultSet์ฒ๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ์ฐ๊ฒฐ ๋ฐ ๋ฆฌ์์ค ์ข ๋ฃ ๋ฑ์ ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ฑ ํ์๋ฆฌ์์ค ๊ด๋ฆฌ์ ๋ฒ๊ฑฐ๋ก์:
Connection,Statement,ResultSet๋ฑ์ ๋ฆฌ์์ค์ ๋ช ์์ ๊ด๋ฆฌ ํ์์์ธ ์ฒ๋ฆฌ: JDBC๋ ๋๋ถ๋ถ์ ์์ธ๋ฅผ
SQLException์ด๋ผ๋ checked exception์ผ๋ก ๋์ง๋ฉฐ, ๋ฒค๋๋ณ๋ก ๋ค๋ฅธ ์๋ฌ ์ฝ๋๋ฅผ ๊ฐ์ง๋ฏ๋ก ์ผ๊ด๋ ์์ธ ์ฒ๋ฆฌ๊ฐ ์ด๋ ค์
JDBC์ ์ฌ์ฉ
์ต๊ทผ์๋ ์ง์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋ SQL Mapper๋ ORM์ ๊ฒฐํฉํ์ฌ ์ฌ์ฉํ๊ณ ์๋ค.

SQL Mapper์ ORM ๋น๊ต
SQL Mapper
- SQL ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด๋ก ํธ๋ฆฌํ๊ฒ ๋ณํ - JDBC์ ๋ฐ๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ
- ๊ฐ๋ฐ์๊ฐ SQL์ ์ง์ ์์ฑ
์คํ๋ง JdbcTemplate, MyBatis
ORM
- ๊ฐ์ฒด์ RDB์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น ํด๊ฒฐ - ์์ฐ์ฑ - ์ ์ง๋ณด์
- ํ์ต๋น์ฉ - ์๋ชป ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ์ด์
JPA(์๋ฐ ์ง์ ORM ํ์ค ์ธํฐํ์ด์ค), ํ์ด๋ฒ๋ค์ดํธ, ์ดํด๋ฆฝ์ค๋งํฌ
์ฐธ๊ณ ์๋ฃ
Last updated