Spring JPA - DoDaek/freelec-springboot2-webservice GitHub Wiki
- ํ๋์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ( RDB, Relational Database ) ๋ ๋น ์ง ์ ์๋ ์์
- ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ด๋ฆฌํ๋ ๊ฒ์ด ๋ฌด์๋ณด๋ค ์ค์
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๊ณ์ํด์ ์น ์๋น์ค์ ์ค์ฌ์ด ๋๋ฉด์ ๋ชจ๋ ์ฝ๋๋ SQL ์ค์ฌ์ด ๋์ด๊ฐ๋๋ค.
-
ํ์ ํ๋ก์ ํธ ๋๋ถ๋ถ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ณด๋ค SQL๋ก ๊ฐ๋ํ๊ฒ ๋ ๊ฒ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ SQL๋ง ์ธ์ํ ์ ์๊ธฐ ๋๋ฌธ
- ๊ฐ ํ ์ด๋ธ๋ง๋ค ๊ธฐ๋ณธ์ ์ธ CRUD ( Create, Read, Update, Delete ) SQL์ ๋งค๋ฒ ์์ฑํด์ผ ํ๋ค.
- ์๋ฅผ ๋ค์ด User ๊ฐ์ฒด๋ฅผ ํ ์ด๋ธ๋ก ๊ด๋ฆฌํ๋ค๋ฉด
insert into user ( id, name, ... ) values ( ... ); select * from user where ...; update user set ... where ...; delete from user where ...;
-
๊ฐ๋ฐ์๊ฐ ์๋ฌด๋ฆฌ ์๋ฐ ํด๋์ค๋ฅผ ์๋ฆ๋ต๊ฒ ์ค๊ณํด๋, SQL์ ํตํด์ผ๋ง ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ ๋ฐ ์กฐํ
-
์ค์ ํ์ ์์๋ ์์ญ, ์๋ฐฑ ๊ฐ์ ํ ์ด๋ธ์ด ์๋๋ฐ, ์ด ํ ์ด๋ธ์ ๋ช ๋ฐฐ์ SQL์ ๋ง๋ค๊ณ ์ ์ง๋ณด์ํด์ผ๋ง ํ๋ค.
โ ์คํธ๋ ์ค
-
๋จ์ ๋ฐ๋ณต ์์ ์ ๋ฌธ์ ์ธ์๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ ์๋ค.
- ํจ๋ฌ๋ค์ ๋ถ์ผ์น ๋ฌธ์
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ง์ ์ด์ ์ด ๋ง์ถฐ์ง ๊ธฐ์
- ๋ฐ๋๋ก ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๋ฉ์์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธฐ๋ฅ๊ณผ ์์ฑ์ ํ ๊ณณ์์ ๊ด๋ฆฌํ๋ ๊ธฐ์
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํจ๋ฌ๋ค์์ด ์๋ก ๋ค๋ฅธ๋ฐ, ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ค๊ณ ํ๋ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. โ ํจ๋ฌ๋ค์ ๋ถ์ผ์น
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๋ถ๋ชจ๊ฐ ๋๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
User user = findUser();
Group group = user.getGroup();
- ๋๊ตฌ๋ ๋ช ํํ๊ฒ User์ Group์ ๋ถ๋ชจ-์์ ๊ด๊ณ์์ ์ ์ ์์ต๋๋ค.
User
๊ฐ ๋ณธ์ธ์ด ์ํGroup
์ ๊ฐ์ ธ์จ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.- ํ์ง๋ง ์ฌ๊ธฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ์ถ๊ฐ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
User user = userDao.findUser();
Group group = groupDao.findGroup(user.getGroupId());
-
User
๋ฐ๋ก,Group
๋ฐ๋ก ์กฐํํ๊ฒ ๋ฉ๋๋ค. -
User
์Group
์ด ์ด๋ค ๊ด๊ณ์ธ์ง ์ ์ ์์๊น์? -
์์, 1:N ๋ฑ ๋ค์ํ ๊ฐ์ฒด ๋ชจ๋ธ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ ๊ตฌํํ ์ ์์ต๋๋ค.
โ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์๋ง ์ง์คํ๊ฒ ๋ฉ๋๋ค.
- JPA๋ ์๋ก ์งํฅํ๋ ๋ฐ๊ฐ ๋ค๋ฅธ 2๊ฐ ์์ญ ( ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ) ์ ์ค๊ฐ์์ ํจ๋ฌ๋ค์ ์ผ์น๋ฅผ ์์ผ์ฃผ๊ธฐ ์ํ ๊ธฐ์
- ๊ฐ๋ฐ์๋ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ , JPA๊ฐ ์ด๋ฅผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ง๊ฒ SQL์ ๋์ ์์ฑํด์ ์คํํฉ๋๋ค.
- ๊ฐ๋ฐ์๋ ํญ์ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฝ๋๋ฅผ ํํํ ์ ์๋๋ ๋๋ SQL์ ์ข ์์ ์ธ ๊ฐ๋ฐ์ ํ์ง ์์๋ ๋ฉ๋๋ค.
Spring Data JPA
-
JPA๋ ์ธํฐํ์ด์ค๋ก์ ์๋ฐ ํ์ค๋ช ์ธ์์ ๋๋ค.
-
์ธํฐํ์ด์ค์ธ JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๊ตฌํ์ฒด๊ฐ ํ์ํฉ๋๋ค.
โ ๋ํ์ ์ผ๋ก Hibernate, Eclipse Link ๋ฑ
-
ํ์ง๋ง Spring์์ JPA๋ฅผ ์ฌ์ฉํ ๋๋ ์ด ๊ตฌํ์ฒด๋ค์ ์ง์ ๋ค๋ฃจ์ง ์์ต๋๋ค.
โ ๊ตฌํ์ฒด๋ค์ ์ข ๋ ์ฝ๊ฒ ์ฌ์ฉํ๊ณ ์ ์ถ์ํ์ํจ Spring Data JPA๋ผ๋ ๋ชจ๋์ ์ด์ฉํ์ฌ JPA ๊ธฐ์ ์ ๋ค๋ฃฌ๋ค.
-
Hibernate๋ฅผ ์ฐ๋ ๊ฒ๊ณผ Spring Data JPA๋ฅผ ์ฐ๋ ๊ฒ ์ฌ์ด์๋ ํฐ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
-
๊ทธ๋ผ์๋ ์คํ๋ง ์ง์์์๋ Spring Data JPA๋ฅผ ๊ฐ๋ฐํ๊ณ , ์ด๋ฅผ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
-
ํ ๋จ๊ณ ๋ ๊ฐ์ธ๋์ Spring Data JPA๊ฐ ๋ฑ์ฅํ ์ด์
- ๊ตฌํ์ฒด ๊ต์ฒด์ ์ฉ์ด์ฑ
- ์ ์ฅ์ ๊ต์ฒด์ ์ฉ์ด์ฑ
๊ตฌํ์ฒด ๊ต์ฒด์ ์ฉ์ด์ฑ
-
Hibernate ์ธ์ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ก ์ฝ๊ฒ ๊ต์ฒดํ๊ธฐ ์ํจ
-
Hibernate๊ฐ ์ธ์ ๊ฐ ์๋ช ์ ๋คํด์ ์๋ก์ด JPA ๊ตฌํ์ฒด๊ฐ ๋์ธ๋ก ๋ ์ค๋ฅผ ๋, Spring Data JPA๋ฅผ ์ฐ๋ ์ค์ด๋ผ๋ฉด ์์ฃผ ์ฝ๊ฒ ๊ต์ฒดํ ์ ์์ต๋๋ค.
-
Spring Data JPA ๋ด๋ถ์์ ๊ตฌํ์ฒด ๋งคํ์ ์ง์ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
โ ์๋ฐ์ Redis ํด๋ผ์ด์ธํธ๊ฐ Jedis์์ Lettuce๋ก ๋์ธ๊ฐ ๋์ด๊ฐ ๋ Spring Data Redis๋ฅผ ์ฐ์ ๋ถ๋ค์ ์์ฃผ ์ฝ๊ฒ ๊ต์ฒด๋ฅผ ํ์ต๋๋ค.
์ ์ฅ์ ๊ต์ฒด์ ์ฉ์ด์ฑ
-
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ์ ๋ค๋ฅธ ์ ์ฅ์๋ก ์ฝ๊ฒ ๊ต์ฒดํ๊ธฐ ์ํจ
-
์๋น์ค ์ด๊ธฐ์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌํ์ง๋ง, ์ ์ ํธ๋ํฝ์ด ๋ง์์ ธ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก๋ ๋์ ํ ๊ฐ๋น์ด ์ ๋ ๋๊ฐ ์ฌ ์ ์์ต๋๋ค.
โ MongoDB๋ก ๊ต์ฒด๊ฐ ํ์ํ๋ค๋ฉด ๊ฐ๋ฐ์๋ Spring Data JPA์์ Spring Data MongoDB๋ก ์์กด์ฑ๋ง ๊ต์ฒดํ๋ฉด ๋ฉ๋๋ค.
โ Spring Data์ ํ์ ํ๋ก์ ํธ๋ค์ ๊ธฐ๋ณต์ ์ธ CRUD์ ์ธํฐํ์ด์ค๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋๋ค.