์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- tcp ํ๋กํ ์ฝ
- til
- ํฐ์คํ ๋ฆฌ์ฑ๋ฆฐ์ง
- reducible
- ๋ฐ์ดํฐ ์ ์ก
- ์ฝ๋ฉํ ์คํธ์ค๋น
- ์ฃผ๊ธฐ์ ํธ
- mariadb
- well known ํฌํธ
- i-type
- ํ๋ ์ ๊ตฌ์กฐ
- ๊ฐ๋ฐ์์ทจ์
- ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ค๋ธ์
- ์ค๋ ๋
- ์ฐ๋ถํฌdb
- ํ ํฐ ๋ฒ์ค
- ์ค๋ฅ์ ์ด
- ํญํด99
- xv6
- ๋น์ฃผ๊ธฐ์ ํธ
- leetcode
- tcp ์ธ๊ทธ๋จผํธ
- ํ๋ก์ด๋์์
- 99ํด๋ฝ
- git merge
- ์ค๋ฅ๊ฒ์ถ
- ์๋น์ค ํ๋ฆฌ๋ฏธํฐ๋ธ
- IEEE 802
- ์์๋ฒํธ
- Today
- Total
Unfazedโ๏ธ๐ฏ
JDBC์ ์ต์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ (SQL Mapper, ORM) ๋ณธ๋ฌธ
JDBC์ ์ต์ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ (SQL Mapper, ORM)
9taetae9 2025. 2. 20. 02:24JDBC๋ 1996๋ JDK 1.1์ ๊ณต์ ๋์ ๋ Java์ ํ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ API๋ก, ๊ฐ๋ฐ์๋ค์ด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ ์ ์๋ ํ์คํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ธฐ ์ํด ์ค๊ณ๋์๋ค. ๊ทธ๋ฌ๋ ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ฑ๊ณผ ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ๊ฐ ํ์ํด ๊ฐ๋ฐ ์์ฐ์ฑ์ด ๋ฎ๋ค๋ ํ๊ณ๊ฐ ์์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด SQL Mapper์ ORM ๊ธฐ์ ์ด ๋ฐ์ ํ๊ฒ ๋์๋ค.
๐ก ์ ๋๋ผ์ด๋ฒ๊ฐ ํ์ํ๊ฐ?
- ๋ฒค๋ ์ค๋ฆฝ์ฑ: ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ค JDBC ์ธํฐํ์ด์ค๋ง ์ฌ์ฉ → ์ค์ ๊ตฌํ์ ๊ฐ DB ๋ฒค๋์ ๋๋ผ์ด๋ฒ๊ฐ ๋ด๋น
- ํ๋ซํผ ํธํ์ฑ: OS/๋คํธ์ํฌ ์ฐจ์ด๋ฅผ ๋๋ผ์ด๋ฒ๊ฐ ์ถ์ํ
๐ ๋์ ํ๋ฆ
- ์ ํ๋ฆฌ์ผ์ด์ → DriverManager์ ์ฐ๊ฒฐ ์์ฒญ
- ๋ฑ๋ก๋ ๋๋ผ์ด๋ฒ๋ค ์ค JDBC URL ํจํด ์ผ์นํ๋ ๋๋ผ์ด๋ฒ ์ ํ
- ํด๋น ๋๋ผ์ด๋ฒ๊ฐ ๋ฌผ๋ฆฌ์ ์ฐ๊ฒฐ ์์ฑ ํ Connection ๊ฐ์ฒด ๋ฐํ
์ฝ๊ฒ ๋งํ์๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋๋ผ์ด๋ฒ๋ ํน์ DB์ ์๋ฐ ํ๋ก๊ทธ๋จ์ ์ฐ๊ฒฐํ๋ ๋ฒ์ญ๊ธฐ๋ก, JDBC ํ์ค์ ๊ตฌํํ์ฌ DB ์ข ๋ฅ์ ์๊ด์์ด ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
JDBC์ ํต์ฌ ์ญํ ๊ณผ ํ๊ณ
- ์์ : connection, sql ์ ๋ฌ, ๊ฒฐ๊ณผ๋ฅผ ์๋ต์ผ๋ก ๋ฐ๋ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์์ ํด๋น DB์ ๋ํ ์ฌ์ฉ๋ฒ์ ์ ๋ชฐ๋ผ๋ JDBC ํ์ค ์ธํฐํ์ด์ค ์ฌ์ฉ๋ฒ๋ง ์์งํ๋ค๋ฉด ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ๋์ผํ๊ฒ ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.
- ์ง์ ์ ์ธ DB ์ฐ๊ฒฐ: Connection, Statement, ResultSet ๊ฐ์ฒด๋ฅผ ํตํด SQL ์คํ
- ์๋ ๋ฆฌ์์ค ๊ด๋ฆฌ: ๋ช ์์ ์ธ ์ฐ๊ฒฐ ์ข ๋ฃ ํ์
- ๋ณต์กํ ์์ธ ์ฒ๋ฆฌ: SQLException ์ฒดํฌ ์์ธ ์ฒ๋ฆฌ ๊ฐ์
- ๋ฐ์ดํฐ ๋ณํ ์์ : ResultSet์ ๊ฐ์ฒด๋ก ๋งคํํ๋ ๋ฐ๋ณต ์ฝ๋ ์์ฑ ํ์
- ํ๊ณ: ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค SQL, ๋ฐ์ดํฐํ์ ๋ฑ์ ์ผ๋ถ ์ฌ์ฉ๋ฒ๋ค์ด ๋ค๋ฅด๊ณ , ANSI SQL์ด๋ผ๋ ํ์ค์ด ์์ง๋ง ์ผ๋ฐ์ ์ธ ๋ถ๋ถ๋ง ๊ณตํตํํ์๊ธฐ ๋๋ฌธ์ ํ๊ณ๊ฐ ์กด์ฌํ๋ค. ์๋ฅผ ๋ค์ด ํ์ด์ง SQL์ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ์ฌ์ฉ๋ฒ์ด ๋ค๋ฅด๋ค.
- ๊ฒฐ๊ตญ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ์ JDBC ์ฝ๋๋ ๋ณ๊ฒฝํ์ง ์์๋ ๋์ง๋ง SQL์ ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๋๋ก ์ง์ ๋ณ๊ฒฝํด์ผํ๋ค.
- JPA(Java Persistence API)๋ ์ด๋ฌํ ํ์คํ์ ํ๊ณ๋ฅผ ๊ทน๋ณตํ์ฌ ๊ฐ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๋ค๋ฅธ SQL์ ์ ์ํด์ผํ๋ ๋ฌธ์ ๋ ๋ง์ ๋ถ๋ถ ํด๊ฒฐํ ์ ์๊ฒ ํ์๋ค.
SQL Mapper: JDBC์ ์ค์ฉ์ ๊ฐ์
- MyBatis
๊ธฐ๋ณธ์ ์ผ๋ก JdbcTemplate์ด ์ ๊ณตํ๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณต
JdbcTemplate๊ณผ ๋น๊ต ์ MyBatis์ ํต์ฌ ์ฅ์
- SQL์ XML์ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์์
- ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋งค์ฐ ํธํ๊ฒ ์์ฑํ ์ ์์
- ์ฅ์
- SQL๊ณผ ๊ฐ์ฒด ๋งคํ ์ ์ธ๋ง์ผ๋ก CRUD ์๋ํ
- ๋์ SQL ์ง์์ ํตํ ์กฐ๊ฑด๋ถ ์ฟผ๋ฆฌ ์์ฑ ์ฉ์ด
- 90% ์ด์์ JDBC ๋ฐ๋ณต ์ฝ๋ ์ ๊ฑฐ
๊ธฐ์ | ํน์ง | ์ฌ์ฉ ์ฌ๋ก |
JdbcTemplate | ์คํ๋ง์ ์ ์์ค ์ถ์ํ ๊ณ์ธต | ๊ฐ๋จํ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ |
MyBatis | XML/์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ SQL ๊ด๋ฆฌ | ๋ณต์กํ ๋์ ์ฟผ๋ฆฌ ํ์ ์ |
native sql์ ์ฌ์ฉํด์ผ ๋ ๊ฒฝ์ฐ jdbcTemplate๊ณผ mybatis ์ค ๊ณ ๋ คํด๋ณผ ์ ์๋ค.
ORM: ๊ฐ์ฒด ์ค์ฌ์ ํจ๋ฌ๋ค์ ์ ํ
๊ธฐ์ ๊ตฌ์กฐ
[Java Object] ↔ [ORM ์์ง] ↔ [Database Table]
- ์ฃผ์ ๊ธฐ๋ฅ:
- ์๋ ์ฟผ๋ฆฌ ์์ฑ (HQL, JPQL)
- ์ง์ฐ ๋ก๋ฉ(Lazy Loading)๊ณผ ์บ์ฑ
- 1์ฐจ ์บ์๋ฅผ ํตํ ์์์ฑ ์ปจํ ์คํธ ๊ด๋ฆฌ
JPA ๊ตฌํ์ฒด ๋น๊ต
๊ตฌํ์ฒด | ํน์ง | ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฅ |
Hibernate | ํ๋ถํ ๊ธฐ๋ฅ์ , ์ปค๋ฎค๋ํฐ ํ์ฑํ | 2์ฐจ ์บ์, ๋ฐฐ์น ์ฒ๋ฆฌ |
EclipseLink | JPA ํ์ค ์๊ฒฉ ์ค์ | ์ฟผ๋ฆฌ ํํธ ์ต์ ํ |
์ฑ๋ฅ ๋น๊ต ๋ถ์
- ๋จ์ ์กฐํ: SQL Mapper > ORM (5-15% ๋น ๋ฆ)
- ๋ณต์กํ ์กฐ์ธ: ORM (N+1 ๋ฌธ์ ๋ฐ์ ๊ฐ๋ฅ)
- ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: SQL Mapper์ Native SQL์ด ์ ๋ฆฌ
๊ทผ๋ณธ ์๋ฆฌ ์ดํด์ ์ค์์ฑ
๋ชจ๋ ํ์ด๋ ๋ฒจ ๊ธฐ์ ์ ๋ด๋ถ์ ์ผ๋ก JDBC API๋ฅผ ์ฌ์ฉํ๋ค. ์ปค๋ฅ์ ํ๋ง ๋ฉ์ปค๋์ฆ ์ดํด, ๋ฐฐ์น ์ฒ๋ฆฌ ์ต์ ํ, ํธ๋์ญ์ ๊ฒฉ๋ฆฌ ์์ค ์ค์ ๋ฑ์ ๊น์ ์ดํด๋ JDBC ๋์ ์๋ฆฌ๋ฅผ ์์์ผ ๊ฐ๋ฅํ๋ค. ์๋ฅผ ๋ค์ด ORM์ ์ง์ฐ ๋ก๋ฉ์ JDBC์ ResultSet ์ปค์ ๋ฐฉ์์ ํ์ฉํ ๊ตฌํ์ด๋ค.
ํนํ ๋ค์ JDBC ํต์ฌ ์์์ ๋ํ ์ดํด๊ฐ ํ์ํ๋ค.
- DriverManager์ ์ฐ๊ฒฐ ์์ฑ ๊ณผ์
- PreparedStatement vs Statement ์ฑ๋ฅ ์ฐจ์ด
- ํธ๋์ญ์ ๊ฒฝ๊ณ ์ค์ (commit(), rollback())
- ๋ฉํ๋ฐ์ดํฐ(DatabaseMetaData) ํ์ฉ ๊ธฐ๋ฒ
ex) ORM์์ ๋ฐ์ํ๋ LazyInitializationException์ด๋ SQL Mapper์ ์ปค๋ฅ์ ๋์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ JDBC ์์ค์ ์ดํด๊ฐ ์๊ตฌ๋๋ค.
๊ฒฐ๋ก
JDBC๋ ํ๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ํ ๋ ์ญํ ์ ํ๋ฉฐ, SQL Mapper์ ORM์ ๊ฐ๊ฐ ๋ค๋ฅธ ์ถ์ํ ์์ค์์ ๊ฐ๋ฐ์์ ์์ฐ์ฑ์ ํฅ์์ํจ๋ค. ํ๋ก์ ํธ์ ๋ณต์ก์ฑ, ํ์ ์๋ จ๋, ์ฑ๋ฅ ์๊ตฌ์ฌํญ์ ์ข ํฉ์ ์ผ๋ก ํ๊ฐํด ๊ธฐ์ ์คํ์ ์ ํํด์ผ ํ๋ค. ํนํ ๋๊ท๋ชจ ์์คํ ์์๋ ๋ ๊ธฐ์ ์ ํผ์ฉํด ORM์ผ๋ก ๊ธฐ๋ณธ CRUD๋ฅผ ์ฒ๋ฆฌํ๊ณ , ๋ณต์กํ ํต๊ณ ์ฟผ๋ฆฌ๋ SQL Mapper๋ก ๊ตฌํํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ์ด ํจ๊ณผ์ ์ด๋ค.
์ฐธ๊ณ ์๋ฃ :
์คํ๋ง DB1ํธ - ๋ฐ์ดํฐ ์ ๊ทผ ํต์ฌ ์๋ฆฌ (๊น์ํ ๊ฐ์ฌ)