Between JPA and JDBC
What Is JDBC
JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ๋ Java ์ ํ๋ฆฌ์ผ์ด์ ์ฉ ํ๋ก๊ทธ๋๋ฐ ์์ค ์ธํฐํ์ด์ค์ ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด API๋ฅผ ์ฌ์ฉํ์ฌ JDBC ๊ด๋ฆฌ์์ ํต์ ํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํต์ ํ๋ ๋ฐ ์ฌ์ฉํ๋ ๊ณตํต API์ ๋๋ค. API ์ธ์๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ํ ๋ฒค๋ ์ ๊ณต JDBC ํธํ ๋๋ผ์ด๋ฒ๊ฐ ์์ต๋๋ค.
What Is JPA
JPA๋ Java ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ ์ฝ๋์ ๋ฐ์ธ๋ฉํ ์ ์๋ Java ํ์ค์ ๋๋ค. ORM(Object Relationship Mapping)์ ๋ํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์ ์ค ํ๋๋ก ๊ฐ๋ฐ์๊ฐ Java ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์, ์ ์ฅ, ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ํ ์ ์์ต๋๋ค. JPA ์ฌ์์ ๋ํด ์ฌ๋ฌ ๊ตฌํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
JPA vs JDBC
๋ฐฑ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ๊ณผ ํต์ ํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ ๋ ์ํํธ์จ์ด ์ค๊ณ์๋ ์๋นํ ๊ธฐ์ ์ ๊ณผ์ ์ ์ง๋ฉดํฉ๋๋ค. JPA์ JDBC ๊ฐ์ ๋ ผ์์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ์ ์ด ์๊ตฌ ๋ฐ์ดํฐ ์์ ์ ๋งค์ฐ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ข ์ข ๊ฒฐ์ ์ ์ธ ์์์ ๋๋ค.
Database Interactions
JDBC๋ฅผ ์ฌ์ฉํ๋ฉด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ SQL ๋ช ๋ น์ ์์ฑํ ์ ์์ต๋๋ค.
JPA๋ JDBC์ ๋ฌ๋ฆฌ ๊ฐ๋ฐ์๊ฐ ๊ฐ์ฒด ์งํฅ semantics์ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ธฐ๋ฐ Java ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ ์ ์๋๋ก ํฉ๋๋ค. JPA annotations์ ์ฃผ์ด์ง Java ํด๋์ค ๋ฐ ํด๋น ๋ณ์๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํด๋น ํ ์ด๋ธ ๋ฐ ํด๋น ์ด์ ๋งคํ๋๋ ๋ฐฉ์์ ์ค๋ช ํฉ๋๋ค.
Managing Associations
JDBC์ ์ฐ๊ฒฐํ ๋ ์ฟผ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ์ ์ฒด SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
JPA์์๋ ๋จ์ํ annotations์ ์ฌ์ฉํ์ฌ ์ผ๋์ผ, ์ผ๋๋ค, ๋ค๋์ผ ๋ฐ ๋ค๋๋ค ์ฐ๊ฒฐ์ ๋ง๋ญ๋๋ค.
Database Dependency
JDBC๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์กด์ ์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ง๋ค ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
๋ฐ๋ฉด์ JPA๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ตฌ์ ๋ฐ์ง ์์ต๋๋ค. ์ฆ, ๊ฑฐ์ ์์ ํ์ง ์๊ณ (๋๋ ์์ ํ์ง ์๊ณ ) ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋์ผํ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Exception Handling
JDBC๋ SQLException๊ณผ ๊ฐ์ ํ์ธ๋ ์์ธ๋ฅผ ๋ฐ์์ํค๊ธฐ ๋๋ฌธ์ try-catch ๋ธ๋ก์ ์์ฑํด์ผ ํฉ๋๋ค.
๋ฐ๋ฉด์ Hibernate์ ๊ฐ์ JPA ํ๋ ์์ํฌ๋ unchecked exceptions๋ง ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์์น์์ ์ด๋ฅผ ํฌ์ฐฉํ๊ฑฐ๋ ์ ์ธํ ํ์๊ฐ ์์ต๋๋ค.
Performance
JPA์ JDBC์ ์ฐจ์ด์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก JPA ํ๋ ์์ํฌ ๋๋ ๋ก์ปฌ ๊ฐ๋ฐ์๊ฐ ์ฝ๋ฉ์ ์ํํ๋ ์ฐจ์ด์ ๋๋ค. ์ด๋ ์ชฝ์ด๋ ๊ฐ์ฒด ๊ด๊ณ ์ํผ๋์ค ๋ถ์ผ์น๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๊ณต์ ํ๊ฒ ๋งํ๋ฉด SQL ์ฟผ๋ฆฌ๋ฅผ ์๋ชป ์์ฑํ๋ฉด JDBC ์ฑ๋ฅ์ด ์์ฒญ๋๊ฒ ๋๋ ค์ง ์ ์์ต๋๋ค. ๋ ๊ธฐ์ ์ค ํ๋๋ฅผ ์ ํํ ๋ ์ฑ๋ฅ์ด ๋ ผ์์ ๋์์ด ๋์ด์๋ ์ ๋ฉ๋๋ค. ์ ๋ฌธ ๊ฐ๋ฐ์๋ ์ฌ์ฉํ๋ ๊ธฐ์ ์ ๊ด๊ณ์์ด ๋์ผํ๊ฒ ์ ์คํ๋๋ Java ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค.
JDBC Dependency
JPA ๊ธฐ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ ํ JDBC๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ JPA๋ฅผ ํ์ฉํ ๋ ์ฝ๋๋ ์ค์ ๋ก ๋ชจ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ํธ ์์ฉ์ ๋ํด JDBC API๋ฅผ ์ฌ์ฉํฉ๋๋ค. JPA๋ ๊ฐ๋ฐ์๋ก๋ถํฐ ์ ์์ค JDBC ํธ์ถ์ ์จ๊ธฐ๋ ์ถ์ํ ๊ณ์ธต ์ญํ ์ ํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ๋ก๊ทธ๋๋ฐ์ ํจ์ฌ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
Transaction Management
JDBC์์ ํธ๋์ญ์ ๊ด๋ฆฌ๋ ์ปค๋ฐ ๋ฐ ๋กค๋ฐฑ์ ์ฌ์ฉํ์ฌ ๋ช ์์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
๋ฐ๋ฉด ํธ๋์ญ์ ๊ด๋ฆฌ๋ JPA์์ ์์์ ์ผ๋ก ์ ๊ณต๋ฉ๋๋ค.
Pros and Cons
JPA์ ๋นํด JDBC์ ๊ฐ์ฅ ํ์คํ ์ด์ ์ ์ดํดํ๊ธฐ๊ฐ ๋ ์ฝ๋ค๋ ๊ฒ์ ๋๋ค.
๋ํ JPA๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ์ ๊ตํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ ํฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ฉด์ ๊ฐ๋ฐ์๊ฐ JPA ํ๋ ์์ํฌ ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ์ ๋ด๋ถ ์์ ์ ํ์ ํ์ง ๋ชปํ๋ฉด ์ข์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊ฐ๋จํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ณต๊ธ์ ์ฒด๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ ๊ณํ์ด ์๋ ๊ฒฝ์ฐ JDBC๊ฐ ์ ํธ๋๋ ๋์์ด ๋ฉ๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ JDBC๋ณด๋ค JPA์ ์ฃผ์ ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์๋ฏธ ์ฒด๊ณ์ ๋ํด ๊ฑฑ์ ํ ํ์ ์์ด ๊ฐ์ฒด ์งํฅ ์์น๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ฌ์ฉํ์ฌ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฝ๋ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ, ํนํ ์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ SQL ๋ฐ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ํ์คํ ์ดํด๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ๊ฐ๋ฐ์ ๋ณด๋ค ์ ์ํ๊ฒ ์๋ฃํ ์ ์์ต๋๋ค.
๋ํ ์ ํ ์คํธ๋๊ณ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Java ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ํธ ์์ฉ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ JPA๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งคํ ๊ณ์ธต์ ์ค๋ฅ๊ฐ ๊ฐ์ํด์ผ ํฉ๋๋ค.
Reference
Last updated
Was this helpful?