JPA ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์ํ ์ด์
@PersistenceContext
private EntityManager entityManager;
public User getUser(Long userId) {
User user = entityManager.find(User.class, userId);
return user; // JPA๊ฐ ๋ด๋ถ์ ์ผ๋ก ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ฆฌํ๋ ์
์ ํตํด ํ๋ ๊ฐ์ ์ค์
}
ํด๋น ๊ณผ์ ์ ์ดํด ๋ณด๋ฉด entityManager.find ์ฆ, ์กฐํ ๊ณผ์ ์์ User.class ํ์ ์ ์ธ์๋ก ๋ฐ๊ณ ์๋ค.
์ด User.class ์ด ํด๋์ค ์ ๋ณด๋ก ๋ด๋ถ์ ์ ๋ํ ์ด์ ์ด๋ ํ๋ ์์ฑ์ ๋ฑ์ ์ ๋ณด๋ฅผ ๋ฆฌํ๋ ์ ์ ํตํด ์ป์ ์ ์๊ฒ ๋๋ค.
๊ทธ๋ฌ๋ฉด ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ DB์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์๊ฒ ๋๋ค. ์ด๋, ๋์์ค๋ ๋ฐ์ดํฐ๋ฅผ ๋ด์์ฃผ๊ธฐ ์ํด ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํด ๊ฐ์ ๋ด์์ฃผ๊ฒ ๋๋ค. ๊ทธ๋ผ ์ด ๊ธฐ๋ณธ ์์ฑ์๋ ์ด๋ป๊ฒ ๋ง๋ค์ด์ฃผ๋๊ฐ? ๊ทธ๊ฑด class์ ๋ณด๋ฅผ ๋๊ธฐ๋ฉด์ ๋ด๋ถ์ ์ผ๋ก ํด๋น ํด๋์ค์ ์์ฑ์์ ์ ๋ณด ๋ํ ์ ์ ์๊ฒ ๋๋ค. ๊ทธ๋ผ ์ธ๋ถ์์ ํด๋น ํด๋์ค์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ๊ฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
๊ฒฐ๋ก ์, ๋ฆฌํ๋ ์ ์ ํ์ฉํด ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๊ฐ์ง๊ณ ํด๋์ค๋ฅผ ๋ง๋ค์ด ๊ฐ์ฒด๋ก ๋ด์์ ์ฃผ๊ธฐ ๋๋ฌธ์ ํ์ํจ.
์ฐธ๊ณ ๋ก ํด๋น ๊ธฐ๋ณธ ์์ฑ์๋ public ๋๋ protected ์ ๊ทผ ์ ์ด์๋ฅผ ๊ฐ์ ธ์ผ ํ๋ค.
์ด ๋ํ,
Spring Data JPA ์์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์ํ ์ด์
Spring Data JPA์์๋ ์์ ์ฝ๋์ ๊ฐ์ด EntityManager๋ฅผ ์ง์ ๋ง๋ค์ง ์๊ณ ์๋์ผ๋ก ๋ง๋ค์ด์ค.
์ฆ, ์์ ์ฝ๋๋ค์ ์๋์ผ๋ก ๋ง๋ค์ด์ ์ ๊ณต์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋์ผํ๊ฒ ๊ธฐ๋ณธ์์ฑ์๊ฐ ํ์ํ๋ค.
์ฐธ๊ณ ๋ก JPA๋ Spring Data JPA์์๋ ๋งค ์์ฒญ๋ง๋ค ์์์ฑ ์ปจํ ์คํธ์ EntityManager๋ฅผ ๋ง๋ค์ด์ ์ ๊ณต์ ํด์ค๋ค.
๋ด๊ฐ ์ ์ด ๋ถ๋ถ์ ๋ํด์ ์๊ฒ ๋์๋ ๋ณด๋ฉด
๋๋ ํ๋ก์ ํธ ๋น์ JPA๋ฅผ ํ์ฉํ์ฌ Entityํด๋์ค๋ฅผ ์์ฑํ๊ณ , ํด๋น ํด๋์ค์ ๊ฐ์ ๋ฃ์ด DB์ insert๋ฅผ ํด์ฃผ๋ ๋ก์ง์ ์งฐ์๋ค. ์ด๋, ๋๋ Entity์ ํ๋๊ฐ ๋ง์ ์์ฑ์๋ฅผ ํตํด ๊ฐ์ ๋ฃ์ด์ฃผ๊ธฐ์๋ ๋ฐ์ดํฐ ํ๋ํ๋์ ๋ํ ๋ช ํํจ์ด ํ์ํ๋ค๊ณ ํ๋จ์ด ๋์ด Builder ํจํด์ ํ์ฉํ์ฌ ๊ฐ์ ๋ฃ์ด์ค์ผ๊ฒ ๋ค๊ณ ํ๋จ์ ํ๊ฒ ๋์๋ค.
์ดํ, Lombok์ @Builder ์ ๋ํ ์ด์ ์ ํ์ฉํ์ฌ, Builder ํจํด์ ์ฝ๊ฒ ๊ตฌํํ์ฌ ๊ฐ์ ๋ฃ์ด์ฃผ๊ฒ ๋์๋๋ฐ ์ด๋ ๋๋ ์๋ฌธ์ด ๋ค์๋ค. ๋ด๊ฐ ์๋ Builderํจํด์ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก private์ผ๋ก ๋ง๋๋๊ฒ ์ผ๋ฐ์ ์ธ๋ฐ, JPA์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ธฐ๋ณธ์์ฑ์๊ฐ ํ์ํ๋ฉด์ ํด๋น ๊ธฐ๋ณธ ์์ฑ์๋ public ์ ๊ทผ ์ ์ด์ ์ด์ด์ผ ํ๋ค๋ ๋ถ๋ถ์์ ๋ชจ์์ ๋๊ผ๋ค.
Builder ํจํด์์ ๊ธฐ๋ณธ ์์ฑ์๋ฅผ private์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ ์ด์
์ ์ด์ builderํจํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ ๋งค๊ฐ๋ณ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ํ์ฉ์ ํ๊ฒ ๋๊ณ , ๊ทธ ๊ณผ์ ์์ ๊ธฐ๋ณธ ์์ฑ์๋ private์ผ๋ก ์ค์ ํ์ง ์๊ณ public์ผ๋ก ์ด์ด๋๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์์ฑ์ ๋ฐ Builder ๋ฐฉ์ ์ด 2๊ฐ์ง๊ฐ ๋๊ฒ ๋๋ค. ์ด๋ฌ๋ฉด ๊ฐ์ฒด ์์ฑ์ ์ผ๊ด์ฑ๊ณผ Builder ํจํด์ ์๋๊ฐ ์์ค์ด ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๊ฒฐ๊ตญ JPA Entity ํด๋์ค์์ Builderํจํด์ ์ฌ์ฉํ๋ ค๋ฉด ๊ธฐ๋ณธ์์ฑ์๋ฅผ ๋ฃ์ด์ผํ๋ค.
๊ทธ๋ ๋ค๋ฉด, ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ Builder ๋ฐ ์์ฑ์ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ๊ณต์กดํ๊ฒ ๋๋ฉด์ ์ผ๊ด์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ค.
์ด ๋ถ๋ถ์์ ์ป์ ์ ์๋ ๋ต์ JPA Entity ํด๋์ค์์๋ public ๊ธฐ๋ณธ ์์ฑ์๋ฅผ ํ์ฉํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.
๊ฒฐ๋ก ์ JPA Entity ํด๋์ค์์๋ Builder ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ฉ ์ข์ ๋ฐฉ๋ฒ์ ์๋ ๊ฒ ๊ฐ๋ค. ์งํฅํ๋๊ฒ ์ข์๋ฏ
'๐ ๏ธBackend > ๐ณSpring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Framework] DispatcherServle (0) | 2025.05.12 |
---|---|
[Spring Security] UsernamePasswordAuthenticationFilter (0) | 2025.05.07 |
[Spring Framework] IoC ์ปจํ ์ด๋ ๋์ ์๋ฆฌ (0) | 2024.11.14 |
[Spring MVC] ์์ฒญ๊ณผ ์๋ต์ ๋ํ ๋์ ์๋ฆฌ (1) | 2024.11.05 |
[Spring Framework] IoC ์ปจํ ์ด๋ & Bean ๊ฐ๋ ์ดํด ํ๊ธฐ (1) | 2024.10.21 |