๊ทธ๋์ ๋๋ JPA๋ง ๊น์ง์์๋๋ฐ(?) ํ์ฌ ์ค๋ MyBatis๋ฅผ ํ๊ฒ ๋์ด์(?) ์ ๊ฐ์ด๋ค.
STS ์ด๋ค๋ ๋ง๋ง ๋ค์์ ๋๋ ๋๋ JPA๋ง ๊ณต๋ถํด ๋ดค์ผ๋ ๋๋ฆ ๋น์ฐํ๋ค๋ ๋ฏ์ด 'QueryDSL๋ ๋นจ๋ฆฌ ๊ณต๋ถํด์ผ๊ฒ ๋ค!'๋ผ๊ณ ์๊ฐํ๋๋ฐ ๊ฒฝ๊ธฐ๋ ์ค์ฐ์ด์๋ค ใ .ใ
์ํผ, ์ด ๋ด์ฉ์ ์ ๋ฆฌํ๊ฒ ๋ ๊ณ๊ธฐ๋ DAO, VO์ Repository ํจํด์ ์ฐจ์ด๊ฐ ๊ถ๊ธํด์๋ค.
์ฟผ๋ฆฌ๋ ํ๋ํ๋ ์ง์ ์ง์ ๋งคํํด์ค์ผ ํ๋, ๋๋ ์๊ฐ ์๋ ๊ธด๊ธด ์ฟผ๋ฆฌ๋ฌธ๋ค์ ๋ณด๋ฉฐ ์ด๊ฑธ ๋ด๊ฐ ์ด๋ป๊ฒ ์ดํดํ์ง ์๊ฐํ์๋๋ฐ..
์์ง๋ ์ด์ฌํ ๋ณด๊ณ ๋ ๋ณด๊ณ ์คํ์์ผ ๋ณด๋ ๋จ๊ณ์ง๋ง ๊ทธ๋๋ ๋ด๊ฐ ๋ฐฐ์ ๋ ๊ฑฐ๋ ๋น๊ตํด์ ์์๊ฐ๋ฉด ์ดํด๊ฐ ๋ ์ฝ์ง ์์๊น ํ๋ ๊ธฐ๋๊ฐ์ ๋์ด ๋น๊ตํด๋ณด๋ ค๊ณ ํ๋ค.
๋ฌผ๋ก ๋ถ์กฑํ๊ณ ํ๋ฆฐ ๋ถ๋ถ๋ ์๊ฒ ์ง๋ง ๊ทธ๊ฑด ๋ฏธ๋์ ๋ด๊ฐ ์ ์ํธ ํด๋๊ฐ ๊ฑฐ๋ค ใ ใ !
[1] JPA๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(Repository)
๋ฌ๊ธ์์ด Repository๋ฅผ ์ธ๊ธํ๋๊ณ ํ ์ ์๊ฒ ์ผ๋, ์ฐพ์๋ณด๋ ์ด๊ฑธ ์์์ผ๊ฒ ๋๋ผ.
JPA(Java Persistence API)
- ์๋ฐ ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์๋ํํ๋ ํ์ค ORM(Object-Relational Mapping) ๊ธฐ์
- ์ฆ, ์๋ฐ Class ๋ RDB ํ ์ด๋ธ์ ๋งคํํด ์ฃผ์ด ์ฟผ๋ฆฌ๋ฌธ์ด ์๋ ๋ฉ์๋๋ก DB๋ฅผ ๋ง์ง ์ ์๊ฒ ๋๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด, ๊ฐ๋ฐ์๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ์ง์คํ ์ ์๊ฒ ๋จ!
- ๋ฐ๋ณต๋๋ ์ฟผ๋ฆฌ๋ฌธ์ ์ฒ๋ฆฌํด ์ฃผ๋ ๊ฐํธํ๊ณ , ๋ฌด์๋ณด๋ค ๊ฐ์ฒด์ค์ฌ์ผ๋ก ๊ฐ๋ฐํ ์ ์์ด ์ ์ง๋ณด์์ ์ฉ์ดํ๋ค.
์ด๋ฌํ JPA๋ฅผ ๊ธฐ๋ฐ์ผ๋ก CRUD ๋ฐ ๊ธฐํ ๋ฐ์ดํฐ ์ ๊ทผ ์์ ์ ์ถ์ํํ์ฌ ์ ๊ณตํด ์ฃผ๋ ์ธํฐํ์ด์ค๊ฐ ๋ฐ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๋ค.
JPA๊ฐ ์ ๊ณตํ๋ Repository๋ฅผ ํตํด DAO ํจํด์ ์๋์ผ๋ก ๊ตฌํํ ์ ์๋ค.
๊ทธ๋ฌ๋, JPA๋ฅผ ์ฐ๋ฉด Repository๊ฐ DAO ์ญํ ์ ๋์ ํด ์ฃผ๋ฏ๋ก ๋ณ๋์ DAO ํด๋์ค๊ฐ ํ์ ์๊ฒ ๋๋ค.
๋ฐ๋๋ก JPA๋ฅผ ์ฐ์ง ์๋ ๊ฒฝ์ฐ ๊ตฌํ ํจํด์ ๋ํด ๊ฐ๋จํ ์์๋ณด์.
[2] JPA๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ (JDBC Template, MyBatis)
JPA๋ ๊ฐ์ฒด ์ค์ฌ ๊ฐ๋ฐ๋ก ํด๋์ค๋ ํ ์ด๋ธ์ ์๋ ๋งคํํด ์ค๋ค.
๊ทธ๋ฌ๋, JPA๋ฅผ ์ฐ์ง ์๋๋ค๋ฉด SQL์ ์ง์ ์์ฑํด์ผ ํ๋ค.
์ฌ์ฉํ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธฐ์ ์ ๋ง๊ฒ ๊ฐ๋ฐ์๊ฐ ๋ฐ์ดํฐ ์ ๊ทผ ๋ก์ง์ ์ง์ ๊ตฌํํด์ผ ํ๋ค.
JPA๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๋ฐ์ดํฐ ์ ๊ทผ์ด ํ์ํ์ฌ ์ง์ DAO ํจํด์ ๊ตฌํํด์ผ ํ๋ค(์์ฐ์ค๋ฝ๊ฒ Repository ์ธํฐํ์ด์ค๋ ์ฌ์ฉ๋์ง ์๋๋ค).
DAO๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ชจ๋ CRUD ์์ ์ ์ํํ๋ ์ ๋ด ๊ณ์ธต์ด ๋๋ ๊ฒ์ด๋ค.
โDAO, VO?
DAO๋ VO๊ฐ ๋ญ ํ๋ ์ ์ธ์ง๋ ์ ๋ฆฌํด ๋ณด๊ฒ ๋ค.
DAO(Data Access Object)
- ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ธฐ ์ํ ๊ฐ์ฒด
- DB ์ ๊ทผ ๋ก์ง์ ๋ถ๋ฆฌํ๊ณ ์ ์ฌ์ฉ
- DB์ ์ง์ ์ ๊ทผํ์ฌ CRUD ๋ฑ ๊ธฐ๋ฅ์ ์ํ
VO(Value Object)
- ๊ฐ ํ์ ์ ํํํ๊ธฐ ์ํ ๊ฐ์ฒด
- Read-Only
- @Getter ๊ธฐ๋ฅ๋ง ์กด์ฌํจ
- ๊ฐ ์์ฒด์ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋ถ๋ณ ํด๋์ค
DAO์ ์ญํ
DAO๋ ๋จ์ผ ์ฑ ์ ์์น(SRP), ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ(SoC), ์บก์ํ ์์น์ ๋ฐ๋ผ DB์์ ๋ชจ๋ CRUD ์์ ์ ์บก์ํํ๋ ์ ๋ด ๊ฐ์ฒด๋ก ์ค๊ณ๋์ด์ผ ํ๋ค.DAO๋ ๋จ์ํ "ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ"์ํ ๊ฐ์ฒด๊ฐ ์๋ ๊ฒ์ด๋ค.๋ฐ์ดํฐ ์ ๊ทผ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ์์ ์ ๋ด๋นํ๋ ๊ณ์ธต์ด๋ค.
[๊ฒฐ๋ก ] DAO/VO์ JPA, Repository ๊ด๊ณ
JPA๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, Spring Data JPA์ Repository ์ธํฐํ์ด์ค๊ฐ DAO ํจํด์ ๊ตฌํํ๋ ์ญํ ์ ์ํํ๋ค.JPA๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์ง์ DAO๋ฅผ ๊ตฌํํด์ผ ํ๊ณ ์ด๋ Repository ๊ณ์ธต์ ์ฌ์ฉ๋์ง ์๋๋ค(๊ทธ๋ด ํ์๊ฐ ์๋ค).
'๐ฟSpring, SpringBoot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๊ฐ๋ ]:๐กJWT์ ๋ํด ์์๋ณด์ (0) | 2024.09.29 |
---|---|
spring- ๋ก๊ทธ ์ถ๋ ฅ ์๋๋ ๋ฌธ์ ํด๊ฒฐ (1) | 2024.01.07 |