JPA์ EntityManager ( ๋งค๋์ก~)
JPA : ์๋ฐ์์ ๊ด๊ณํ DB ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ ์ํ interface
Hibernate: JPA ๊ตฌํ์ฒด. (JPA๋ ์ธํฐํ์ด์ค๋๊น ๊ตฌํ์ฒด ํ์) ๋ด๋ถ์ ์ผ๋ก๋ JDBC API ์ฌ์ฉ
JPA ์ฃผ์ ์ปจ์
- ์ํฐํฐ ๋งค๋์
- ์์์ฑ
์ํฐํฐ(Entity)?
DB ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ๊ฐ์ฒด. query๋ฅผ ์คํํ๋ ๊ฐ์ฒด.
์๋ฐ ๊ฐ์ฒด๋ ๊ฐ์. ๊ทผ๋ฐ DB์ ํ ์ด๋ธ์ด๋ ์ง์ ์ฐ๊ฒฐ๋๋ ํน๋ณํ ์ ๋ผ์ entity๋ผ๊ณ ๊ตฌ๋ถ์ง์ด์ ๋ถ๋ฌ์ฃผ๋๊ฒ
์ํฐํฐ ๋งค๋์ (Entity Manager)?
๋ง ๊ทธ๋๋ก ์ํฐํฐ ๊ด๋ฆฌ, DB๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ด์์ ๊ฐ์ฒด ๋ง๋ค๊ณ ์์ ํ๊ณ ์ญ์ ํ๊ณ ..๋ท๋ฐ๋ผ์งํจ
ex) ํ์ 2๋ช ์ด์ ๋์์ ํ์๊ฐ์ ํ๋ ค๋ ๊ฒฝ์ฐ (=๋์์ DB ์ ๊ทผํ๋ ค๋ ๊ฒฝ์ฐ)
ํ์A์ ์์ฒญ์ ๋ํด ์ํฐํฐ ๋ฉ๋์ ํฉํ ๋ฆฌ๊ฐ ์ํฐํฐ ๋งค๋์ ์์ฑ, ์ด๋ฅผ ํตํด DB ์ ํ์์ ๋ณด ์ ์ฅ
ํ์B๋ ๋ง์ฐฌ๊ฐ์ง.
์ํฐํฐ ๋งค๋์ 2๊ฐ๋ ํ์ํ ์์ ์ DB ๋ ์ฐ๊ฒฐํ ๋ค ์ฟผ๋ฆฌํจ.
๊ทธ๋ ๋ค๋ฉด SpringBoot์์ ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ ๋ง๋ค์ด์ ๊ด๋ฆฌํ๋? X!!!!
์คํ๋ง๋ถํธ ๋ด๋ถ์์ ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ 1๊ฐ๋ง ์์ฑํ๊ณ ๊ด๋ฆฌํจ.
@PersistenceContext ๋๋ @Autowired ์ ๋ํ ์ด์ ์จ์ ์ํฐํฐ ๋งค๋์ ์ฌ์ฉํจ.
๊ทธ๋ฆฌ๊ณ ์คํ๋ง๋ถํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋น ํ๋๋ง ๋ง๋ค์ด์ ๊ณต์ ํ๋ค๊ณ ํจ
-> ๋น์ฐํ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์.
-> ์งญ ์ํฐํฐ ๋งค๋์ ์ (ในใ ์ํฐํฐ ๋งค๋์ ๋ ์ฐ๊ฒฐํ๋ ํ๋ก์)
= ํ์ํ ๋ DB ํธ๋์ญ์ ์ด๋ ๊ด๋ จ๋ ในใ ์ํฐํฐ ๋งค๋์ ํธ์ถํ๋ ๊ฑฐ์.
์์์ฑ ์ปจํ ์คํธ๋?
์คํฐํฐ ๋งค๋์ ๋ ์ํฐํฐ๋ฅผ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅํ๋ค๋ ํน์ง์ด ์์
์์์ฑ ์ปจํ ์คํธ๋, ์ํฐํฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์์ ๊ณต๊ฐ์ (์ผ์ข ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ)
์๋ฅผ ๋ค์ด memberRepository.save(member)ํ๊ฒ ๋๋ฉด,
Member๊ฐ์ฒด๊ฐ ์์์ฑ ์ปจํ ์คํธ์ ์ ์ฅ๋๊ณ , ์ํฐํฐ ๋งค๋์ ๊ฐ ๊ด๋ฆฌ ์์ํจ
-> ์์ง DB ์ ์ ์ฅ๋๊ฑฐ ์๋๋ค!!!!!!
ํธ๋์ญ์ ๋๋๊ธฐ ์ ๊น์ง๋ ์ด ์ปจํ ์คํธ ์์์ ๊ด๋ฆฌ ๋นํ๋๊ฑฐ์ (๋ณ๊ฒฝ๊ฐ์ง, ์ฐ๊ธฐ ์ง์ฐ๊ฐ์๊ฒ ์ด๋ ์ฌ์ฉ)
@Transactional๋๋๋ ์์ ์!! ๋น๋ก์ DB์ ๋ฐ์๋จ & ์์์ฑ ์ปจํ ์คํธ flush๋จ
Q. "์์ฑ ์ปจํ ์คํธ๊ฐ ์๊ธฐ ๋๋ฌธ์ DB์์ ํจ์จ์ ์ผ๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ฌ ์ ์๋ฐ" ๋ผ๊ณ ์ฑ ์ ๋์ด์์
์ด๊ฑฐ ๋ณด๊ณ ๋จผ๋ง์ธ๊ฐ...์ถ์๋๊ฒ, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ๋ผ๋ฉด ๋จธ๊ฐ ๋๋ DB์ ์ ๊ทผํด์ผ๋๋๋ฐ ๋ญ๊ฐ ํจ์จ์ ? ์ด๋ฐ ์๊ฐ์ด ๋ค์์
๊ทผ๋ฐ, ์์์ฑ ์ปจํ ์คํธ์ ํน์ง ์ค์
1์ฐจ ์บ์ ํน์ง์ด ์์.
์ด๊ฒ ๋จผ๋ง์ด๋๋ฉด, ๋ง๊ทธ๋๋ก ์์์ฑ ์ปจํ ์คํธ๊ฐ 1์ฐจ ์บ์ ์ญํ ์ ํด์ฃผ๊ธฐ ๋๋ฌธ์,
DB์์ ์กฐํํ ์ํฐํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด ๋๋๊ฒ
Member member1 = memberRepository.findById(1L); // ์ฒ์ ์กฐํ -> DB์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ด
Member member2 = memberRepository.findById(1L); // ๊ฐ์ ํธ๋์ญ์
์์์ ๋ ์กฐํ
์ด๋ฐ ๋๋..
๊ทธ๋ ๋ค๋ฉด ๋น์ฐํ? DB ์ ๊ทผ ํ์๊ฐ ๊ฐ์๋๋๊น ํจ์จ์ ์ด๋ผ๋๊ฒ!!!
----> ๊ทธ๋ ๋ค๋ฉด @Transactional ์ ๋ํ ์ด์ ๋ด์์๋ง ์ ์ฉํ๊ฑฐ ์๋๋?
-------> ๋ง์!!!!!!
์์์ฑ ์ปจํ ์คํธ๋ ํธ๋์ญ์ ๋จ์๋ก ๊ด๋ฆฌ๋จ.
๋ฐ๋ผ์ @Transactional๋ก ๋ฌถ์ธ ๋ฉ์๋ ์์์๋ง 1์ฐจ ์บ์์ ํจ๊ณผ๋ฅผ ๋๋ฆด ์ ์์.
๋ฐ๋ผ์ @Transactional ์ ๋ํ ์ด์ ์ ์ฐ์๊ตฌ์, ์์ฐ๋ฉด ์์ ์ด ์์ ๋ฅผ ํ ๋ DB ์ ๊ทผ ๋๋ฒํด์ผ๋จ.
์ด๊ฑฐ ์ธ์ ์์์ฑ ์ปจํ ์คํธ์ ํน์ง
- 1์ฐจ ์บ์ : ์์์ ์ค๋ช
- ์ฐ๊ธฐ ์ง์ฐ : ํธ๋์ญ์ ์ปค๋ฐ ์ ๊น์ง ์ฟผ๋ฆฌ๋ฅผ ๋ชจ์๋จ๋ค๊ฐ ํ๋ฐฉ์ ์คํํ๋๊ฒ -> DB์ ๋ถ๋ด ์ค์ผ ์ ์์
- ๋ณ๊ฒฝ ๊ฐ์ง : ํธ๋์ญ์ ์ปค๋ฐํ๋ฉด, 1์ฐจ ์บ์์ ์ ์ฅ๋ผ์๋ entity๋ ํ์ฌ entity ๋น๊ต, ๋ณ๊ฒฝ์ฌํญ ์์์ ๊ฐ์งํด์ DB์ ์๋ ๋ฐ์.
- ์ง์ฐ ๋ก๋ฉ : ์ฟผ๋ฆฌ๋ก ์์ฒญํ ๋ฐ์ดํฐ ๋ฐ๋ก ๋ก๋ฉํ๋๊ฒ ์๋๋ผ, ํ์ํ ๋ ์ฟผ๋ฆฌ ๋ ๋ ค์ ์กฐํํ๋๊ฒ.
-> ์ ๋ถ DB ์ ๊ทผ ์ต์ํ๋ฅผ ์ํ ํน์ง์.
'Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring Boot]@RequiredArgsConstructor๋? (0) | 2025.05.03 |
|---|---|
| [Spring Boot]Entity, Dto, Repository ํท๊ฐ๋ฆฌ๋ ์ฌ๋ ์ค์ธ์ (0) | 2025.05.03 |
| [Spring Boot]@Builder ์ ๋ํ ์ด์ ์ ๋ํด ์์๋ณด์, ์์ (0) | 2025.05.03 |
| [Spring Boot] API์ REST API๊ฐ ๋ญ๊น? ์ฝ๊ฒ ์ค๋ช ํด์ค (1) | 2025.05.03 |
| [Spring Boot]๋ง์ด ์ฐ์ด๋ ์ ๋ํ ์ด์ ์ ์ ์ ๋ฆฌ (0) | 2025.05.03 |