JPA #1 ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ
by JiwonDev# ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ
๋จ์ํ ์๊ฐํ๋ฉด ๊ฐ์ฒด๋ฅผ SQL์ ํตํด ํ ์ด๋ธ๋ก ์ด๋ฃจ์ด์ง ๊ด๊ณํ DB์ ์ ์ฅํ๋๊ฒ ์์ ๊ฐ์ ๋ฌธ์ ์ ์์ธ์ด๊ธด ํฉ๋๋ค. ํ์ง๋ง ๊ด๊ณํ DB ๋ง๊ณ ๋ '๊ฐ์ฒด'๋ฅผ ์ ์ฅํ ๋ง๋ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฌผ๋ก ๋ฏธ๋์๋ NoSQL๋ ๋์์ด ๋ ์ ์๊ฒ ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์ค์ํ๊ณ ๋ณต์กํ ์๋น์ค์ ์ ์ฉํ๊ธฐ์๋ ๊ด๊ณํ DB์ ๋นํด ๋ถ์กฑํ ์ ์ด ๋ง์๊ฒ ํ์ค์ ๋๋ค.
# ๊ธฐ์กด Java DB (JDBC)
JPA๋ฅผ ์ฌ์ฉํ์ง ์๋, SQL ํ๋ํ๋ ์์ฑํ๋ ์์ ๋ก ๋์๊ฐ๊ณ ์ถ์ง ์๋ค.
๊ธฐ์กด์๋ ์๋ฐ ์ฝ๋ ๋ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผํ๊ณ ์ ํ๋ฉด SQL๋ฌธ์ ์ง์ ์์ฑํ์ฌ ์ฌ์ฉํ์์ต๋๋ค.
๋ฌผ๋ก ์ฝ๊ฒ ์ฌ์ฉํ๋ ค๊ณ jdbc template, framework๋ฑ์ ์ฌ์ฉํ๊ธด ํ์ง๋ง, ์ง์ SQL๋ฌธ์ ์์ฑํ๋ ๊ฑด ๋ง์ฐฌ๊ฐ์ง์์ต๋๋ค.
# ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ๋ฒ
๋จ์ํ ์๊ฐํ๋ฉด ์๋ฐ์ ๊ฐ์ฒด๋ฅผ ํ ์ด๋ธ๋ก ์ด๋ฃจ์ด์ง ๊ด๊ณํ DB์ ์ ์ฅํ๋๊ฒ ์์ ๊ฐ์ ๋ฌธ์ ์ ์์ธ์ด๊ธด ํฉ๋๋ค. ํ์ง๋ง ๊ด๊ณํ DB ๋ง๊ณ ๋ '๊ฐ์ฒด'๋ฅผ ์ ์ฅํ ๋ง๋ ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฌผ๋ก ๋ฏธ๋์๋ NoSQL๋ ๋์์ด ๋ ์ ์๊ฒ ์ง๋ง, ๋ฐ์ดํฐ๊ฐ ์ค์ํ๊ณ ๋ณต์กํ ์๋น์ค์ ์ ์ฉํ๊ธฐ์๋ ๊ด๊ณํ DB์ ๋นํด ๋ถ์กฑํ ์ ์ด ๋ง์๊ฒ ํ์ค์ ๋๋ค.
ํ์ง๋ง ๊ด๊ณํ DB์๋ ์ ์ด์ ์์, ์ฐ๊ด ๊ด๊ณ๋ผ๋ ๊ฐ๋ ์ด ์๊ณ ๋ง๋ค๊ธฐ๋ ์ด๋ ต๋ค๋ ํฐ ๋ฌธ์ ๊ฐ ์์ฃ .
# ๊ธฐ์กด JDBC์ ๋ฌธ์ ์
์ต๊ทผ ๋ค์ด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ, NoSQL๋ฑ ์ฌ๋ฌ๊ฐ์ง ๋๊ตฌ๋ค์ด ๋ง์ด ๋์์ง๋ง ๊ฒฐ๊ตญ ๊ฒฐ์ , ์ฃผ๋ฌธ๋ฐ์ดํฐ ๊ฐ์ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋์๋ ๋๋ถ๋ถ '๊ฐ์ฒด์งํฅ ์ธ์ด'์ '๊ด๊ณํ DB'๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. ์ฆ ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ DB์ ์ ์ฅํด์ผ ํฉ๋๋ค. ์ด๋ ์ฝ๋์ ๋๋ถ๋ถ์ด SQL๋ฌธ์ผ๋ก ๋๋ฐฐ ๋ ์ ๋ฐ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๊ธฐ๋ฅ์ ํ๋ ์ถ๊ฐํด์ ํ ์ด๋ธ์ ๋ง๋ค๋ฉด CRUD (Create, Read, Update, Delete)๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ง๋ค์ด์ผ ํ๊ณ ํ ์ด๋ธ๋ง๋ค ๋ฐ๋ณต์ ์ธ SQL๋ฌธ์ ์์ฑํ๊ณ ํ ์คํธํด์ผ ํจ์ ๋ณํจ ์์์ต๋๋ค. ๋ฌผ๋ก ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋งคํ์์ ์ ์ค์ผ ์ ์์ง๋ง, ํ ์ด๋ธ ํ๋๋ฅผ ์์ , ์ถ๊ฐํ ๋ ํ๋ ํ๋ ๋ฐ๋ณต์ ์ธ ์ฝ๋ ์์ ์ ํด์ผํ๋ ๊ฑด ๋๊ฐ์์ต๋๋ค.
๋ถ๋ช ์ฐ๋ฆฌ๋ '๊ฐ์ฒด์งํฅ' ๊ฐ๋ ์ ์ฌ์ฉํด์ ์ถ์ํ, ์บก์ํ, ์ ๋ณด์๋, ์์, ๋คํ์ฑ..๋ฑ ๋ง์ ๊ฐ๋ ์ ์๊ณ ์์ง๋ง ์ด๋ฐ SQL ์์กด์ ์ธ ๊ฐ๋ฐ ์์ ์ ๊ฐ์ฒด์งํฅ์ด ์งํฅํ๋ ์ฝ๋์ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ์ด์ก์ฃ .
์ฆ ์๋ฌด๋ฆฌ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์์กด์ฑ์ ๋ถ๋ฆฌํ๊ณ ์ถ์์ ์ผ๋ก ๋ง๋ค์ด ์ ์ง๋ณด์์ ํ์ฅ์ฑ์ ๋์ธ๋ค๊ณ ํ๋ค, DB์ ์ ์ฅํ๋ ์๊ฐ์๋ SQL๋ฌธ ๋ ธ๊ฐ๋ค๋ก ํ๋ํ๋ ์ฐ๊ฒฐํด์ ์๋ฏธ๊ฐ ์์ด์ง๋ค๋ ๋ง์ ๋๋ค.
# ํ์ค์ ์ธ ์ด๋ ค์, ๊ฐ์ฒด -> DB
๊ด๊ณํ DB์ JAVA์ ๊ฐ์ฒด์ ๊ฐ์ด ์์, ์ฐ๊ด ๊ด๊ณ๋ฅผ ์ ์ฉ ์ํค๋ ๊ฑด ์ ๋ ์ฝ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด DB์ ์ํผ,์๋ธํ์ ์ ์ด์ฉํด์ ๋ค์๊ณผ ๊ฐ์ด ์ต๋ํ ๊ฐ์ฒด์ ๋น์ทํ๊ฒ ๊ตฌ์ฑํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค.
์ค์ ํ ์ด๋ธ์ด 2๊ฐ๋ก ๋๋์ด์ ธ ์์ผ๋ ALBUM ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ค๊ณ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
1. ๊ฐ์ฒด(Album)์ ํ
์ด๋ธ์ ๋ง์ถฐ ITEM, ALBUM์ผ๋ก ๋ถํด
2. Insert Into ITEM
3. Insert Into ALBUM
์ด๋ ๊ฒ ๋๋์ด ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น์?
MOVIE ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๋ ค๋ฉด MOVIE์ ITEM์ Join ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ Movie ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํด...
์ฝ๋ ๊ตฌํ์ ๋์งธ์น๊ณ ์ค๋ช ํ๋ ๊ฒ ์์ฒด๋ ํ๋ญ๋๋ค. ์ค์ํ ๊ฑด ์ด ๊ณผ์ ์ ๊ฐ๊ฐ์ ํ ์ด๋ธ๋ง๋ค ๋ฐ๋ณต์ ์ผ๋ก ๊ตฌํํด์ค์ผ ํ๋ค๋ ์ ์ด์ฃ . ๋ฌผ๋ก ์ค์ํ๊ธฐ ์ฌ์ฐ๋ ๊ฐ๊ฐ ํ ์คํธ๋ฅผ ํด์ค์ผ ํ๋ ๊ฒ์ ๋น์ฐํ ๊ณผ์ ์ด๊ตฌ์.
์ฌ์ค ์ด ์์ ์ ์๋ฐ ๋ด์์๋ง ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ ๋ง ์ฝ๊ณ ๊น๋ํ๊ฒ ์ฌ์ฉ ํ ์ ์์ต๋๋ค. ํ์ง๋ง SQL์ ๋งคํํ๋ ์๊ฐ ์ฝ๋๊ฐ ์ ๋ง ๋ณต์กํด์ง๊ณ ๋ฐ๋ณต์ด ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ถ์ํ..๋คํ์ฑ.. ์ด๋ฐ๊ฒ ๋ค ์๋ฏธ๊ฐ ์์ด์ง๋ค๋ ๋ง์ด์ฃ .
// ์์ ์๋ฐ๋ง ์ฌ์ฉํ ๋ฐ์ดํฐ ์ถ๊ฐ, ์กฐํ์ฝ๋
// album ์ถ๊ฐ
list.add(album)
// ์กฐํ, album ๊ฐ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์กฐํ
Album album = list.get(albumID);
// ๋ถ๋ชจ ํ์
(Item-album)์ผ๋ก ์กฐํ ํ ๋คํ์ฑ ํ์ฉ๊ฐ๋ฅ
Item item = list.get(albumID);
# JPA ( Java Persistence API )
์ด๋ฌํ ๋ถํธํ ์ ์ ํด๊ฒฐํ๊ธฐ์ํด ์๋ฐ์งํ์์๋ ORM ๊ธฐ์ (Object Relational Mapping, ๊ฐ์ฒด - RDB ๋งคํ ๊ธฐ์ ) ์ ๋ง๋ค๊ธฐ ์ํด ์ฌ๋ฌ๊ฐ์ ์๋๋ฅผ ํ์๊ณ , ๋น์ ์ ๋ช ํ๋ ์คํ์์ค 'Hibernate'์ ORM ๊ธฐ์ ์ ๊ฐ์ ธ์ ์๋ฐ ํ์ค์ผ๋ก ๋ง๋ ๊ฒ์ด ๋ฐ๋ก JPA์ ๋๋ค.
JPA๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ฒด๋ต๊ฒ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฒ ํด์ค๋๋ค. ๊ฐ๋ฐ์๋ SQL๋ฌธ์ ๊ฑฐ์ ์์ฑํ์ง ์๊ณ ๊ด๊ณํDB์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ ์ ์๊ฒ ๋์์ฃ .
ํ์ง๋ง JPA๊ฐ ๋์จ์ง ์ค๋๋์๊ณ ์ ์ธ๊ณ์ ์ผ๋ก ์ฌ์ฉ๋ฅ ์ด ์๋์ ์์๋ ๋ถ๊ตฌํ๊ณ 2015๋ ๊น์ง ํ๊ตญ(+์ค๊ตญ)์์๋ JPA๋ฅผ ์ฐ๊ธฐ ๊บผ๋ คํ์ต๋๋ค. ์ ๊ทธ๋ฌ์๊น์?
# ์ค๋ฌด์์ JPA๋ฅผ ์ ์ฉํ๊ธฐ ์ด๋ ค์ด ์ด์
๋ค. ์์ญ ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฝ๋, SQL๋ฌธ๋ค์ ํ, ๋ ์ค๋ก ๋ฐ๊ฟ ์ ์๋ ๊ฒ์ด JPA์ ๋๋ค.
ํ์ง๋ง ๊ทธ๋งํผ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ธฐ์ ์ ๋๋ก ๋ฐฐ์์ผ ํฉ๋๋ค. ์ค๋ฌด์์๋ ์์ ์ฒ๋ผ ํ ์ด๋ธ ํ ๋๊ฐ๊ฐ ๋์๊ฐ์ง ์์ต๋๋ค. ์์ญ ๊ฐ ์ด์์ ๋ณต์กํ ๊ฐ์ฒด์ ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค. JPA์ ์ฝ๋๊ฐ ์งง์ ๋งํผ, ์ฑ๋ฅ์ด์๋ ์ฅ์ ์ํฉ์ด ๋ฐ์ ํ์์ ๋ ๊ธฐ์กด์ SQL๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ ๋ณด๋ค ํด๊ฒฐํ๊ธฐ ์๋นํ ์ด๋ ค์์ง๋๋ค.
JPA๋ฅผ ์ ๋ง ์ ์ฐ๊ธฐ ์ํด์๋
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ธฐ์ด ๊ฐ๋ ๊ณผ ๊ฐ์ฒด์ ํ ์ด๋ธ์ ๋งคํ์ ํ ์ค ์์์ผํฉ๋๋ค.
2. JPA ์ฝ๋์ ๋ด๋ถ ๋์๊ณผ ๊ทธ ์ฝ๋๊ฐ ์ด๋ ํ SQL๋ฌธ์ด ์์ฑ๋๋์ง ์ดํดํด์ผ ํฉ๋๋ค.
3. JPA๋ฅผ ์ ์ฐ๋ ๋ฐฉ๋ฒ๊ณผ ๋ง๋ค์ด์ง SQL๋ฅผ ์ธ์ ์คํํ๋์ง ์ดํดํ์ฌ์ผ ํฉ๋๋ค.
๋ฌผ๋ก ๋ง์ด ์ฝ์ง, JPA๋ ํ์ค ๋ฌธ์๊ฐ 500p๊ฐ ๋์ ์ ๋๋ก ๋ด์ฉ์ด ๋ฐฉ๋ํฉ๋๋ค. ํ์ง๋ง ํ๋ฒ๋ง ์ ๋๋ก ๋ฐฐ์ ๋๋๋ค๋ฉด ์ฌ๋ฌ๋ถ์ ์๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ๋ฐ์ ํฌ์ํ ์๊ฐ์ ์๋ฐฑ, ์์ฒ ์๊ฐ์ ์ค์ผ ์ ์๋ค๋ ๊ฑด ํ์คํฉ๋๋ค.
ํ๊ตญ์์ ์ฌ์ฉ๋์ด ๋ฎ์๋ ์ด์ ๋ JPA์ ๊ด๋ จ๋ ๊ณต์๋ฌธ์๋ค์ด ์ ๋ถ ๋ฑ๋ฑํ ์์ด๋ก ์ ํ์์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋์ ์์ด๋ฅผ ์ํ๊ฑฐ๋ ๊ฐ๋ฐ์ ์ ๋ง ๊ด์ฌ์ด ๋ง์ ์์๋ง ์ฌ์ฉํด์ค๋ค๊ฐ, 2015๋ ์ ๋ค์ด์ ๋ค์ํ JPA ์๋ฃ๊ฐ ๋์ค๋ฉด์ ์ฌ์ฉ๋ฅ ์ด ๊ธ์ฆํ๊ณ ์์ฃ .
# ์ค๋ฌด์์์ JPA
์คํ๋ง์ ๊ธฐ๋ณธ์ ์ผ๋ก JPA๋ฅผ ์ฌ์ฉํ๊ณ , ๋๊ธฐ์ ๋ค(์ฐ์ํํ์ ๋ค, ์ฟ ํก, ์นด์นด์ค, ๋ค์ด๋ฒ)์ ๋ฌผ๋ก ์ด๊ณ ์กฐ ๋จ์ ๊ฑฐ๋๊ธ์ก์ด ๋ฐ์ํ๋ ๋ค์ํ ์๋น์ค์์๋ JPA๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด์ JPA๋ ์๋ฐ์ ๊ธฐ๋ณธ ๊ธฐ์ ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค.
SQL์ด๋ DB์ ๋์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฅด๋ฉด์ ์ ํ ๋ชจ๋ฅด๋ฉด์ ์ถ์ํ๋ JPA๋ฅผ ์ฐ๋ ๊ฑด ์๋นํ ์ํํฉ๋๋ค. ๋ฌธ์ ๊ฐ ์ผ์ด๋ฌ์ ๋ ์ ๊ทธ๋ฐ์ง ์ฐพ๋๊ฒ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํ์ฃ . ๊ทธ๋์ JPA์ ํ์ต๋์ด๋๊ฐ ์ฝ๋ค๊ณ ๋งํ๊ธด ์ด๋ ต์ง๋ง, ํ๋ฒ ์ ๋๋ก ๋ฐฐ์ ๋๋๋ค๋ฉด ๋จ์ํ SQL ๋ ธ๊ฐ๋ค์ ๋ญ๋น๋๋ ์๊ฐ์ ๋ฐ์ดํฐ ์ค๊ณ ๊ณ ๋ฏผ, ํ ์คํธ ์ฝ๋ ์์ฑ์ ์์ผ๋ฉฐ ์ง์ ํ ๊ฐ๋ฐ์ ์ฆ๊ฑฐ์์ ๋๋ฆด ์ ์์ต๋๋ค.
'๐ฑBackend > JDBC & JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
JPA #6 ๋ค์ํ ์ฐ๊ด๊ด๊ณ ๋งคํ (1:N, N:1, N:N) (0) | 2021.11.09 |
---|---|
JPA #5 ๋ฐ์ดํฐ ์ค์ฌ ์ค๊ณ์ ๋ฌธ์ ์ , ์ฐ๊ด ๊ด๊ณ ๋งคํ (0) | 2021.11.09 |
JPA #4 ์ํฐํฐ ๋งคํ (๊ฐ์ฒด-ํ ์ด๋ธ ๋งคํ) (0) | 2021.11.08 |
JPA #3 ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ, ์์์ฑ ์ปจํ ์คํธ (0) | 2021.11.07 |
JPA #2 ๋ณธ๊ฒฉ์ ์ผ๋ก ์์๋ณด์. (0) | 2021.11.07 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev