Springboot_ORM(JPA,JPQL)

h_zeeยท2024๋…„ 4์›” 12์ผ
0

SpringBoot

๋ชฉ๋ก ๋ณด๊ธฐ
8/8

ORM

๐Ÿ“– ORM

  • Object Relational Mapping
  • ์ž๋ฐ”์˜ ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์žˆ๋Š” ๊ฐ’์„ ์ž๋ฐ”์—์„œ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋ณดํ†ต์€ SQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, SQL์„ ์‚ฌ์šฉํ•œ ๊ฒฝํ—˜์ด ์—†๋Š” ์‚ฌ๋žŒ์€ SQL๋ฅผ ์ƒˆ๋กœ ๊ณต๋ถ€ํ•ด์•ผ๋˜๋Š” ๋ถ€๋‹ด์ด ์ƒ๊น๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๊ฐ€ ORM ์ž…๋‹ˆ๋‹ค.
ORM์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ’์„ ๊ฐ์ฒด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์›ํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ๊ฐ€ ์ˆ˜์›”ํ•ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ“– ORM ์˜ ์žฅ์ 

  • SQL ์„ ๊ณต๋ถ€ํ•˜์—ฌ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„, ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ๋”ฐ๋ผ์„œ, SQL์ง€์‹์˜ ํ•„์š”์„ฑ์ด ์ค„์–ด๋“ค๊ณ  ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ฐ„์†Œํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์ด ์ค„์–ด๋“ญ๋‹ˆ๋‹ค.

๐Ÿ“– ORM ์˜ ๋‹จ์ 

  • ํ”„๋กœ์ ํŠธ์˜ ๋ณต์žก์„ฑ์ด ๋†’๊ฑฐ๋‚˜ ๋ฌด๊ฑฐ์šด ์ฟผ๋ฆฌ๋Š” ์‚ฌ์šฉ ๋‚œ์ด๋„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๊ฑฐ๋‚˜ ORM์œผ๋กœ ํ•ด๊ฒฐ์ด ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“– ORM ์ข…๋ฅ˜

ORM์—๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๋ช‡๊ฐœ๋งŒ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Flask : SQLAlchemy
  • Django : ๋‚ด์žฅ ORM
  • JAVA : Hybernate, JPA
  • Node.js : Sequalize

JPA

๐Ÿ“– JPA

  • Java Persistence API
  • ์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค.
  • ์ž๋ฐ” ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌ.

JPA๋Š” '์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค' ์ด๋ฏ€๋กœ, ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ORM ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ถ”๊ฐ€๋กœ ์„ ํƒํ•ด์•ผ๋ฉ๋‹ˆ๋‹ค. ORM ํ”„๋ ˆ์ž„์›Œํฌ์—๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ์œผ๋‚˜, ์ฃผ๋กœ 'Hibernate'๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ž…๋‹ˆ๋‹ค.

๐Ÿ“– Hibernate

  • JPA์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„.
  • ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” JDBC API๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

JPQL

๐Ÿ“– JPQL

JPA๋Š” SQL์„ ์ถ”์ƒํ™”ํ•œ JPQL์ด๋ผ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • Jakarta Persistence Query Language
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ, ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌ.
  • SQL๊ณผ ๋ฌธ๋ฒ•์ด ์œ ์‚ฌ.

JPA VS JPQL

JPA๋Š” ๊ธฐ๋ณธ์ ์ธ CRUD ์ž‘์—…์— ์šฉ์ดํ•˜์ง€๋งŒ, ์กฐ์ธ๊ณผ ์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ์—๋Š” ์ทจ์•ฝํ•˜๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด์— JPQL ์„ ์ง์ ‘ ๋งŒ๋“ค์–ด ์ฒ˜๋ฆฌํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, JPQL ์€ ๊ธฐ๋ณธ ๋ฌธ์ž์—ด๋กœ ์ž‘์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํŒŒ์ผ ์‹œ ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋™์ ์œผ๋กœ ์ฟผ๋ฆฌ์–ธ์–ด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ํšจ์œจ์ ์ด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, JPA ์™€ JPQL์„ ํŠน์ง•์„ ์ •ํ™•ํžˆ ๊ณต๋ถ€ํ•˜์—ฌ, ์ ์ ˆํžˆ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค!!


โ—ผ ์ฐธ๊ณ ์ž๋ฃŒ

profile
ํ•˜๋ฃจํ•˜๋ฃจ ์„ฑ์‹คํ•˜๊ฒŒ (๋น„๊ณต๊ฐœ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค-์ผ๋ถ€๊ณต๊ฐœ)

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด