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๋Š” ๊ฐ์ฒด๋ฅผ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฟ, ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ด์ง€ ๋ชปํ•˜๋‹ค(ํŽ˜๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜).

์ฐธ๊ณ