๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
TIL

01/31(์ˆ˜) ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ Java 28์ผ์ฐจ TIL - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

by ๊ฐ์ž๊ฐœ๋ฐœ๊พผ 2024. 1. 31.

 

๐Ÿ“–  ์˜ค๋Š˜์˜ ํ•™์Šต ํ‚ค์›Œ๋“œ

  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

 

๐Ÿฅ”  ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€?

- Persistence๋ฅผ ํ•œ๊ธ€๋กœ ๋ฒˆ์—ญํ•˜๋ฉด ์˜์†์„ฑ, ์ง€์†์„ฑ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

Persistence๋ฅผ ๊ฐ์ฒด์˜ ๊ด€์ ์œผ๋กœ ํ•ด์„ํ•ด ๋ณด์ž๋ฉด ๊ฐ์ฒด๊ฐ€ ์ƒ๋ช…(๊ฐ์ฒด๊ฐ€ ์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„)์ด๋‚˜ ๊ณต๊ฐ„(๊ฐ์ฒด์˜ ์œ„์น˜)์„ ์ž์œ ๋กญ๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์˜ ์„ฑ์งˆ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” JPA๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์šฉ์–ด์ด๋‹ค.

  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…
  • ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š์Œ
  • ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผ
์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ข€ ๋” ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•ด ๋ณด์ž๋ฉด Entity ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

  • ๋น„์˜์†(new/transient) : ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ „ํ˜€ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ
  • ์˜์†(managed) : ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ
  • ์ค€์˜์†(detached) : ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ
  • ์‚ญ์ œ(remove) : ์‚ญ์ œ๋œ ์ƒํƒœ

 

๐Ÿฅ”  EntityManager

- ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•˜์—ฌ Entity ๊ฐ์ฒด๋“ค์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” EntityManager ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

- EntityManager ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Entity ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€๋ฆฌ์ž์ž…๋‹ˆ๋‹ค.

  • ๊ฐœ๋ฐœ์ž๋“ค์€ EntityManager๋ฅผ ์‚ฌ์šฉํ•ด์„œ Entity๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒํ•˜๊ณ  ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • EntityManager๋Š” EntityManagerFactory๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿฅ”  EntityManagerFactory

  • EntityManagerFactory๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ DB ํ•˜๋‚˜์— ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • EntityManagerFactory๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” DB์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    • ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” /resources/META-INF/ ์œ„์น˜์— persistence.xml ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด ์ •๋ณด๋ฅผ ๋„ฃ์–ด๋‘๋ฉด ๋ฉ๋‹ˆ๋‹ค.
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
EntityManager em = emf.createEntityManager();
  • EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");
  • ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด JPA๋Š” persistence.xml ์˜ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ EntityManagerFactory๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • EntityManager em = emf.createEntityManager(); ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด EntityManagerFactory๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ EntityManager๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿฅ”  ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ด์ 

1. 1์ฐจ ์บ์‹œ

- ์˜์†์„ฑ ๋‚ด๋ถ€์—๋Š” 1์ฐจ ์บ์‹œ๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์˜์† ์ƒํƒœ์˜ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ด๊ณณ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ–ˆ์„ ๋•Œ,

- 1์ฐจ ์บ์‹œ์— ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด DB๋ฅผ ์ฐพ์•„๋ณด์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

 

2. ์˜์† ์—”ํ‹ฐํ‹ฐ์˜ ๋™์ผ์„ฑ ๋ณด์žฅ

Member a = em.find(Member.class, "member1");
Member b = em.find(Member.class, "member1");

System.out.println(a==b) // true

 

3. ์“ฐ๊ธฐ ์ง€์—ฐ

EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
//์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์‹œ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
transaction.begin(); // transaction ์‹œ์ž‘

em.persist(memberA);
em.persist(memberB);
// ์—ฌ๊ธฐ๊นŒ์ง€๋Š” INSERT ๋ฌธ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด๋‚ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

// ์ปค๋ฐ‹ํ•˜๋Š” ์ˆœ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— INSERT ๋ฌธ์„ ๋ณด๋‚ธ๋‹ค.
transaction.commit(); // ์ปค๋ฐ‹

 

4. Dirty Checking (๋ณ€๊ฒฝ ๊ฐ์ง€)

EntityManager em = emf.createEntityManager();
EntityTransaction transaction = em.getTransaction();
transaction.begin(); // transaction ์‹œ์ž‘

// ์˜์† ์—”ํ‹ฐํ‹ฐ ์กฐํšŒ
Member memberA = em.find(Member.class, "memberA");

// ์˜์† ์—”ํ‹ฐํ‹ฐ ๋ฐ์ดํ„ฐ ์ˆ˜์ •
memberA.setUsername("hi");
memberA.setAge(10);

transaction.commit(); // ์ปค๋ฐ‹

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•ด์„œ ํ•ด๋‹น ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ,

์กฐํšŒํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋‹ค์‹œ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์ง€๋งŒ, ๊ทธ๋Ÿฐ ์ฝ”๋“œ๊ฐ€ ์—†์–ด๋„

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋‚ด์˜ ์Šค๋ƒ…์ƒท๊ณผ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋น„๊ตํ•ด ๋ณ€๊ฒฝ๋œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์žˆ์œผ๋ฉด Update ์ฟผ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ“š  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ.. ๋ณต์Šตํ•ฉ์‹œ๋‹ค