Home > Spring > πŸƒ[Spring] Spring Data JPAλŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹Œ λͺ¨λ“ˆμΈκ°€μš”?

πŸƒ[Spring] Spring Data JPAλŠ” λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ•„λ‹Œ λͺ¨λ“ˆμΈκ°€μš”?
Spring Framework

πŸƒ[Spring] Spring Data JPAλŠ” 라이브러리(Library)κ°€ μ•„λ‹Œ λͺ¨λ“ˆ(Module)μΈκ°€μš”?

  • Spring Data JPAλŠ” Spring Data ν”„λ‘œμ νŠΈμ˜ ν•˜μœ„ λͺ¨λ“ˆ(Module)둜, 이λ₯Ό λͺ¨λ“ˆ(Module)이라고 λΆ€λ₯΄λŠ” 것이 더 μ •ν™•ν•©λ‹ˆλ‹€.
    • λ‹€λ§Œ, 라이브러리(Library)λΌλŠ” μš©μ–΄μ™€λ„ μ’…μ’… ν˜Όμš©λ˜μ–΄ μ‚¬μš©λ˜κ³€ ν•©λ‹ˆλ‹€.
  • 두 μš©μ–΄ 간에 μ•½κ°„μ˜ 차이가 μžˆμ§€λ§Œ, κ°œλ°œμžλ“€μ΄ Spring Data JPAλ₯Ό 이야기할 λ•ŒλŠ” 주둜 λͺ¨λ“ˆ(Module)λ‘œμ„œμ˜ 의미λ₯Ό κ°•μ‘°ν•©λ‹ˆλ‹€.

1️⃣ λͺ¨λ“ˆ(Module)κ³Ό 라이브러리(Library)의 차이.

1️⃣ λͺ¨λ“ˆ(Module)

  • λͺ¨λ“ˆ(Module)은 νŠΉμ • κΈ°λŠ₯μ΄λ‚˜ λͺ©μ μ„ μ€‘μ‹¬μœΌλ‘œ κ΅¬μ„±λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ˜λ―Έν•˜λ©°, 더 큰 μ‹œμŠ€ν…œμ˜ μΌλΆ€λΆ„μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.
  • Spring Data JPAλŠ” Spring DataλΌλŠ” 더 큰 ν”„λ‘œμ νŠΈμ˜ 일뢀뢄이며, 데이터 μ ‘κ·Ό κ³„μΈ΅μ—μ„œ JPA(Java Persistence API)와 Hibernateλ₯Ό μ‰½κ²Œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
    • 이 μ μ—μ„œ Spring Data JPAλŠ” λͺ¨λ“ˆ(Module)둜 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ λͺ¨λ“ˆκ³Ό μ»΄ν¬λ„ŒνŠΈλ₯Ό 레고 블둝에 λΉ„μœ ν•΄λ³΄λ©΄?!
πŸ™‹β€β™‚οΈ μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œμ˜ μ»΄ν¬λ„ŒνŠΈ.
πŸ™‹β€β™‚οΈ μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ—μ„œμ˜ λͺ¨λ“ˆ.

2️⃣ 라이브러리(Library)

  • 라이브러리(Library)λŠ” μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ μ§‘ν•©μœΌλ‘œ, κ°œλ°œμžκ°€ νŠΉμ • κΈ°λŠ₯을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.
  • Spring Data JPA도 μ˜μ‘΄μ„±μœΌλ‘œ μΆ”κ°€ν•˜λ©΄ ν”„λ‘œμ νŠΈμ—μ„œ μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ 집합을 μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— 라이브러리(Library)둜 λ³Ό μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ, 더 큰 λ§₯λ½μ—μ„œ λͺ¨λ“ˆ(Module)은 더 큰 μ‹œμŠ€ν…œμ˜ μΌλΆ€λ‘œ λ™μž‘ν•˜λŠ” 반면, 라이브러리(Library)λŠ” λ…λ¦½μ μœΌλ‘œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ μ§‘ν•©μ΄λΌλŠ” μ μ—μ„œ 차이가 μžˆμŠ΅λ‹ˆλ‹€.

πŸ™‹β€β™‚οΈ 라이브러리(Library)와 ν”„λ ˆμž„μ›Œν¬(Framework)의 차이점.

2️⃣ Spring Data ν”„λ‘œμ νŠΈμ˜ ꡬ쑰.

  • Spring DataλŠ” 데이터 접근을 λ‹¨μˆœν™”ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ ν”„λ‘œμ νŠΈλ‘œ, λ‹€μ–‘ν•œ 데이터 μ €μž₯μ†Œμ— μ‰½κ²Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ—¬λŸ¬ λͺ¨λ“ˆ(Module)둜 κ΅¬μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • 이 ν”„λ‘œμ νŠΈλŠ” λ‹€μ–‘ν•œ λͺ¨λ“ˆ(Module)을 ν¬ν•¨ν•˜κ³  있으며, 각 λͺ¨λ“ˆ(Module)은 νŠΉμ • 데이터 μ €μž₯μ†Œμ— λŒ€ν•œ κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄
        • Spring Data JPA : JPAλ₯Ό μ‚¬μš©ν•œ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 접근을 μœ„ν•œ λͺ¨λ“ˆ
        • Spring Data MongoDB : MongoDBλ₯Ό μ‚¬μš©ν•œ NoSQL λ°μ΄ν„°λ² μ΄μŠ€ 접근을 μœ„ν•œ λͺ¨λ“ˆ
        • Spring Data Redis : Redis 데이터 μ €μž₯μ†Œ 접근을 μœ„ν•œ λͺ¨λ“ˆ
        • Spring Data Elasticsearch : Elasticsearch 접근을 μœ„ν•œ λͺ¨λ“ˆ
  • 이처럼 Spring Data JPAλŠ” Spring Data ν”„λ‘œμ νŠΈμ˜ μ—¬λŸ¬ λͺ¨λ“ˆ 쀑 ν•˜λ‚˜λ‘œ, JPA(Java Persistence API)λ₯Ό 기반으둜 ν•˜λŠ” κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(Relational Database)μ™€μ˜ μƒν˜Έμž‘μš©μ„ λ‹¨μˆœν™”ν•˜λŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.

3️⃣ Spring Data JPAλ₯Ό λͺ¨λ“ˆ(Module)둜 λ³΄λŠ” 이유.

  • Spring μƒνƒœκ³„μ˜ 일뢀뢄
    • Spring Data JPAλŠ” Spring Data ν”„λ‘œμ νŠΈμ˜ ν•˜μœ„ λͺ¨λ“ˆλ‘œ, Spring의 μΌκ΄€λœ ꡬ쑰와 μŠ€νƒ€μΌμ„ λ”°λ₯΄λ©°, λ‹€λ₯Έ Spring λͺ¨λ“ˆκ³Ό μžμ—°μŠ€λŸ½κ²Œ ν†΅ν•©λ©λ‹ˆλ‹€.
  • νŠΉμ • κΈ°λŠ₯에 집쀑
    • Spring Data JPAλŠ” JPAλ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•˜λŠ” κΈ°λŠ₯에 νŠΉν™”λ˜μ–΄ 있으며, μ΄λŸ¬ν•œ 역할에 μ΄ˆμ μ„ 맞좘 독립적인 λͺ¨λ“ˆλ‘œ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
  • μ˜μ‘΄μ„± 관리
    • Maven λ˜λŠ” Gradle의 μ˜μ‘΄μ„±μœΌλ‘œ μΆ”κ°€ν•  λ•Œ, Spring Data JPA λͺ¨λ“ˆμ„ μΆ”κ°€ν•¨μœΌλ‘œμ¨ JPA 기반 데이터 μ ‘κ·Ό 계측을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ μš”μ•½.

  • Spring Data JPAλŠ” Spring Data ν”„λ‘œμ νŠΈμ˜ ν•˜μœ„ λͺ¨λ“ˆλ‘œμ„œ, JPA 기반의 데이터 접근을 μ‰½κ²Œ ν•  수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
  • 이 λͺ¨λ“ˆμ€ 더 큰 Spring Data μƒνƒœκ³„μ˜ μΌλΆ€λ‘œ λ™μž‘ν•˜λ©°, JPAλ₯Ό μ‚¬μš©ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μƒν˜Έμž‘μš©μ„ λ‹¨μˆœν™”ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • κ°œλ°œμžλ“€μ΄ λΌμ΄λΈŒλŸ¬λ¦¬μ™€ λͺ¨λ“ˆμ΄λΌλŠ” μš©μ–΄λ₯Ό ν˜Όμš©ν•΄ μ‚¬μš©ν•˜κΈ°λ„ ν•˜μ§€λ§Œ, Spring Data JPAλŠ” μ—„λ°€νžˆ λ§ν•˜λ©΄ λͺ¨λ“ˆλ‘œ λ³΄λŠ” 것이 λ§žμŠ΅λ‹ˆλ‹€.