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

๊ณต๋ถ€/ORM,JPA

[JPA] JPA๋ž€?

๐Ÿ“Œ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฐจ์ด

`๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋‹ค๋ฅด๋‹ค`

 

1. ์ƒ์†

 : ๊ฐ์ฒด๋Š” ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์žˆ์œผ๋‚˜, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.

2. ์—ฐ๊ด€๊ด€๊ณ„

 : ๊ฐ์ฒด๋Š” ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ฐธ์กฐ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค. (์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ getter๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ)

 : ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” Key๊ฐ’์œผ๋กœ join์„ ํ•ด์„œ ํ•„์š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์–ด ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

3. ๋ฐ์ดํ„ฐ ํƒ€์ž…

4. ๋ฐ์ดํ„ฐ ์‹๋ณ„ ๋ฐฉ๋ฒ•

 

๐Ÿค” ์ฐจ์ด์ ๋“ค๋กœ, ๊ฐ์ฒด ๋ชจ๋ธ๋ง์„ ํ•  ์ˆ˜๋ก ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๋งคํ•‘ ํ•˜๋Š” ์ž‘์—…์ด ๋Š˜์–ด๋‚œ๋‹ค. 

โ“ ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆœ ์—†์„๊นŒ?? - JPA!

 

๐Ÿ“Œ JPA(Java persistence API)

์ž๋ฐ” ์ง„์˜์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•ด์ค€๋‹ค.

โœ” ORM(Object-relational mapping - ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘)

 - ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Œ€๋กœ, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Œ€๋กœ ์„ค๊ณ„

 - ORM ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ค‘๊ฐ„์—์„œ ๋งคํ•‘

โœ” JPA ๋™์ž‘

- jpa๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ  jdbc ์‚ฌ์ด์—์„œ ๋™์ž‘ํ•œ๋‹ค.

- jpa์— ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด, JPA๋Š” Entity ๋ถ„์„ํ•ด ํ•ด๋‹น SQL์„ ์ƒ์„ฑํ•œ๋‹ค.

- SQL ์ƒ์„ฑ ํ›„ JDBC API๋ฅผ ์‚ฌ์šฉํ•ด, ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ˜ํ™˜๋ฐ›๋Š”๋‹ค.

 

๐Ÿค” [์ค‘์š”] JPA๋Š” query๋ฅผ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , jpa์—์„œ ๋งŒ๋“ค์–ด์ค€๋‹ค๋Š” ๊ฒƒ๊ณผ, ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค.

 

๐Ÿ“Œ JPA๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

1. ์ƒ์‚ฐ์„ฑ

  - JPA๊ฐ€ CRUD๋ฅผ ์ง€์›ํ•ด์ค€๋‹ค.

  - ์ €์žฅ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ

 

2. ์œ ์ง€๋ณด์ˆ˜

 : ๊ธฐ์กด์—๋Š” ํ•„๋“œ ๋ณ€๊ฒฝ์‹œ ๋ชจ๋“  SQL์„ ์ˆ˜์ •ํ•ด์•ผํ•œ๋‹ค.

 - JPA๋Š” ํ•„๋“œ๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด, SQL์€ jPA๊ฐ€ ์ฒ˜๋ฆฌํ•ด์ค€๋‹ค.

 

3. JPA์™€ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ

 

4. JPA์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ

 

โœ” 1์ฐจ ์บ์‹œ์™€ ๋™์ผ์„ฑ ๋ณด์žฅ

String memberId = "100";
Member m1 = jpa.find(Member.class, memberId);
Member m2 = jpa.find(Member.class, memberId);

println(m1 == m2);

- m2๋Š” m1์„ ๋ณต์ œํ•ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋นจ๋ผ์ง„๋‹ค.

 

โœ” ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋Š” ์“ฐ๊ธฐ ์ง€์—ฐ(transactional write-behind)

  - ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•  ๋•Œ INSERT SQL์„ ๋ชจ์•„์„œ ๋ณด๋‚ธ๋‹ค.

  - (ํ•˜๋‚˜ํ•˜๋‚˜ ๋ณด๋‚ด๋ฉด ํ•˜๋‚˜์”ฉ ๋„คํŠธ์›Œํฌ๋ฅผ ํƒ€๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜์˜ ์›์ธ์ด ๋ ์ˆ˜๋„.)

 

โœ” ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading) / ์ฆ‰์‹œ ๋กœ๋”ฉ

 - ์ง€์—ฐ ๋กœ๋”ฉ : ๊ฐ์ฒด๊ฐ€ ์‹ค์ œ ์‚ฌ์šฉ๋  ๋•Œ ๋กœ๋”ฉ

 - ์ฆ‰์‹œ ๋กœ๋”ฉ : JOIN SQL๋กœ ํ•œ๋ฒˆ์— ์—ฐ๊ด€๋œ ๊ฐ์ฒด๊นŒ์ง€ ๋ฏธ๋ฆฌ ์กฐํšŒ

 

๐Ÿค” ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ, ์ฆ‰์‹œ ๋กœ๋”ฉ ์˜ต์…˜์„ ๋ฐ”๊ฟ”์„œ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

 

REFERENCE


https://www.inflearn.com/course/ORM-JPA-Basic/dashboard

 

์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

JPA๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๊ฑฐ๋‚˜, ์‹ค๋ฌด์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๊ธฐ๋ณธ ์ด๋ก ์ด ๋ถ€์กฑํ•˜์‹  ๋ถ„๋“ค์ด JPA์˜ ๊ธฐ๋ณธ ์ด๋ก ์„ ํƒ„ํƒ„ํ•˜๊ฒŒ ํ•™์Šตํ•ด์„œ ์ดˆ๋ณด์ž๋„ ์‹ค๋ฌด์—์„œ ์ž์‹ ์žˆ๊ฒŒ JPA๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ๋ณธ ๊ฐ•์˜๋Š” ์ž๋ฐ” ๋ฐฑ์—”

www.inflearn.com

 

300x250

'๊ณต๋ถ€ > ORM,JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JPA] JPA ์‹œ์ž‘, ํ”„๋กœ์ ํŠธ ์„ค์ • ๋ฐ H2,JPA ์„ค์ •  (0) 2021.11.22