๊ด€๋ฆฌ ๋ฉ”๋‰ด

Jin's Dev Story

[Spring Data JPA] JPA ๋ณธ๋ฌธ

Web & Android/Spring Data JPA

[Spring Data JPA] JPA

woojin._. 2023. 10. 14. 10:04

๐Ÿ’ก ๋งคํ•‘์˜ ๋œป : ํ‚ค(key) ์—ญํ• ์„ ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ๊ฐ’(value) ์—ญํ• ์„ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง ์ง€์–ด(=์—ฐ๊ฒฐ ์ง€์–ด) ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

 

JPA(Java Persistence API)

  • ์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€
  • Persistence : ์˜์†์„ฑ
  • persist() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ €์žฅ
  • Hibernate, OpenJPA

⇒ API(Application Programming Interface)

Spring Data JPA

  • save() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์ €์žฅ์ด๋‚˜ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•จ

JPA ์žฅ์ 

  1. ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์†๋˜์ง€ ์•Š์Œ
    • ์กฐ๊ธˆ ์ข…์† ๋จ, ๊ฑฐ์˜ ๊ตฌ๋ถ„์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์˜ค๋ผํด, MySQL, MSSQL ๋“ฑ๋“ฑ์„ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋ฉด์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  2. ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ ์„ค๊ณ„ ๊ฐ€๋Šฅ
    • ์ง๊ด€์ ์ด๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘
  3. ์œ ์ง€๋ณด์ˆ˜ ์œ ๋ฆฌ ๋ฐ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ
    • ์ปฌ๋Ÿผ ์ˆ˜์ • ์‹œ ํด๋ž˜์Šค ํ•„๋“œ ์ˆ˜์ •์œผ๋กœ ํ•ด๊ฒฐ

JPA ๋‹จ์ 

  1. ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ
    • Native SQL
    • JPQL ์ง€์› (์ฟผ๋ฆฌ๋ž‘ ๋น„์Šท)
  2. ์„ฑ๋Šฅ ์ €ํ•˜ ์œ„ํ—˜
    • ์ž๋™ ์ƒ์„ฑ์— ์˜ํ•œ ์˜๋„ํ•˜์ง€ ์•Š๋Š” ์ฟผ๋ฆฌ ๋ฐœ์ƒ
  3. ํ•™์Šต ์‹œ๊ฐ„
    • ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค → MyBatis → JPA ๊ถŒ์žฅ

 

JPA ๋™์ž‘ ๋ฐฉ์‹

์—”ํ‹ฐํ‹ฐ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์— ๋Œ€์‘ํ•˜๋Š” ํด๋ž˜์Šค
  • @Entity ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์—ฌ์„œ ๊ด€๋ฆฌ

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ

  • ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์ธ์Šคํ„ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์‹œ ํ•œ ๊ฐœ๋งŒ ๋งŒ๋“ค์–ด์ง€๋ฉฐ
  • ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ ์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ์ƒ์„ฑ

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €

  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•˜์—ฌ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—… ์ œ๊ณต

 

Database ์„ค์ •

  • spring.datasource.driver-class-name=๊ฒฝ๋กœ(com.mysql.cj.jdbc.Driver)
  • spring.datasource.url=๋ฐ๋ฒ  ๊ฒฝ๋กœ(jdbc:mysql://localhost:3306/shop2?serverTimezone-UTC)
  • spring.datasource.username=์œ ์ € ์ด๋ฆ„(root)
  • spring.datasource.password=๋น„๋ฐ€๋ฒˆํ˜ธ(1234)

JPA ์„ค์ •

  • spring.jpa.properties.hibernate.show_sql=true : ์ƒ์„ฑํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฝ˜์†”์— ๋ณด์—ฌ์ค„์ง€์˜ ์—ฌ๋ถ€
  • spring.jpa.properties.hibernate.format_sql=true : ์ฟผ๋ฆฌ ๋ชจ์–‘์„ ๋งž์ถฐ์„œ ๋ณด์—ฌ์ค„์ง€์˜ ์—ฌ๋ถ€(ex)๋“ค์—ฌ์“ฐ๊ธฐ)
  • spring.jpa.hibernate.ddl-auto=create or update: update : ๋ณ€๊ฒฝ๋œ ์Šคํ‚ค๋งˆ ์ ์šฉ
  • : validate : ์—”ํ‹ฐํ‹ฐ์™€ ํ…Œ์ด๋ธ” ์ •์ƒ ๋งคํ•‘ ํ™•์ธ
  • : create : ๊ธฐ์กด ํ…Œ์ด๋ธ” ์‚ญ์ œ ํ›„ ํ…Œ์ด๋ธ” ์ƒ์„ฑ
  • spring.jpa.database-platform=๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์–ธ์–ด ์„ค์ •(org.hibernate.dialect.์–ธ์–ด์ด๋ฆ„)

๐Ÿ’ก ํ˜ผ์ž ๊ณต๋ถ€ํ•  ๋•Œ ์ฐพ์•„ ๋†“์€ ๋ณด์ถฉ ์„ค๋ช…

  • DDL ( ๋ฐ์ดํ„ฐ ์ •์˜์–ด )
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •, ์‚ญ์ œ ๋“ฑ ๋ฐ์ดํ„ฐ์˜ ์ „์ฒด ๊ณจ๊ฒฉ์„ ๊ฒฐ์ •
    • ๋ฐ๋ฒ , ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ๋ณ€๊ฒฝ, ์ œ๊ฑฐ
    • CREATE, ALTER, DROP, TRUNCATE
  • DML ( ๋ฐ์ดํ„ฐ ์กฐ์ž‘์–ด )
    • ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ํ–‰๊ณผ ์—ด์„ ์กฐ์ž‘ํ•˜๋Š” ์–ธ์–ด
    • ๋ฐ์ดํ„ฐ ์ž…๋ ฅ, ๋ณ€๊ฒฝ, ์ˆ˜์ • ๋“ฑ
    • SELECT, INSERT, UPDATE, DELETE
  • DCL ( ๋ฐ์ดํ„ฐ ์ œ์–ด์–ด )
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด์— ๊ถŒํ•œ์„ ์ฃผ๋Š” ๋“ฑ์˜ ์—ญํ• 
    • ๋ฐ๋ฒ  ์ ‘์†๊ถŒํ•œ
    • GRANT, REVOKE, COMMIT, ROLLBACK

'Web & Android > Spring Data JPA' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Spring Data JPA] Querydsl  (0) 2023.10.15
[Spring Data JPA] @Query  (0) 2023.10.14
[Spring Data JPA] QueryMethod  (0) 2023.10.14
[Spring Data JPA] ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ  (1) 2023.10.14
[Spring Data JPA] ORM & SQL Mapper  (0) 2023.10.14