Mybatis vs JPA - GANGNAM-JAVA/JAVA-STUDY GitHub Wiki
Mybatis
- SQL์ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌํด์ ๊ด๋ฆฌํ๊ฒ ํด์ฃผ๋ฉฐ, ๊ฐ์ฒด-SQL ์ฌ์ด์ ํ๋ผ๋ฏธํฐ Mapping ์์
์ ์๋์ผ๋ก ํด์ฃผ๋ ํ๋ ์์ํฌ
- JDBC๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ธ์คํ๋ ์์
์ ์บก์ํํ๊ณ ์ผ๋ฐ SQL query, ์ ์ฅ ํ๋ก ์์ ๋ฐ ๊ณ ๊ธ ๋งคํ์ ์ง์ํ๋ฉฐ ๋ชจ๋ JDBC ์ฝ๋ ๋ฐ ๋งค๊ฐ ๋ณ์์ ์ค๋ณต์์
์ ์ ๊ฑฐ
JPA(Java Persistent API)
- JPA๋ ์๋ฐ ORM ๊ธฐ์ ์ ๋ํ API ํ์ค ๋ช
์ธ๋ฅผ ์๋ฏธ
- JPA๋ ORM์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์๋ ๊ฒ์ด๋ฉฐ, JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JPA๋ฅผ ๊ตฌํํ Hibernate, EclipseLink, DataNucleus ๊ฐ์ ORM ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
ORM(Object Relational Mapping)
- ORM์ ๊ฐ์ฒด์ DB ํ
์ด๋ธ์ด mapping์ ์ด๋ฃจ๋ ๊ฒ
- ORM์ ์ด์ฉํ๋ฉด SQL Query๊ฐ ์๋ ์ง๊ด์ ์ธ ์ฝ๋(๋ฉ์๋)๋ก ๋ฐ์ดํฐ ์กฐ์์ด ๊ฐ๋ฅ
- User ํ
์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์ MySQL์์๋ 'SELECT * FROM user;' ๋ผ๋ query๋ฅผ ์คํํด์ผ ํ์ง๋ง, ORM์ ์ฌ์ฉํ๋ฉด User ํ
์ด๋ธ๊ณผ ๋งคํ๋ ๊ฐ์ฒด๋ฅผ user๋ผ ํ ๋, user.findAll() ๋ผ๋ ๋ฉ์๋ ํธ์ถ๋ก ๋ฐ์ดํฐ ์กฐํ๊ฐ ๊ฐ๋ฅ
- query๊ฐ ๋ณต์กํด์ง๋ฉด ORM์ผ๋ก ํํํ๋๋ฐ ํ๊ณ๊ฐ ์๊ณ , ์ฑ๋ฅ์ด raw query์ ๋นํด ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ธฐ ์ํด JPQL, QuertyDSL ๋ฑ์ ์ฌ์ฉํ ์ ์๋ค.
Mybatis vs JPA
- Mybatis๋ ํ์ต์ด ์ฌ์ด ๋ฐ๋ฉด, JPA๋ฅผ ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์์์ผ ํ ๊ฒ์ด ๋ง๋ค.
- JPA๋ SQL๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๊ณ , ๋ฉ์๋ ํธ์ถ๋ง์ผ๋ก query ์ํ์ด ๊ฐ๋ฅํ์ฌ SQL ๋ฐ๋ณต ์์
์ ํ์ง ์์๋ ๋๋ค.
- ํ
์ด๋ธ ์ปฌ๋ผ์ด ํ๋ ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ Mybatis์์๋ ๊ด๋ จ DAO์ ํ๋ผ๋ฏธํฐ, ๊ฒฐ๊ณผ, SQL ๋ฑ์ ๋ชจ๋ ํ์ธํ์ฌ ์์ ํด์ผ ํ์ง๋ง, JPA์ ๊ฒฝ์ฐ ์ด๋ฅผ ๋์ ํด์ค๋ค.
- JPA๋ ํน์ ๋ฒค๋์ ์ข
์์ ์ด์ง ์๋ค.
- ์ฌ๋ฌ DB ๋ฒค๋(MySQL, Oracle ๋ฑ)๋ง๋ค SQL ์ฌ์ฉ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅธ๋ฐ, JPA๋ ์ถ์ํ๋ ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ ๊ณตํ์ฌ ๋ฒค๋์ ์ข
์๋์ง ์๋๋ค.
- JPA๋ ๋ฉ์๋ ํธ์ถ๋ก query๋ฅผ ์คํํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์ ์ผ๋ก ๋ง์ ๋์์ด ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ฏ๋ก, ์ง์ SQL์ ํธ์ถํ๋ ๊ฒ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค(์ต๊ทผ์๋ ๋ง์ ๋ฐ์ ์ผ๋ก ์ธํด JPA๋ ์ข์ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๊ณ ์๋ค).
- JPA๋ ํต๊ณ ๋ถ์ ๋ฑ์ ๋ณต์กํ query๋ฅผ ๋ฉ์๋ ํธ์ถ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ํ๋ค๋ค.
- ์ด๊ฒ์ ๋ณด์ํ๊ธฐ ์ํด JPA์์๋ SQL๊ณผ ์ ์ฌํ ๊ธฐ์ ์ธ JPQL์ ์ง์ํ๋ค.
- Mybatis๋ ๊ฐ์ฒด๋ฅผ ๋จ์ํ ๋ฐ์ดํฐ ์ ๋ฌ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ๋ฟ, ๊ฐ์ฒด ์งํฅ์ ์ด์ง ๋ชปํ๋ค(ํ๋ฌ๋ค์ ๋ถ์ผ์น).
์ฐธ๊ณ