Backend/JPA

[JPA] SQL ์ค‘์‹ฌ์  ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ ๊ณผ JPA๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

2024. 2. 8. 14:55
๋ชฉ์ฐจ
  1. ๐Ÿค”Why ?
  2. โœ” SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ 
  3. โœ” JPA - Java Persistence API
  4. ๐Ÿ”Ž JPA๋Š” ํ‘œ์ค€ ๋ช…์„ธ
  5. ๐Ÿ”Ž JPA๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
  6. ๐Ÿ”Ž JPA์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ
  7. ๐Ÿ”Ž ORM ? - Object-relational mapping(๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘)
  8. ๐Ÿ”Ž JPA Process ( ์ €์žฅ, ์กฐํšŒ )
  9. ๐Ÿ“Œ์š”์•ฝ

 

๐Ÿค”Why ?

๊ตญ๋น„ํ•™์› ์ปค๋ฆฌํ˜๋Ÿผ์„ ๋”ฐ๋ผ ๊ณต๋ถ€ํ•˜๋ฉฐ ๊ณ„์† ๋“œ๋Š” ์ƒ๊ฐ์ด ์žˆ์—ˆ๋‹ค.
๐Ÿ’ก ์ด๊ฑฐ ๋„ˆ๋ฌด ๋ถˆํŽธํ•œ๋ฐ?
๐Ÿ’ก ๋” ํŽธํ•œ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

 

๐Ÿ“Œ ์ฒซ ํ”„๋กœ์ ํŠธ

JDBC api๋ฅผ ์‚ฌ์šฉํ•ด์„œ query๋ฌธ์„ ์ •ํ™•ํ•˜๊ฒŒ ํ•œ๋•€ํ•œ๋•€ ์ž…๋ ฅํ•˜์—ฌ ์ฒ˜๋ฆฌํ–ˆ๋‹ค

๐Ÿ“Œ ๋‘๋ฒˆ์งธ ํ”„๋กœ์ ํŠธ

sql Mapper(MyBatis)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ ์ฝ”๋“œ๋Š” ์ค„์—ˆ์ง€๋งŒ query๋ฌธ์— ์ง‘์ค‘๋˜์–ด์žˆ๊ณ , ์ƒ์‚ฐ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค๋Š” ์ ์€ ๊ฐ™์•˜๋‹ค.

 

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๋งŽ์€๋ถ€๋ถ„์„ ๋งก๊ฒŒ๋˜์–ด ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋‹ˆ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด์–ธ๊ฐ€ ์ ˆ์ฐจ๊ฐ€ ๋งŽ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค.

์šฐ์—ฐํžˆ JPA์†Œ๊ฐœ ๊ฐ•์ขŒ๋ฅผ ๋“ฃ๊ฒŒ๋˜์—ˆ๊ณ  ์ด๋ ‡๊ฒŒ ํŽธํ•˜๊ฒŒ? ์ด๋ ‡๊ฒŒ ๋นจ๋ฆฌ? ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์„ค๋ ˆ์ž„์— ๋ฐ”๋กœ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜๊ฒŒ๋˜์—ˆ๋‹ค.

 

๐Ÿ’ป์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ (๊น€์˜ํ•œ๋‹˜)


โœ” SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ 

  • SQL์— ์˜์กด์ ์ธ ๊ฐœ๋ฐœ
    ๋ฐ˜๋ณต ( java๊ฐ์ฒด -> sql๊ฐ์ฒด -> java๊ฐ์ฒด -> ... ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณต )
  • ํ…Œ์ด๋ธ”์— ๋งž์ถ˜ ๊ฐ์ฒด ๋ชจ๋ธ๋ง ๋ฌธ์ œ์  ( ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ€ ์•„๋‹Œ Id๊ฐ’์„ ๊ฐ€์ง€๊ณ ์žˆ๋‹ค )
  • ๊ฐ์ฒด๋‹ค์šด ๋ชจ๋ธ๋ง์˜ ๋ฌธ์ œ์  ( ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๋กœ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ๋Š”๋‹ค )
    ์ฝ”๋“œ๊ฐ€ ๋ฒˆ์žกํ•ด์ง€๊ณ , ๋“ฑ๋ก๊ณผ ์ˆ˜์ •์ด ๊นŒ๋‹ค๋กญ๋‹ค.
    ๊ฐ์ฒด๋Š” ์ž์œ ๋กญ๊ฒŒ ๊ฐ์ฒด๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค, ์ฒ˜์Œ ์‹คํ–‰ํ•œ sql์— ๋”ฐ๋ผ์„œ ํƒ์ƒ‰ ๋ฒ”์œ„๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜ ๊ด€์ ์—์„œ ๋‹ค์Œ ๊ณ„์ธต์„ ๋ฏฟ๊ณ  ์“ธ ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ ๊ทธ๋ ‡์ง€ ๋ชปํ•˜ ๊ฒŒ ๋˜์–ด ์‹ ๋ขฐ๋„๊ฐ€ ๊นจ์ง„๋‹ค.

 

โœ” JPA - Java Persistence API

๐Ÿ”Ž JPA๋Š” ํ‘œ์ค€ ๋ช…์„ธ

  • ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ชจ์Œ
  • ํ‘œ์ค€ ๋ช…์„ธ๋ฅผ ๊ตฌํ˜„ํ•œ 3๊ฐ€์ง€ ๊ตฌํ˜„์ฒด - ํ•˜์ด๋ฒ„๋„ค์ดํŠธ, EclipseLink, DataNucleus

 

๐Ÿ”Ž JPA๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

  • SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœ
  • ์ƒ์‚ฐ์„ฑ, ์œ ์ง€๋ณด์ˆ˜
  • ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ ( ์ƒ์†, ์—ฐ๊ด€๊ด€๊ณ„, ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰, ๋น„๊ต )
  • ์„ฑ๋Šฅ
  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ถ”์ƒํ™”์™€ ๋ฒค๋” ๋…๋ฆฝ์„ฑ
  • ํ‘œ์ค€

 

๐Ÿ”Ž JPA์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ

๐Ÿ’ก 1์ฐจ ์บ์‹œ์™€ ๋™์ผ์„ฑ(identity)๋ณด์žฅ

๊ฐ™์€ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ๋Š” ๊ฐ™์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋ฐ˜ํ™˜ - ์•ฝ๊ฐ„์˜ ์กฐํšŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ

String memberId = "100";
Member m1 = jpa.find(Memeber.class, memberId); //SQL
Member m2 = jpa.find(Memeber.class, memberId); //์บ์‹œ
// m1 == m2 true

 

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

ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•  ๋•Œ๊นŒ์ง€ INSERT SQL์„ ๋ชจ์Œ
JDBC BATCH SQL๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ํ•œ๋ฒˆ์— SQL ์ „์†ก

transaction.begin(); // ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
 em.persist(memberA);
 em.persist(memberB);
 em.persist(memberC);
 //์—ฌ๊ธฐ๊นŒ์ง€ INSERT SQL์„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ณด๋‚ด์ง€ ์•Š๋Š”๋‹ค.
 
 //์ปค๋ฐ‹ํ•˜๋Š” ์ˆ˜๊ฐ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— INSERT SQL์„ ๋ชจ์•„์„œ ๋ณด๋‚ธ๋‹ค.
 transaction.commit(); // ์ปค๋ฐ‹

 

ํ•œ๋ฒˆ์— ๋ชจ์•˜๋‹ค๊ฐ€ ๋„คํŠธ์›Œํฌ๋กœ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์— ๋„คํŠธ์›Œํฌ ํ†ต์‹  ๋น„์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ์ฆ‰์‹œ ๋กœ๋”ฉ

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


๐Ÿ“Œ ๊ฐœ๋ฐœ์‹œ ์ง€์—ฐ๋กœ๋”ฉ์œผ๋กœ ์„ธํŒ… ํ›„ ์„ฑ๋Šฅ ๊ณ ๋ คํ•˜์—ฌ ์ฆ‰์‹œ๋กœ๋”ฉ์œผ๋กœ ๋ถ€๋ถ„ ์„ธํŒ…

 

๐Ÿ”Ž ORM ? - Object-relational mapping(๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘)

 

๐Ÿ”Ž JPA Process ( ์ €์žฅ, ์กฐํšŒ )

java application ๊ณผ jdbc API ์‚ฌ์ด์—์„œ ๋™์ž‘
๊ธฐ์กด์—๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ jdbc api๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด JPA๊ฐ€ ์‚ฌ์šฉ

 

๐Ÿ“Œ์š”์•ฝ

JPA๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ธฐ์กด์˜ SQL์— ์˜์กด์ ์ธ ๊ฐœ๋ฐœ ๋ฐฉ์‹์—์„œ ์ข€ ๋” ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•˜๊ณ  JPAํ‘œ์ค€์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ์ด์ ๋“ค๊ณผ ์„ฑ๋Šฅ์ตœ์ ํ™” ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ฆ๋Œ€์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— JPA๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‚ฌ์šฉ ํ•ด์•ผํ•œ๋‹ค.


 

๐Ÿ“š ์ฐธ๊ณ  ๋ฐ ์ž๋ฃŒ ์ถœ์ฒ˜ : ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ (๊น€์˜ํ•œ)

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

[JPA] ์ƒ์†๊ด€๊ณ„ ๋งคํ•‘, @MappedSuperclass  (0) 2024.03.07
[JPA] ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ( ManyToOne, OneToMany, OneToOne, ManyToMany )  (0) 2024.03.04
[JPA] ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ๋ง๊ณผ ์–‘๋ฐฉํ–ฅ,๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘  (0) 2024.02.17
[JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘  (0) 2024.02.10
[JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ  (0) 2024.02.09
  1. ๐Ÿค”Why ?
  2. โœ” SQL ์ค‘์‹ฌ์ ์ธ ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ 
  3. โœ” JPA - Java Persistence API
  4. ๐Ÿ”Ž JPA๋Š” ํ‘œ์ค€ ๋ช…์„ธ
  5. ๐Ÿ”Ž JPA๋ฅผ ์™œ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฐ€?
  6. ๐Ÿ”Ž JPA์˜ ์„ฑ๋Šฅ ์ตœ์ ํ™” ๊ธฐ๋Šฅ
  7. ๐Ÿ”Ž ORM ? - Object-relational mapping(๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘)
  8. ๐Ÿ”Ž JPA Process ( ์ €์žฅ, ์กฐํšŒ )
  9. ๐Ÿ“Œ์š”์•ฝ
'Backend/JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [JPA] ๋‹ค์–‘ํ•œ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘ ( ManyToOne, OneToMany, OneToOne, ManyToMany )
  • [JPA] ๊ฐ์ฒด ์ง€ํ–ฅ ๋ชจ๋ธ๋ง๊ณผ ์–‘๋ฐฉํ–ฅ,๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„ ๋งคํ•‘
  • [JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘
  • [JPA] JPA ๊ฐ€์žฅ ์ค‘์š”ํ•œ 2๊ฐ€์ง€ - ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ
์žฅ์šฉ์„
์žฅ์šฉ์„
๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์žฅ์šฉ์„
dot
์žฅ์šฉ์„
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (38)
    • Backend (12)
      • JPA (7)
      • Spring (3)
    • CS (2)
    • Algorithm (18)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • ๋ฌธ์ œ (10)
    • Project (6)
      • SpringBoot+JPA ๊ฒŒ์‹œํŒ (6)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํ…Œ์ŠคํŠธ์ฝ”๋“œ
  • spring
  • ๊ณจ๋“œ
  • ์ž๋ฐ”
  • JPA
  • ๊ฒŒ์‹œํŒ
  • ORM
  • ์ž๋ฃŒ๊ตฌ์กฐ
  • DP
  • spring data JPA
  • dfs
  • Java
  • CRUD
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋ฐฑ์ค€
  • ๋ฐฑํŠธ๋ž˜ํ‚น
  • 1890๋ฒˆ
  • ์‹ค๋ฒ„
  • 12865๋ฒˆ
  • Builder

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
์žฅ์šฉ์„
[JPA] SQL ์ค‘์‹ฌ์  ๊ฐœ๋ฐœ์˜ ๋ฌธ์ œ์ ๊ณผ JPA๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ด์œ 
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.