๐ŸŒ WEB/JPA

2. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹

์• ์ •์“ฐ 2021. 5. 13. 11:50

JPA์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€

- ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งคํ•‘ํ•˜๊ธฐ

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

 

JPA ๊ธฐ๋ณธ - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

 

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋ญ˜๊นŒ?

JPA๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์šฉ์–ด์ด๋‹ค. "์—”ํ‹ฐํ‹ฐ๋ฅผ ์˜๊ตฌ ์ €์žฅํ•˜๋Š” ํ™˜๊ฒฝ"์ด๋ผ๋Š” ๋œป. -> EntityManager.persist(entity);

- persist๋Š” ์‚ฌ์‹ค DB์— ์ €์žฅํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  Entity๋ฅผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

- ๋…ผ๋ฆฌ์ ์ธ ๊ฐœ๋…์œผ๋กœ ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค. EntityManager๋ฅผ ํ†ตํ•ด์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•œ๋‹ค.

- ์—ฌ๋Ÿฌ๊ฐœ์˜ EntityManager๊ฐ€ ํ•˜๋‚˜์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ฐ”๋ผ๋ณธ๋‹ค.

 

์—”ํ‹ฐํ‹ฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

๋น„์˜์†

- ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์ „ํ˜€ ๊ด€๊ณ„๊ณผ ์—†๋Š” ์ƒˆ๋กœ์šด ์ƒํƒœ

์˜์†

- ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ๊ด€๋ฆฌ๋˜๋Š” ์ƒํƒœ

์ค€์˜์†

- ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ €์žฅ๋˜์—ˆ๋‹ค๊ฐ€ ๋ถ„๋ฆฌ๋œ ์ƒํƒœ

์‚ญ์ œ

- ์‚ญ์ œ๋œ ์ƒํƒœ

 

//๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ์ƒํƒœ(๋น„์˜์†)
Member member = new Member();
member.setId("member1");
member.setUsername("์• ์ •");

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

//๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ ์ƒํƒœ(์˜์†)
em.persist(member);

persist๋ฅผ ํ•œ๋‹ค๊ณ  ํ•ด์„œ DB์— ์ฟผ๋ฆฌ๊ฐ€ ๋‚ ๋ผ๊ฐ€๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ . ํŠธ๋ Œ์ ์…˜์— ์ปค๋ฐ‹ํ•˜๋Š”์ˆœ๊ฐ„์— ๋‚ ๋ผ๊ฐ„๋‹ค.

 

์™œ์ด๋Ÿฐ ์ด์ƒํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ• ๊นŒ?

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์ ์„ ๋ˆ„๋ฆฐ๋‹ค.

- 1์ฐจ ์บ์‹œ

์กฐํšŒ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋˜์—ˆ์„ ๋•Œ 1์ฐจ ์บ์‹œ์—์„œ ๋จผ์ € ์กฐํšŒํ•œ๋‹ค. -> ์—†์œผ๋ฉด DB์—์„œ ์กฐํšŒ -> 1์ฐจ ์บ์‹œ์— ์ €์žฅ

์ฟผ๋ฆฌ๋ฅผ ์ €์žฅํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๊ณ  ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ์ €์žฅ ์ฆ‰ ๊ฐ์ฒด ์ €์žฅํ•œ๋‹ค (1์ฐจ ์บ์‹œ์— ์ €์žฅ)-> ๋ฐ”๋กœ ์กฐํšŒํ•œ๋‹ค(1์ฐจ ์บ์‹œ์—์„œ ์กฐํšŒ) 

 

- ๋™์ผ์„ฑ ๋ณด์žฅ

1์ฐจ ์บ์‹œ๋กœ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์ฝ๊ธฐ ๋“ฑ๊ธ‰์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฐจ์›์—์„œ ์ œ๊ณตํ•œ๋‹ค.

1์ฐจ ์บ์‹œ๊ฐ€ ์žˆ์Œ์œผ๋กœ ์ธํ•ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

- ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ

JPA ๊ธฐ๋ณธ - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

์˜์† ์ปจํ…์ŠคํŠธ ์•ˆ์—๋Š” 1์ฐจ์บ์‹œ, ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ๊ฐ€ ์žˆ๋‹ค

persist๊ฐ€ ๋˜๋Š” ์ˆœ๊ฐ„ 1์ฐจ์บ์‹œ์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ , ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— ์ฟผ๋ฆฌ๋ฅผ ์ €์žฅํ•œ๋‹ค.

JPA ๊ธฐ๋ณธ - ๊น€์˜ํ•œ / ์ธํ”„๋Ÿฐ

-> transaction.commit(); ์„ ํ•˜๋Š” ์ˆœ๊ฐ„ ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ ์—์„œ flush๋ฅผ ํ•˜์—ฌ DB๋กœ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฐ๋‹ค.

 

- ๋ณ€๊ฒฝ ๊ฐ์ง€

1. ์—”ํ‹ฐํ‹ฐ์™€ ์Šคํƒญ์ƒท ๋น„๊ตํ•œ๋‹ค. -> ์ด ๋•Œ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•œ๋‹ค.

2. UPDATE SQL ์ƒ์„ฑ ํ•˜์—ฌ ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— ์ €์žฅ

 

- ์ง€์—ฐ ๋กœ๋”ฉ

 

ํ”Œ๋Ÿฌ์‹œ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€๊ฒฝ๋‚ด์šฉ์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ˜์˜

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋น„์šฐ์ง€ ์•Š๋Š”๋‹ค.

ํŠธ๋žœ์žญ์…˜์ด๋ผ๋Š” ์ž‘์—… ๋‹จ์œ„๊ฐ€ ์ค‘์š” - ์ปค๋ฐ‹ ์ง์ „์—๋งŒ ๋™๊ธฐํ™” ํ•˜๋ฉด ๋จ

 

ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฌด์Šจ์ผ์ด ์ƒ๊ธธ๊นŒ?

- ๋ณ€๊ฒฝ ๊ฐ์ง€

- ์ˆ˜์ •๋œ ์—”ํ‹ฐํ‹ฐ ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์— ๋“ฑ๋ก

- ํŠธ๋ Œ์ ์…˜ ์ปค๋ฐ‹์ด ๋˜๋ฉด ์“ฐ๊ธฐ ์ง€์—ฐ SQL ์ €์žฅ์†Œ์˜ ์ฟผ๋ฆฌ๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „์†ก

 

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜?

em.flush() - ์ง์ ‘ ํ˜ธ์ถœ

ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ - ํ”Œ๋Ÿฌ์‹œ ์ž๋™ ํ˜ธ์ถœ

JPQL ์ฟผ๋ฆฌ ์‹คํ–‰ - ํ”Œ๋Ÿฌ์‹œ ์ž๋™ ํ˜ธ์ถœ

 - ์•„๋ž˜์™€ ๊ฐ™์ด persist๋ฅผ ํ•˜๊ณ  ํ”Œ๋Ÿฌ์‹œ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ์—์„œ JPQL์ด ์‹คํ–‰๋˜๋ฉด ์กฐํšŒ๊ฐ€ ์•ˆ๋˜๋‹ˆ๊นŒ(DB์— ๋ฐ˜์˜์ด ์•ˆ๋˜์„œ) 

   ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์  ๋•Œ๋ฌธ์— JPA ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ์ž๋™์œผ๋กœ ํ”Œ๋Ÿฌ์‹œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ค€์˜์† ์ƒํƒœ

์˜์† -> ์ค€์˜์†

์˜์† ์ƒํƒœ์˜ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๋ถ„๋ฆฌํ•œ๋‹ค.

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉ ๋ชปํ•œ๋‹ค.

 

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ• ๊นŒ?

em.datach(entity) -> ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋งŒ ์ค€์˜์† ์ƒํƒœ๋กœ ์ „ํ™˜

em.clear() -> EntityManager ์•ˆ์— ์žˆ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ์ง€์šด๋‹ค. (์ดˆ๊ธฐํ™”)

em.close() -> ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค.

๋ฐ˜์‘ํ˜•