๋ฐฑ์๋์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ํ๋ ์์ํฌ๋ก, ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๊ธฐ์ ์ด '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 ์ค ํ๋๋ฅผ ์ ํํ๊ฑฐ๋, ๋ ๊ธฐ์ ์ ํผ์ฉํด์ ์ฌ์ฉํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์
๊ฐ ๊ธฐ๋ฅ์ ๋ํด ์ ์ ํ ์ํฉ์ ๋ง์ถฐ ์ฑ๋ฅ์ ๊ณ ๋ คํด ์ ์ ํ๊ฒ ์ฌ์ฉํด์ฃผ๋ ํธ์ด ์ข๋ค.
'๐ฉ๐ปโ๐ป Developer > ์ ์ ๊ฐ๋ฐ์ ์ง์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์๋ ๊ฐ๋ฐ์์๊ฒ ์ค์ํ ํ ์คํธ์ฝ๋ ์์ฑํ๊ธฐ (1) | 2024.04.03 |
---|---|
SQL๊ณผ NoSQL์ ์ฐจ์ด๋? (0) | 2024.03.27 |
[๋คํธ์ํฌ] REST API๋? (0) | 2024.03.14 |
์ํคํ ์ฒ, ํ๋ ์์ํฌ๋ ๋ฌด์์ธ๊ฐ? (0) | 2024.03.13 |
[๊ธฐ๋ณธ ์ง์] Node.js๋? (1) | 2024.03.08 |
๋๊ธ