JPA ์™€ Mybatis๋ž€ ๋ฌด์—‡์ธ๊ฐ€? / JPA์™€ Mybatis์˜ ์ฐจ์ด

๋ฐฑ์—”๋“œ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ, ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” ๊ธฐ์ˆ ์ด 'Mybatis' ์™€ 'JPA' ์ด๋‹ค.

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘์†์„ ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด SQL Mapper ๊ธฐ์ˆ ๊ณผ, ORM(Object Relational Mapping) ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•œ๋‹ค. 

SQL Mapper ๋Š” '๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ SQL ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์— ๋งคํ•‘' ์‹œ์ผœ์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฉฐ, 

ORM์€ ๊ฐ์ฒด์™€ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ '์ž๋™์œผ๋กœ ๋งคํ•‘' ์‹œ์ผœ์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. 

 

SQL Mapper ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด Mybatis ์ด๋ฉฐ, 

ORM ๊ธฐ์ˆ ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด JPA ์ด๋‹ค.


๐Ÿ“Œ JPA ๋ž€?  (Java Persistence API)

์ž๋ฐ”์˜ ORM ๊ธฐ์ˆ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” API์ด๋‹ค.

์ฆ‰, ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” API์ด๋‹ค.

 

JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ„์˜ ๋งคํ•‘์„ ์†์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ CRUD ์ž‘์—…์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

JPA ํŠน์ง• 

: SQL๋ฌธ์˜ ์ž‘์„ฑ์ด ๋ถˆํ•„์š”ํ•˜๋ฉฐ ORM ๋‚ด๋ถ€์ ์œผ๋กœ java ๋ฉ”์†Œ๋“œ์— ์ ํ•ฉํ•œ SQL๋ฌธ์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์‹คํ–‰๋œ๋‹ค. 

์ฆ‰, ๊ฐœ๋ฐœ์ž๋Š” ํด๋ž˜์Šค๋งŒ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๊ณ  ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ž๋™์œผ๋กœ ๊ด€๋ จ๋œ SQL์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

โ— Hibernate

JPA์™€ ์ง๊ถ์œผ๋กœ ์ž์ฃผ ๋‚˜์˜ค๋Š” ๋‹จ์–ด๊ฐ€ Hibernate์ด๋‹ค. 

Hibernate๋Š” ORM ๊ธฐ์ˆ ์„ ์‹ค์ œ ๊ตฌํ˜„ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ธฐ ๋–„๋ฌธ์ด๋‹ค. 

JPA ์ŠคํŽ™์„ ๊ตฌํ˜„ํ•œ ๊ธฐ์ˆ ์€ Hibernate ์ด์™ธ์—๋„ EclipseLink, DataNucleus ๋“ฑ... ์ด ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์€ 

Hibernate์ด๋‹ค.

 

์ฆ‰, Java์™€ DB ๋ฐ์ดํ„ฐ ๊ฐ„์˜ ๋งคํ•‘์„ ์ž๋™ํ™”ํ•ด์ฃผ์–ด ๊ฐœ๋ฐœ์ž๋Š” SQL๋ฌธ์„ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์–ด์ง€๊ณ , 

DB๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ DB์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด SQL๋ฌธ์„ ์ž‘์„ฑํ•ด์ค„ ํ•„์š”๊ฐ€ ์—†์ด DB์— ์ ํ•ฉํ•œ SQL๋ฌธ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๐Ÿ“Œ Mybatis๋ž€? 

์ž๋ฐ”์˜ SQL Mapper ๊ธฐ์ˆ ์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

 

๋ฐ˜๋ณต์ ์ธ JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ, ๋ถˆํ•„์š”ํ•œ Boilerplate ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , Java ์†Œ์Šค์ฝ”๋“œ์—์„œ SQL๋ฌธ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ XML ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ , ์ด ๋‘˜์„ ์„œ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. 

 

Mybatis ํŠน์ง•

: MyBatis์—์„œ Java ๋ฉ”์†Œ๋“œ์™€ SQL๊ฐ„์— ๋งคํ•‘์„ ์‹œ์ผœ ๊ฐœ๋ฐœ์ž๊ฐ€ Java ๋ฉ”์†Œ๋“œ ์„ ์–ธ๊ณผ SQL๋ฌธ๋งŒ ๋งŒ๋“ค๋ฉด MyBatis๊ฐ€ ์ž๋™์œผ๋กœ ๊ทธ ๋‘˜ ๊ฐ„์„ ์—ฐ๊ฒฐ์‹œ์ผœ์ค€๋‹ค. 

 

SQL๋ฌธ์„ ๋ณ„๋„๋กœ Java ์ฝ”๋“œ์—์„œ ๋ถ„๋ฆฌํ•ด๋‘์–ด ๊ด€๋ฆฌ๊ฐ€ ํŽธํ•˜๊ฒŒ ํ•˜์˜€์œผ๋ฉฐ, ๋ถ„๋ฆฌ๋œ SQL๋ฌธ์„ Mybatis ๊ฐ€ ์ฐพ์•„์„œ ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š”๊ฒƒ์ด๋‹ค.

์ฆ‰, JDBC ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋˜ํ•œ, ๋™์ ์ธ SQL (Dynamic SQL) ์ƒ์„ฑ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์—ฌ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘ ์ž…๋ ฅ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ SQL๋ฌธ์„ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•ด ๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ค€๋‹ค. 

=> ๋™์ ์ธ SQL๋ฌธ์ด ์ƒ์„ฑ๋œ๋‹ค ๋ผ๋Š” ๊ฒƒ์€ ๊ฒ€์ƒ‰ ์กฐ๊ฑด ๊ฐ™์ด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ๊ฐ’์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ SQL๋ฌธ์žฅ์ด ์ƒ์„ฑ๋˜์–ด ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 


๐Ÿ“Œ Mybatis VS JPA

๊ทธ๋ ‡๋‹ค๋ฉด, Mybatis์™€ JPA๋ฅผ ๋น„๊ตํ•ด๋ณด์ž.

์™ผ์ชฝ : ์ „ ์„ธ๊ณ„ / ์˜ค๋ฅธ์ชฝ : ๋Œ€ํ•œ๋ฏผ๊ตญ

๊ตฌ๊ธ€ ํŠธ๋ Œ๋“œ๋ฅผ ํ†ตํ•ด ์ „ ์„ธ๊ณ„ ๊ธฐ์ค€๊ณผ ๋Œ€ํ•œ๋ฏผ๊ตญ ๊ธฐ์ค€ ์„ ๊ฒ€์ƒ‰ํ•ด๋ณด์•˜๋‹ค. 

๋‘˜ ๋‹ค ์ง€๋‚œ 5๋…„๊ฐ„์˜ ํ‰๊ท ์ด JPA๊ฐ€ ๋†’์•˜๋‹ค. ์ฆ‰, JPA๊ฐ€ Mybatis ๋ณด๋‹ค ํ›จ์”ฌ ์ธ๊ธฐ์žˆ๊ณ , ๋” ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

 

๊พธ์ค€ํžˆ ์ธํ„ฐ๋„ท ์„œ๋น„์Šค ๊ธฐ์—…๊ณผ ์Šคํƒ€ํŠธ์—… ๊ธฐ์—…์„ ์ค‘์‹ฌ์œผ๋กœ JPA ๊ธฐ์ˆ ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ํ•˜๋Š” ๊ธฐ์—…์ด ๋Š˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. 

์ด ๋•Œ๋ฌธ์— ๊ณ„์†ํ•ด์„œ JPA๊ฐ€ ๋” ๊ฐ๊ด‘๋ฐ›๋Š” ๊ธฐ์ˆ ์ด ๋  ๊ฒƒ ๊ฐ™๋‹ค. 

 


 Mybatis ์˜ ์žฅ / ๋‹จ์ 

์žฅ์  

1. SQL ์ง์ ‘ ์ œ์–ด : ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ๋˜๋Š” ํŠน์ • DB์— ์ตœ์ ํ™”๋œ ์ฟผ๋ฆฌ ์ž‘์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ SQL์— ์ง์ ‘์ ์œผ๋กœ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ์— ์œ ๋ฆฌํ•˜๋‹ค.

2. ํ•™์Šต ์šฉ์ด์„ฑ : SQL์„ ์ž˜ ์•„๋Š” ๊ฒฝ์šฐ, JPA์— ๋น„ํ•ด ํ•™์Šต์ด ์‰ฝ๋‹ค. 

 

๋‹จ์  

1. CRUD ๋‹จ์ˆœ ์ž‘์—…์— ๋ฐ˜๋ณต ์ˆ˜์ž‘์—… ํ•„์š” : CRUD์™€ ๊ฐ™์€ ๊ธฐ๋ณธ ์ฝ”๋“œ์— ๋Œ€ํ•ด ๊ณ„์†ํ•ด์„œ ๋‹จ์ˆœํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

2. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์†์  : ํŠน์ • DB๋ฅผ ๊ธฐ์ค€์œผ๋กœ SQL๋ฌธ์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด, DB๋ฅผ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SQL๋ฌธ์„ ์ „์ฒด ๋‹ค ํ™•์ธํ•œ ํ›„ ์ˆ˜์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.


JPA ์˜ ์žฅ / ๋‹จ์ 

์žฅ์  

1. ํ‘œ์ค€ํ™”๋œ ์ธํ„ฐํŽ˜์ด์Šค  : ์ž๋ฐ”์—์„œ ORM์„ ์œ„ํ•œ ํ‘œ์ค€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค. || ex) Hibernate, EclipseLink, Apache OpenJPA๋“ฑ

2. ์ž๋™ ๋งคํ•‘์œผ๋กœ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ํ–ฅ์ƒ : ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณ„๋„์˜ SQL ์ž‘์„ฑ ์—†์ด DB์™€ ๊ฐ์ฒด๊ฐ„์˜ ๋งคํ•‘์ด ์ด๋ฃจ์–ด์ง„๋‹ค. 

3. ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ ์ง€์› : ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์—ฐ๊ด€ ๊ด€๊ณ„์™€ ๊ฐ์ฒด ๊ฐ„์˜ ์—ฐ๊ด€ ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค. 

4. DBMS์— ๋…๋ฆฝ์  : DB๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๊ณ  ํ•ด๋„ SQL๋ฌธ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. 

 

๋‹จ์  

1. ์–ด๋ ค์šด ํ•™์Šต : JPA ๊ด€๋ จ ๋‹ค์–‘ํ•œ ์ŠคํŽ™๊ณผ ์ž‘์„ฑ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šตํ•ด์•ผ ํ•œ๋‹ค. (@Entity, @Table, @Id, @Column, @OneToMany, @ManyToOn ๋“ฑ)
๋˜ํ•œ, JPA ์ ์šฉ์œผ๋กœ ์ƒ๊ธฐ๋Š” ๋‹ค์–‘ํ•œ ์ด์Šˆ, ์ฆ‰์‹œ๋กœ๋”ฉ, ์ง€์—ฐ๋กœ๋”ฉ, ์˜์†์„ฑ ์ „์ด, ๋ณตํ•ฉํ‚ค ๋งคํ•‘ ๋“ฑ์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ์ตํ˜€์•ผ ํ•œ๋‹ค. 

2. ๋ณต์žกํ•œ SQL ์ƒ์„ฑ์˜ ์–ด๋ ค์›€ : ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์„ Joinํ•ด์„œ ๋ฐ์ดํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์šฉ์ดํ•˜์ง€ ์•Š๋‹ค. 

3. ์„ฑ๋Šฅ์— ๋Œ€ํ•œ ๊ณ ๋ ค ํ•„์š” : ํ…Œ์ด๋ธ” ๊ฐ„์˜ Join์ด ๋งŽ์•„์ง€๋Š” ๊ฒฝ์šฐ SQL๋ฌธ์„ ์–ด๋–ป๊ฒŒ ํŠœ๋‹ํ•˜๋Š”๊ฐ€๋กœ ์ธํ•ด ์„ฑ๋Šฅ์ด ๊ต‰์žฅํžˆ ๋งŽ์ด ์ฐจ์ด ๋‚˜๊ฒŒ ๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์„œ ์‚ฌ์šฉํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 


๋งˆ์ง€๋ง‰์œผ๋กœ ๊ทธ๋ ‡๋‹ค๋ฉด, Mybatis์™€ JPA๋ฅผ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ณ„ํ•˜์—ฌ ์–ด๋–ค ์ƒํ™ฉ์— ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋ณด์ž.

 

๋ณต์žกํ•œ ์ฟผ๋ฆฌ์™€ SQL ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” Mybatis๋กœ , 

๊ฐ„๋‹จํ•œ ๋งคํ•‘ ๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” SQL ์ž‘์„ฑ์˜ ๋ฐ˜๋ณต์ ์ธ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•ด์ฃผ๋Š” JPA๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. 

 

Mybatis์™€ JPA ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜, ๋‘ ๊ธฐ์ˆ ์„ ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—

๊ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ ์ ˆํ•œ ์ƒํ™ฉ์— ๋งž์ถฐ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•ด ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์ฃผ๋Š” ํŽธ์ด ์ข‹๋‹ค.

๋Œ“๊ธ€