π[Spring] κ³μΈ΅ν μν€ν μ²μμ Repositoryμ μν .
Java λ°±μλ μ ν리μΌμ΄μ μ κ³μΈ΅ν μν€ν μ²μμ Repository κ³μΈ΅μ λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ κ΄λ¦¬νλ μν μ ν©λλ€.
Repositoryλ λ°μ΄ν°μ CRUD(Create, Read, Update, Delete) μμ μ μ²λ¦¬νλ©°, λ°μ΄ν°λ₯Ό μ μ₯μ(μΌλ°μ μΌλ‘ λ°μ΄ν°λ² μ΄μ€)μμ κ°μ Έμ€κ³ , μμ νλ©°, μμ νλ κΈ°λ₯μ μΊ‘μνν©λλ€.
μ΄λ₯Ό ν΅ν΄ μ ν리μΌμ΄μ μ λΉμ¦λμ€ λ‘μ§μμ λ°μ΄ν° μ κ·Όμ λΆλ¦¬νκ³ , μ μ§λ³΄μμ±κ³Ό ν μ€νΈ κ°λ₯μ±μ λμ λλ€.
1οΈβ£ Repository κ³μΈ΅μ μ£Όμ μν .
1. λ°μ΄ν°λ² μ΄μ€ μ κ·Ό κ΄λ¦¬.
- Repositoryλ μ ν리μΌμ΄μ κ³Ό λ°μ΄ν°λ² μ΄μ€ κ°μ μ€κ°μ μν μ νλ©°, λ°μ΄ν°λ² μ΄μ€λ‘λΆν° λ°μ΄ν°λ₯Ό μ‘°ννκ±°λ, λ°μ΄ν°λ₯Ό μ μ₯, μμ , μμ νλ κΈ°λ₯μ μ 곡ν©λλ€.
- λͺ¨λ λ°μ΄ν° μ κ·Ό λ‘μ§μ Repository κ³μΈ΅μμ μ²λ¦¬λ©λλ€.
2. CRUD μμ μ²λ¦¬.
- Repositoryλ μν°ν°μ μλͺ μ£ΌκΈ° μ λ°μ κ±ΈμΉ CRUD μμ μ μ²λ¦¬ν©λλ€.
- Javaμ JPAλ Hibernate κ°μ ORM(Object-Relational Mapping) νλ μμν¬λ₯Ό μ¬μ©ν΄ κ°μ²΄μ λ°μ΄ν°λ² μ΄μ€ κ°μ λ§€νμ μλμΌλ‘ κ΄λ¦¬ν©λλ€.
- μλ₯Ό λ€μ΄,
save
,findById
,deleteById
λ±μ λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯νκ±°λ μ‘°ννλ μμ μ μνν©λλ€.
3. λ°μ΄ν° 쿼리 μ²λ¦¬.
- Repository κ³μΈ΅μ λ°μ΄ν°λ₯Ό μ‘°ννκΈ° μν΄ λ°μ΄ν°λ² μ΄μ€μμ 쿼리λ₯Ό μμ±νκ³ μ€νν©λλ€.
- Spring Data JPAμ κ°μ νλ μμν¬λ₯Ό μ¬μ©νλ©΄ 쿼리 λ©μλλ₯Ό κ°νΈνκ² μ μν μ μμΌλ©°, 볡μ‘ν 쑰건 κ²μμ μν JPQL(Java Persistence Query Language) λλ λ€μ΄ν°λΈ SQL 쿼리λ₯Ό μ¬μ©ν μ μμ΅λλ€.
- κΈ°λ³Έμ μΈ μΏΌλ¦¬ λ©μλ μΈμλ 볡μ‘ν 쿼리λ₯Ό μμ±νμ¬ νΉμ 쑰건μ λ§λ λ°μ΄ν°λ₯Ό νν°λ§ν μ μμ΅λλ€.
4. λ°μ΄ν°λ² μ΄μ€μμ μΆμν.
- Repositoryλ λ°μ΄ν°λ² μ΄μ€ μ κ·Ό λ‘μ§μ μΊ‘μννμ¬ μμ κ³μΈ΅(Service λ±)μμ λ°μ΄ν°λ² μ΄μ€μ ꡬ체μ μΈ λμ λ°©μμ μ νμκ° μλλ‘ ν©λλ€.
- μ΄λ κ² νλ©΄ λ°μ΄ν°λ² μ΄μ€κ° λ³κ²½λλλΌλ μμ κ³μΈ΅μλ μν₯μ λ―ΈμΉμ§ μλλ‘ κ΅¬μ‘°λ₯Ό μ μ§ν μ μμ΅λλ€.
5. λ°μ΄ν°λ² μ΄μ€ λ 립μ±.
- Repositoryλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ λ°μ΄ν°λ² μ΄μ€μμ ꡬ체μ μΈ μ’ μμ±μ μ€μΌ μ μμ΅λλ€.
- μ ν리μΌμ΄μ μ΄ μ¬μ©νλ λ°μ΄ν°λ² μ΄μ€κ° λ³κ²½λλλΌλ, Repository κ³μΈ΅λ§ μ μ ν μμ νλ©΄ μμ κ³μΈ΅μλ μν₯μ μ£Όμ§ μκΈ° λλ¬Έμ, λ°μ΄ν°λ² μ΄μ€ λ 립μ±μ μ μ§ν μ μμ΅λλ€.
6. κ°μ²΄μ λ°μ΄λΈ λ§€ν κ΄λ¦¬
- ORMμ μ¬μ©ν΄ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό κ°μ²΄λ₯Ό λ§€ννλ μν μ λ΄λΉν©λλ€.
- κ°μ²΄μ ν μ΄λΈ κ°μ κ΄κ³(1, N)λ₯Ό μ μνκ³ , μ΄λ¬ν κ΄κ³λ₯Ό κΈ°λ°μΌλ‘ λ°μ΄ν°λ² μ΄μ€ μ°μ°μ μνν©λλ€.
2οΈβ£ μμ μ½λ
Spring Data JPAλ₯Ό μ¬μ©ν Repository κ³μΈ΅μ μμλ₯Ό μ΄ν΄λ³΄κ² μ΅λλ€.
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// κΈ°λ³Έμ μΌλ‘ JpaRepositoryμμ μ 곡νλ CRUD λ©μλλ€
// save, fundById, findAll, deleteById λ±μ΄ μ 곡λ©λλ€.
// 컀μ€ν
쿼리 λ©μλ μ μ
Optional<User> findByEmail(String email);
// 볡μ‘ν JPQL 쿼리 λ©μλ μ μ κ°λ₯
@Query("SELECT u FROM User u WHERE u.name = :name AND u.status = :status")
List<User> findByNameAndStatus(@Param("name") String name, @Param("status") String status);
}
3οΈβ£ μ€λͺ
-
@Repository
- Springμμ μ΄ μΈν°νμ΄μ€κ° λ°μ΄ν° μμΈμ€ κ³μΈ΅μ λνλΈλ€λ κ²μ λͺ μνλ μ΄λ Έν μ΄μ μ λλ€.
-
@Repository
μ΄λ Έν μ΄μ μ λ°μ΄ν°λ² μ΄μ€ μμΈλ₯Ό Springμ λ°μ΄ν° μμΈμ€ μμΈλ‘ λ³ννλ μν λ ν©λλ€.
-
JpaRepository<User, Long>
- Spring Data JPAμμ μ 곡νλ κΈ°λ³Έ μΈν°νμ΄μ€λ‘,
User
μν°ν°μLong
νμ μ IDλ₯Ό μ¬μ©ν΄ CRUD μμ μ μ²λ¦¬ν©λλ€.
- Spring Data JPAμμ μ 곡νλ κΈ°λ³Έ μΈν°νμ΄μ€λ‘,
-
κΈ°λ³Έ CRUD λ©μλ
-
save
,findById
,deleteById
λ±μ λ©μλκ° κΈ°λ³Έμ μΌλ‘ μ 곡λ©λλ€.
-
-
컀μ€ν
쿼리 λ©μλ
- λ§€μλ λͺ λͺ κ·μΉμ ν΅ν΄ μλμΌλ‘ SQL 쿼리λ₯Ό μμ±νλ λ°©μμΌλ‘ νΉμ νλλ‘ κ²μνλ λ©μλλ₯Ό μ μν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄,
findByEmail
μ μ΄λ©μΌμ κΈ°μ€μΌλ‘ μ¬μ©μλ₯Ό μ‘°νν©λλ€.
-
JPQL μ¬μ©
- 볡μ‘ν μ‘°κ±΄μ΄ νμν κ²½μ°,
@Query
μ΄λ Έν μ΄μ μ μ¬μ©ν΄ JPQLμ μμ±ν μ μμ΅λλ€. - μ΄ μμμμλ μ΄λ¦κ³Ό μνλ₯Ό κΈ°λ°μΌλ‘ μ¬μ©μλ₯Ό μ‘°ννλ 쿼리λ₯Ό μ μνμ΅λλ€.
- 볡μ‘ν μ‘°κ±΄μ΄ νμν κ²½μ°,
4οΈβ£ Repository κ³μΈ΅μ μ΄μ .
1. λΉμ¦λμ€ λ‘μ§κ³Ό λ°μ΄ν° μ κ·Ό λ‘μ§μ λΆλ¦¬.
- Repository κ³μΈ΅μ λΉμ¦λμ€ λ‘μ§κ³Ό λ°μ΄ν°λ² μ΄μ€ μ κ·Όμ λͺ νν λΆλ¦¬νμ¬ κ° κ³μΈ΅μ΄ μμ μ μνμλ§ μ§μ€ν μ μκ² ν©λλ€.
- μ΄λ κ² νλ©΄ μ½λκ° λ λͺ¨λνλκ³ μ μ§λ³΄μνκΈ° μ¬μμ§λλ€.
2. μ½λμ μ¬μ¬μ©μ±.
- Repository κ³μΈ΅μ λ°μ΄ν°λ² μ΄μ€ μ κ·Ό λ‘μ§μ μ¬μ¬μ©ν μ μλλ‘ λ§λ€μ΄μ§λλ€.
- μ¬λ¬ μλΉμ€μμ λμΌν λ°μ΄ν°λ² μ΄μ€ 쿼리λ λ°μ΄ν°λ₯Ό νμλ‘ ν λ, μ΄λ₯Ό μ€μμμ κ΄λ¦¬ν¨μΌλ‘μ¨ μ½λ μ€λ³΅μ μ€μΌ μ μμ΅λλ€.
3. ν μ€νΈ κ°λ₯μ± ν₯μ.
- Repository κ³μΈ΅μ μΈν°νμ΄μ€λ‘ μ μν¨μΌλ‘μ¨ ν μ€νΈ μ Mock κ°μ²΄λ‘ μ½κ² λ체ν μ μμ΄, λ°μ΄ν°λ² μ΄μ€μ μ κ·Όνμ§ μκ³ λ λ¨μ ν μ€νΈλ₯Ό μμ±ν μ μμ΅λλ€.
4. λ°μ΄ν°λ² μ΄μ€ λ³κ²½μ μ μ°μ±.
- λ°μ΄ν°λ² μ΄μ€κ° λ³κ²½λλλΌλ Repository κ³μΈ΅λ§ μμ νλ©΄ μμ κ³μΈ΅(Serviceλ Controller)μ μ ν λ³κ²½νμ§ μκ³ λ μ ν리μΌμ΄μ μ μ μ§ν μ μμ΅λλ€.
- λ°μ΄ν°λ² μ΄μ€ λ 립μ±μ λμ΄λ λ° μ€μν μν μ ν©λλ€.
5οΈβ£ κ²°λ‘
Repository κ³μΈ΅μ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©νλ λͺ¨λ μμ
μ λ΄λΉνλ©°, λ°μ΄ν°λ₯Ό μ μ₯, μ‘°ν, μ
λ°μ΄νΈ, μμ νλ κΈ°λ₯μ μΊ‘μνν©λλ€.
μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μ κ·Ό λ‘μ§μ΄ λΉμ¦λμ€ λ‘μ§κ³Ό λΆλ¦¬λλ―λ‘ μ ν리μΌμ΄μ
μ μ μ§λ³΄μμ±, νμ₯μ±, μ¬μ¬μ©μ±μ΄ ν¬κ² ν₯μλ©λλ€.