[Back-End] MyBatis, JPA (SQL Mapper, ORM)

์œ ๋„ค์Šค์ฝ”dยท2023๋…„ 5์›” 31์ผ
0

Back-End

๋ชฉ๋ก ๋ณด๊ธฐ
2/3

๐Ÿค”MyBatis vs JPA

MyBatis : Java์—์„œ SQL Mapper๋ฅผ ์ง€์›ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ
JPA : Java ORM ๊ธฐ์ˆ  ํ‘œ์ค€


โœ…SQL Mapper

  • Object์™€ SQL์˜ ํ•„๋“œ๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒดํ™” ํ•˜๋Š” ๊ธฐ์ˆ 
  • SQL๋ฌธ์„ ์ด์šฉํ•˜์—ฌ DB์— ์ ‘๊ทผํ•œ๋‹ค.
  • SQL๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
  • DB์— ์ข…์†์ ์ธ ๋ฌธ์ œ (DB์— ๋”ฐ๋ผ SQL ๋ฌธ๋ฒ•์ด ๋‹ค๋ฆ„)

โœ…ORM (Object-Relational Mapping)

  • Object์™€ DBํ…Œ์ด๋ธ”์„ ๋งคํ•‘ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒดํ™”ํ•˜๋Š” ๊ธฐ์ˆ 
  • SQL๋ฌธ์ด ์•„๋‹ˆ๋ผ DB์˜ ๋ฐ์ดํ„ฐ ์ž์ฒด์™€ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. (๋งคํ•‘์— ํ•„์š”ํ•œ SQL๋ฌธ์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ)
  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋ณต์ ์ธ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • DB์— ์ข…์†์ ์ด์ง€ ์•Š๋‹ค.

๐Ÿ“ŒMyBatis (SQL Mapper)

Java์—์„œ SQL Mapper๋ฅผ ์ง€์›ํ•ด์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ

  • SQL๋ฌธ์„ ์ด์šฉํ•˜์—ฌ DB์— ์ ‘๊ทผํ•œ๋‹ค.
  • SQL๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ณ  ์ฟผ๋ฆฌ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•œ๋‹ค.

์žฅ์ 

  • SQL๋ฌธ์„ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— join๊ฐ™์€ ๋ณต์žกํ•œ SQL๋ฌธ์„ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฟผ๋ฆฌ๋ฌธ์„ xml๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋‚ฎ๋‹ค.

๋‹จ์ 

  • DB์— ์ข…์†์ ์ธ ๋ฌธ์ œ (DB์— ๋”ฐ๋ผ SQL ๋ฌธ๋ฒ•์ด ๋‹ค๋ฆ„)
  • ๊ธฐ๋ณธ์ ์ธ CRUD ๋ชจ๋‘ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ฐ์ฒด์™€ ์ฟผ๋ฆฌ๋ฌธ ๋ชจ๋‘ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

๐Ÿ“ŒJPA (ORM)

Java ORM์˜ ๊ธฐ์ˆ  ํ‘œ์ค€

  • ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฏ€๋กœ Hibernate, OpenJPA ๋“ฑ์ด JPA๋ฅผ ๊ตฌํ˜„ํ•จ

์žฅ์ 

  • SQL๋ฌธ์ด ์•„๋‹ˆ๋ผ DB์˜ ๋ฐ์ดํ„ฐ ์ž์ฒด์™€ ๋งคํ•‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— SQL๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์Œ
    (๋งคํ•‘์— ํ•„์š”ํ•œ SQL๋ฌธ์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์คŒ)

  • CRUD ๋ฉ”์†Œ๋“œ ๊ธฐ๋ณธ ์ œ๊ณต

  • SQL๋ฌธ์ด ์•„๋‹Œ Method๋ฅผ ํ†ตํ•ด DB๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  • DB์— ์ข…์†์ ์ด์ง€ ์•Š์Œ โ†’ DB์˜ ์ข…๋ฅ˜์— ๊ด€๊ณ„์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์œ ์ง€๋ณด์ˆ˜, ๋ฆฌํŒฉํ† ๋ง์— ์šฉ์ดํ•˜๋‹ค.

  • ๋™์ผํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์บ์‹œ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”์šฑ ๋†’์€ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ 

  • ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋†’๋‹ค.
  • ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์„œ ์„ค๊ณ„๋ฅผ ์ž˜๋ชปํ–ˆ์„ ๊ฒฝ์šฐ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ์•ฝํ•˜๋‹ค.
    โ†’ ๋”ฐ๋ผ์„œ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์˜ ๊ฒฝ์šฐ JPQL, QueryDSL์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ SQL Mapper๋ฅผ ํ˜ผ์šฉํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.



๐Ÿ“๋ฉด์ ‘ ๋Œ€๋น„

Q. MyBatis, JPA์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.

A. MyBatis๋Š” SQL Mapper, JPA๋Š” ORM(Object-Relational Mapping)์ž…๋‹ˆ๋‹ค.
MyBatis๋Š” SQL Mapper์ด๊ธฐ ๋•Œ๋ฌธ์— SQL๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ DB์— ์ ‘๊ทผํ•ฉ๋‹ˆ๋‹ค. SQL๋ฌธ์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ SQL๋ฌธ์„ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ณ , SQL๋ฌธ์„ xmlํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ DB์— ๋”ฐ๋ผ SQL ๋ฌธ๋ฒ•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— DB ์ข…๋ฅ˜๋ฅผ ๋ฐ”๊ฟ€ ๊ฒฝ์šฐ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
JPA๋Š” ORM์œผ๋กœ, SQL๋ฌธ์ด ์•„๋‹ˆ๋ผ DB์˜ ๋ฐ์ดํ„ฐ ์ž์ฒด์™€ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค. CRUD ๋ฉ”์†Œ๋“œ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๊ณ  SQL๋ฌธ์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋Š” Method๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SQL๋ฌธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ์„œ DB ์ข…๋ฅ˜์— ๊ด€๊ณ„ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์บ์‹œ ๊ธฐ๋Šฅ๋„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋†’๊ณ  ๋ณต์žกํ•œ ์ฟผ๋ฆฌ์— ์•ฝํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€๋กœ JPQL, QueryDSL์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ SQL Mapper๋ฅผ ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q. JPA๋ฅผ ์‚ฌ์šฉํ•œ ์ด์œ ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

A. JPA์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ ๋ฐ˜๋ณต์ ์ธ CRUD SQL์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ์ด๋Ÿฐ CRUD SQL์ด ๋” ๋งŽ์ด ํ•„์š”ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋Ÿฐ ๊ฐ„๋‹จํ•œ ์ž‘์—…์€ JPA์—๊ฒŒ ๋งก๊ธฐ๊ณ  ๊ฐœ๋ฐœ์ž๋Š” ๋‹ค๋ฅธ ์ผ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ๋Š” ๊ทœ๋ชจ๊ฐ€ ํฌ์ง€๋Š” ์•Š์•˜์ง€๋งŒ ์ด๋Ÿฐ JPA์˜ ์žฅ์ ์„ ๋Š๊ปด๋ณด๊ณ  ์‹ถ์–ด์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ JPA๋Š” ๋Ÿฌ๋‹์ปค๋ธŒ๊ฐ€ ๋†’์€๋ฐ JPA๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋‹ค์Œ์— JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๋•Œ ๋„์›€์ด ๋ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์—ฌ ๋ฏธ๋ฆฌ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€