๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ์, DBMS
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์ํํธ์จ์ด DBMS(database management system)!
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง์ ์ฌ๋๋ค์ ๊ณต์ ๋ก ๋์ ์ ๊ทผ ํ ์ ์์ด์ผ ํฉ๋๋ค.
DBMS๋ ์ด๋ฐ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ฉด์๋ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ ์ด์ํฉ๋๋ค.
๋ํ์ ์ผ๋ก MySQL, Oracle์ด ์์ต๋๋ค.
โ ๊ด๊ณํ DBMS (relational DBMS : RDBMS)
๊ด๊ณํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ DBMS!
ํ ์ด๋ธ ํํ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ์ ์ฅ์์ ๋๋ค.
(์ด ์ฑ ์ ๊ฐ๋ฐ์ H2, ์ค์ ์๋น์ค์์๋ MySQL ์ฌ์ฉํ ์์ ์ ๋๋ค.)
H2 : ์๋ฐ๋ก ์์ฑ๋์ด ์๋ RDBMS. ์คํ๋ง ๋ถํธ๊ฐ ์ง์ํ๋ ์ธ๋ฉ๋ชจ๋ฆฌ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๊ณต๊ฐ์ ๋ฐ๋ก ๋ณด๊ดํ๋ ๊ฒ์ด ์๋๋ผ ์ ํ๋ฆฌ์ผ์ด์ ์์ฒด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋๋ค.
๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฉ์ด ์ ๋ฆฌ
โ ํ ์ด๋ธ
๋ฐ์ดํฐ๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๋จ์
ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋์ด ์๋ค
ํ์ ์ฌ๋ฌ ์์ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
โ ํ ๋๋ ๋ ์ฝ๋
ํ ์ด๋ธ์ ๊ตฌ์ฑ ์์ ์ค ํ๋
ํ ์ด๋ธ์ ๊ฐ๋ก๋ก ๋ฐฐ์ด๋ ๋ฐ์ดํฐ์ ์งํฉ
ํ์ ๋ฐ๋์ ๊ณ ์ ํ ์๋ณ์์ธ ๊ธฐ๋ณธ ํค๋ฅผ ๊ฐ์ง๋๋ค.
ํ์ ๋ ์ฝ๋(record)๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํจ
โ ์ด
ํ ์ด๋ธ์ ๊ตฌ์ฑ ์์ ์ค ํ๋
ํ์ ์ ์ฅ๋๋ ์ ํ์ ๋ฐ์ดํฐ
๊ฐ ์์์ ๋ํ ์์ฑ์ ๋ํ๋ด๋ฉฐ ๋ฌด๊ฒฐ์ฑ์ ๋ณด์ฅํฉ๋๋ค.
โ ๊ธฐ๋ณธํค
primary key๋ ํ์ ๊ตฌ๋ถํ ์ ์๋ ์๋ณ์์ ๋๋ค.
์ด ๊ฐ์ ํ ์ด๋ธ์์ ์ ์ผํด์ผ ํ๋ฉฐ ์ค๋ณต ๊ฐ์ ๊ฐ์ง ์ ์์ต๋๋ค.
๋ณดํต ๋ฐ์ดํฐ ์์ , ์ญ์ , ์กฐํํ ๋ ์ฌ์ฉ
๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ๊ด๊ฒ๋ฅผ ๋งบ์ด ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์์ต๋๋ค.
์ด ํค๋ ์์ ๋์๋ ์๋๋ฉฐ, ์ ํจํ ๊ฐ์ผ๋ก, Null์ด ๋ ์ ์์ต๋๋ค.
โ ์ฟผ๋ฆฌ
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํ, ์ญ์ , ์์ฑ, ์์ ๊ฐ์ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ช ๋ น๋ฌธ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฉ ์ธ์ด๋ก SQL์ด ์์ต๋๋ค.
๐ ORM ์ด๋?
object-relational mapping์ ์ฝ์
์๋ฐ์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ ๋ง์น ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SQL์ ์ ํ ๋ชฐ๋ผ๋ ์๋ฐ ์ธ์ด๋ก๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํด์ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
์ฆ, ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด ์๋ฐ ์ธ์ด๋ก๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
โ ์ฅ์
1. SQL์ ์ง์ ์์ฑํ์ง ์๊ณ ์ฌ์ฉํ๋ ์ธ์ด๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.
2. ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ ๋น์ฆ๋์ค ๋ก์ง์๋ง ์ง์คํ ์ ์์ต๋๋ค.
3. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ด ์ถ์ํ๋์ด ์๊ธฐ ๋๋ฌธ์ MySQL -> PostgreSQL์ผ๋ก ์ ํํ๋ค๊ณ ํด๋ ์ถ๊ฐ๋ก ๋๋ ์์ ์ด ๊ฑฐ์ ์๋ค. ์ฆ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ํ ์ข ์์ฑ์ด ์ค์ด๋ญ๋๋ค.
4. ๋งคํํ๋ ์ ๋ณด๊ฐ ๋ช ํํจ์ผ๋ก ERD์ ๋ํ ์์กด๋๋ฅผ ๋ฎ์ถ ์ ์๊ณ ์ ์ง๋ณด์ํ ๋ ์ ๋ฆฌํฉ๋๋ค.
โ ๋จ์
1. ํ๋ก์ ํธ์ ๋ณต์ก์ฑ์ด ์ปค์ง์๋ก ์ฌ์ฉ ๋์ด๋ ์ฆ๊ฐ
2. ๋ณต์กํ๊ณ ๋ฌด๊ฑฐ์ด ์ฟผ๋ฆฌ๋ ORM์ผ๋ก ํด๊ฒฐ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
๐ JPA์ ํ์ด๋ฒ๋ค์ดํธ
์๋ฐ์์๋ JPA, ์ฆ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ ์ธํฐํ์ด์ค๋ฅผ ํ์ค์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ธํฐํ์ด์ค์ด๋ฏ๋ก ์ค์ ์ฌ์ฉ์ ์ํด์๋ ORM ํ๋ ์์ํด๋ฅด ์ถ๊ฐ๋ก ์ ํํด์ผ ํฉ๋๋ค.
๋ํ์ ์ผ๋ก ํ์ด๋ฒ๋ค์ดํธ (hibernate)๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
ํ์ด๋ฒ๋ค์ดํธ๋ JPA ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด์ด์, ์๋ฐ์ฉ ORM ํ๋ ์์ํฌ์ ๋๋ค.
๋ด๋ถ์ ์ผ๋ก๋ JDBC API๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ์ด๋ฒ๋ค์ดํธ์ ๋ชฉํ๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ข ๋ฅ์ ์๊ด์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ ์์ฌ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋๋ฐ์ ์์ต๋๋ค.
-> ์ ๋ฆฌ
JPA(Java Persistence API) : ์๋ฐ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํด ๋ฐ์ดํฐ ๊ด๋ฆฌ. ๊ฐ์ฒด ์งํฅ ๋๋ฉ์ธ ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ค๋ฆฌ ์ญํ
ํ์ด๋ฒ๋ค์ดํธ(hibernate) : JPA ์ธํฐํ์ด์ค ๊ตฌํ. ๋ด๋ถ์ ์ผ๋ก๋ JDBC API ์ฌ์ฉ
๐ ์ํฐํฐ ๋งค๋์ ๋?
โ ์ํฐํฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ๊ฐ์ฒด.
์ผ๋ฐ ๊ฐ์ฒด์ ๋ค๋ฅด์ง ์์ผ๋, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ์ง์ ์ฐ๊ฒฐ๋๋ค๋ ํน์ง์ผ๋ก ๊ตฌ๋ถ๋จ.
์ฆ, ์ํฐํฐ๋ ๊ฐ์ฒด์ด์ง๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํฅ์ ๋ฏธ์น๋ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ ๊ฐ์ฒด์ด๋ค.
โ ์ํฐํฐ ๋งค๋์
์ํฐํฐ๋ฅผ ๊ด๋ฆฌํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ดํ๋ฆฌ์ผ์ด์ ์ฌ์ด์์ ๊ฐ์ฒด๋ฅผ ์์ฑ, ์์ , ์ญ์ ํ๋ ๋ฑ์ ์ญํ
์ํฐํฐ ๋งค๋์ ๋ฅผ ๋ง๋๋ ๊ณณ์ ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ entity manager factory๋ผ๊ณ ํ๊ณ ํ๋ค.
์คํ๋ง ๋ถํธ ๋ด๋ถ์์๋ ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ๋ฅด ํ๋๋ง ์์ฑํด์ ๊ด๋ฆฌํ๊ณ
@PersistenceContext ๋๋ @Autowired๋ฅผ ์ฌ์ฉํด ์ํฐํฐ ๋งค๋์ ๋ฅผ ์ฌ์ฉํจ.
@PersistenceContext
EntitiyManager em; // ํ๋ก์ ์ํฐํฐ ๋งค๋์ . ํ์ํ ๋ ์ง์ง ์ํฐํฐ ๋งค๋์ ํธ์ถ
๋ํ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋น์ ํ๋๋ง ์์ฑํด์ ๊ณต์ ํ๊ธฐ ๋๋ฌด์ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋๋ฐ ์ด ๋๋ฌธ์
์ํฐํฐ ๋งค๋์ ๊ฐ ์๋ ์ค์ ์ํฐํฐ ๋งค๋์ ์ ์ฐ๊ฒฐํ๋ ํ๋ก์(๊ฐ์ง) ์ํฐํฐ ๋งค๋์ ๋ฅผ ์ฌ์ฉํจ.
ํ์ํ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ๋์ญ์ ๊ณผ ๊ด๋ จ๋ ์ค์ ์ํฐํฐ ๋งค๋์ ๋ฅผ ํธ์ถํจ.
๐ ์์์ฑ ์ปจํ ์คํธ๋?
์ํฐํฐ ๋งค๋์ ๋ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅํ๋ค๋ ํน์ง์ด ์์.
์์์ฑ ์ปจํ ์คํธ๋ JPA์ ์ค์ํ ํน์ง ์ค ํ๋์ธ, ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์์ ๊ณต๊ฐ์ ๋๋ค.
์ด๊ฒ์ด ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ํจ๊ณผ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ์ํฐํฐ๋ฅผ ํธํ๊ฒ ์ฌ์ฉํฉ๋๋ค.
์คํ๋ง๋ถํธ์์๋ ๋ฐ์ดํฐ ์กฐ์์ ์ํ ์ฟผ๋ฆฌ๋ฅผ ์๋ฐ ์ฝ๋๋ก ์์ฑํ๊ณ ์ด๋ฅผ JPA๊ฐ ์์์ ์ฟผ๋ฆฌ๋ก ๋ณ๊ฒฝํด์ฃผ๊ธฐ ๋๋ฌธ์ ํธ๋ฆฌ.
- ๊ธฐ๋ณธ์ ์ธ ํน์ง
โ 1์ฐจ ์บ์
์บ์์ ํค๋ ์ํฐํฐ์ @Id์ ๋ํ ์ด์ ์ด ๋ฌ๋ฆฐ ๊ธฐ๋ณธํค ์ญํ ์ ํ๋ ์๋ณ์์ด๋ฉฐ ๊ฐ์ ์ํฐํฐ์ด๋ค.
์ํฐํฐ๋ฅผ ์กฐํํ๋ฉด 1์ฐจ ์บ์์์ ๋ฐ์ดํฐ ์กฐํ, ๊ฐ์ด ์์ผ๋ฉด ๊ฐ์ ๋ฐํํ๋ค.
๊ฐ์ด ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์กฐํํด 1์ฐจ ์บ์์ ์ ์ฅํ ๋ค์ ๋ฐํํ๋ค.
์ด๋ฅผ ํตํด ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ๋์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ฑฐ์น์ง ์์๋ ๋์ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ ์กฐํ ๊ฐ๋ฅ
โ ์ฐ๊ธฐ ์ง์ฐ
transactional write-behind, ์ฐ๊ธฐ ์ง์ฐ์ ํธ๋์ญ์ ์ ์ปค๋ฐํ๊ธฐ ์ ๊น์ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ค์ ๋ก ์ง์๋ฌธ์ ๋ณด๋ด์ง ์๊ณ ์ฟผ๋ฆฌ๋ฅผ ๋ชจ์๋ค๊ฐ ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ฉด ๋ชจ์๋ ์ฟผ๋ฆฌ๋ฅผ ํ๋ฒ์ ์คํํ๋ ๊ฒ
์ ๋นํ ๋ฌถ์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฒญํ ์ ์์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ถ๋ด์ ์ค์ผ ์ ์๋ค.
โ ๋ณ๊ฒฝ ๊ฐ์ง
ํธ๋์ญ์ ์ ์ปค๋ฐํ๋ฉด 1์ฐจ ์บ์์ ์ ์ฅ๋์ด ์๋ ์ํฐํฐ์ ๊ฐ๊ณผ ํ์ฌ ์ํฐํฐ์ ๊ฐ์ ๋น๊ตํด์ ๋ณ๊ฒฝ ๋ ๊ฐ์ด ์์ผ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ๊ฐ์งํด ๋ณ๊ฒฝ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋์ผ๋ก ๋ฐ์.
์ฐ๊ธฐ ์ง์ฐ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋นํ ๋ฌถ์์ผ๋ก ์ฟผ๋ฆฌ ์์ฒญ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์คํ ์ ๋ถ๋ด์ ์ค์ผ ์ ์์ต๋๋ค.
โ ์ง์ฐ ๋ก๋ฉ
lazy loading, ์ง์ฐ ๋ก๋ฉ์ ์ฟผ๋ฆฌ๋ก ์์ฒญํ ๋ฐ์ดํฐ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ๋ก ๋ก๋ฉํ๋ ๊ฒ์ด ์๋๋ผ
ํ์ํ ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ ค ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ๊ฒ
(๋ฐ๋๋ก ์กฐํํ ๋ ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด ์ฐ๊ด๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ฆ์ ๋ก๋ฉ์ด๋ผ๊ณ ํจ)
๐ ์ํฐํฐ์ ์ํ
public class EntityManagerTest {
@Autowired
EntitiyManger em;
public void example() {
// 1. ๋น์์ ์ํ
Member member = enw Member(1L, "ํ๊ธธ๋");
// 2. ๊ด๋ฆฌ ์ํ
em.persist(member);
// 3. ๋ถ๋ฆฌ ์ํ
em.detach(member);
// 4. ์ญ์ ์ํ
em.remove(member);
}
}
โ ๋น์์ ์ํ
์ํฐํฐ๋ฅผ ์ฒ์ ๋ง๋ค๋ฉด ์ํฐํฐ๋ ๋น์์ ์ํ
์ํฐํฐ ๋งค๋์ ๊ฐ ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ์ง ์์ ์ํ๋ฅผ ๋งํ๋ค.
โ ๊ด๋ฆฌ ์ํ
persist() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ด ์ํ๋ก ๋ง๋ค ์ ์๋ค.
โ ๋ถ๋ฆฌ ์ํ
๋ง์ฝ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์์ ๊ด๋ฆฌํ๊ณ ์ถ์ง ์๋ค๋ฉด detach()๋ฉ์๋๋ฅผ ์ฌ์ฉํด์
๋ถ๋ฆฌํ ์ ์๋ค.
โ ์ญ์ ์ํ
๋ ์ด์ ๊ฐ์ฒด๊ฐ ํ์ ์๋ค๋ฉด remove() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ญ์ ๊ฐ๋ฅ
๐ ์คํ๋ง ๋ฐ์ดํฐ์ ์คํ๋ง ๋ฐ์ดํฐ JPA
์คํ๋ง ๋ฐ์ดํฐ spring data๋ ๋น์ฆ๋์ค ๋ก์ง์ ๋ ์ง์ค ํ ์ ์๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ ๊ธฐ๋ฅ์ ํด๋์ค ๋ ๋ฒจ์์ ์ถ์ํํจ.
์คํ๋ง ๋ฐ์ดํฐ์์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค๋ฅผ ํตํด์ ์คํ๋ง ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ด ์ธํฐํ์ด์ค๋ CRUD๋ฅผ ํฌํจํ ์ฌ๋ฌ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์๊ณ , ์์์ ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค์ด ์ค๋ค.
๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํน์ฑ์ ๋ง์ถฐ ๊ธฐ๋ฅ์ ํ์ฅํด ์ ๊ณตํ๋ ๊ธฐ์ ๋ ์ ๊ณตํ๋ค.
ํ์ค ์คํ์ธ JPA๋ ์คํ๋ง์์ ๊ตฌํํ ์คํ๋ง ๋ฐ์ดํฐ JPA๋ฅผ,
๋ชฝ๊ณ ๋๋น๋ ์คํ๋ง ๋ฐ์ดํฐ ๋ชฝ๊ณ ๋๋น๋ฅผ ์ฌ์ฉํ๋ค.
๐ ์คํ๋ง ๋ฐ์ดํฐ JPA๋?
์คํ๋ง ๋ฐ์ดํฐ์ ๊ณตํต์ ์ธ ๊ธฐ๋ฅ์์ JPA์ ์ ์ฉํ ๊ธฐ์ ์ด ์ถ๊ฐ๋ ๊ธฐ์ .
์คํ๋ง ๋ฐ์ดํฐ์ ์ธํฐํ์ด์ค์ธ PagingAndSortingRepository๋ฅผ ์์๋ฐ์ JpaRepository ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ฆ.
JPA๋ฅผ ๋ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋ ๋ฉ์๋ ์ ๊ณต
@PersistenceContext
EntityManager em;
public void join() {
// ๊ธฐ์กด์ ์ํฐํฐ ์ํ๋ฅผ ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ(๋ฉ์๋ ํธ์ถ์ ํด์ ์ํ ๋ณ๊ฒฝ)
Member member = new Member(1L, "ํ๊ธธ๋");
em.persist(member);
}
๊ธฐ๋ณธ CRUD ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ JpaRepository ์์ ์
public interface MemberRepository extends JpaRepository<Member, Long> {
}
๐ ์คํ๋ง ๋ฐ์ดํฐ JPA์์ ์ ๊ณตํ๋ ๋ฉ์๋
// ์์ฑ Create
memberRepository.save(new Member(1L, "A"));
// ์กฐํ Read
Optional<Member> member = memberRepository.findById(1L); // ๋จ๊ฑด ์กฐํ
List<Member> allMembers = memberRepository.findAll(); // ์ ์ฒด ์กฐํ
// ์ญ์ Delete
memberRepository.deleteById(1L);
1. save() : ๋ฐ์ดํฐ ๊ฐ์ฒด ์ ์ฅ
์ ๋ฌ ์ธ์๋ก ์ํฐํฐ Member๋ฅผ ๋๊ธฐ๋ฉด ๋ฐํ๊ฐ์ผ๋ก ์ ์ฅ๋ ์ํฐํฐ ๋ฐํ๋ฐ์ ์ ์์
2. findById() : id๋ฅผ ์ง์ ํด ์ํฐํฐ ํ๋ ์กฐํ ๊ฐ๋ฅ
findAll() : ์ ์ฒด ์ํฐํฐ ์กฐํ
3. deleteById() : id๋ฅผ ์ง์ ํ๋ฉด ํด๋น ์ํฐํฐ ์ญ์
(delete()๋ก ์ํฐํฐ๋ฅผ ์ ๋ฌ ์ธ์๋ก ๋๊ฒจ ์ญ์ ๊ฐ๋ฅ)
๐ ์ ๋ํ ์ด์ ์ญํ ์ ๋ฆฌ
โ @Entitiy : ์ํฐํฐ๋ก ์ง์
โ @NoArgsConstructor(access = AccessLevel.PROTECTED) // protected ์ ์ด์๋ฅผ ๊ฐ์ง ๊ธฐ๋ณธ ์์ฑ์ ์์ฑ
โ @Id : id ํ๋๋ฅผ ๊ฐ์ง ๊ธฐ๋ณธํค ์ง์
โ @GeneratedValue(strategy = GenerationType.IDENTITY) : ์๋ 1์ฉ ์ฆ๊ฐ
IDENTITY = AUTO_INCREMENT์ ๋์ผ
