π[Spring] Repository ν¨ν΄μ΄λ 무μμΌκΉμ?
- Repository ν¨ν΄μ λ°μ΄ν° μ κ·Ό λ‘μ§μ λΉμ¦λμ€ λ‘μ§(Business Logic)κ³Ό λΆλ¦¬νμ¬, λ°μ΄ν°λ² μ΄μ€λ λ€λ₯Έ μ μ₯μμμ μνΈμμ©μ μΊ‘μννλ λμμΈ ν¨ν΄μ λλ€.
- μ΄ ν¨ν΄μ μ¬μ©νλ©΄, μ ν리μΌμ΄μ μ λλ¨Έμ§ λΆλΆμ΄ λ°μ΄ν°λ² μ΄μ€μ μ§μ μνΈμμ©νλ λμ Repositoryλ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό μ μ₯, μ‘°ν, μμ , μμ λ±μ μμ μ μνν μ μκ² λμ΄, μ½λμ μ μ§λ³΄μμ±κ³Ό μ¬μ¬μ©μ±μ λμΌ μ μμ΅λλ€.
1οΈβ£ Repository ν¨ν΄μ μ£Όμ κ°λ .
1οΈβ£ λ°μ΄ν° μ κ·Ό λ‘μ§μ μΊ‘μν.
- λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ Repository ν΄λμ€λ‘ κ°μΈμ ꡬνν©λλ€.
- μ΄λ κ² νλ©΄ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμμ λ°μ΄ν°λ² μ΄μ€μ μ§μ μνΈμμ©νμ§ μκ³ , Repository ν΄λμ€λ₯Ό ν΅ν΄μλ§ λ°μ΄ν°λ₯Ό λ€λ£¨κ² λ©λλ€.
- μ΄λ‘ μΈν΄ λ°μ΄ν° μ κ·Ό λ‘μ§κ³Ό λΉμ¦λμ€ λ‘μ§μ΄ λΆλ¦¬λμ΄, μ½λμ μ μ§λ³΄μμ±μ΄ λμμ§λλ€.
- μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€λ₯Ό λ³κ²½ν΄μΌ νλ κ²½μ°μλ λΉμ¦λμ€ λ‘μ§μλ μν₯μ λ―ΈμΉμ§ μκ³ Repositoryλ§ μμ νλ©΄ λ©λλ€.
2οΈβ£ λ°μ΄ν° μμ€μ μΆμν.
- Repository ν¨ν΄μ λ°μ΄ν°κ° μ΄λμμ μ€λμ§μ λν΄ μΆμνλ₯Ό μ 곡ν©λλ€.
- λ°μ΄ν°κ° κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(Relational Database, RDB), NoSQL λ°μ΄ν°λ² μ΄μ€, νμΌ μμ€ν , μΉ μλΉμ€ λ± μ΄λ€ κ³³μ μ μ₯λμ΄ μλμ§μ 무κ΄νκ² λμΌν μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ€λ£° μ μμ΅λλ€.
- μ΄ μΆμν λλΆμ, μ ν리μΌμ΄μ μ νΉμ λ°μ΄ν° μμ€μ μ’ μλμ§ μμΌλ©°, λ°μ΄ν° μμ€λ₯Ό κ΅μ²΄νκ±°λ νμ₯νκΈ° μ¬μμ§λλ€.
3οΈβ£ CRUD μμ μ νμ€ν.
- Repositoryλ λ³΄ν΅ CRUD μμ
(Create, Read, Update, Delete)μ νμ€νλ λ°©μμΌλ‘ μ 곡ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ λ°μ΄ν° μ κ·Ό λ‘μ§μ΄ μΌκ΄μ±μ μ μ§ν μ μμΌλ©°, κ°λ°μκ° CRUD(μμ±, μ‘°ν, μμ , μμ ) μμ μ μνν λ νΌλ μμ΄ μ¬μ©ν μ μμ΅λλ€.
2οΈβ£ Repository ν¨ν΄μ μ₯μ .
1οΈβ£ λΉμ¦λμ€ λ‘μ§(Business Logic)κ³Ό λ°μ΄ν° μ κ·Ό λ‘μ§μ λΆλ¦¬.
- λ°μ΄ν° μ κ·Ό μ½λμ λΉμ¦λμ€ λ‘μ§(Business Logic) μ½λκ° λΆλ¦¬λλ―λ‘, μ μ§λ³΄μκ° μ¬μμ§λλ€.
- λ°μ΄ν°λ² μ΄μ€ κ΄λ ¨ λ‘μ§μ΄ λ³κ²½λλλΌλ λΉμ¦λμ€ λ‘μ§(Business Logic)μ μν₯μ μ£Όμ§ μμ΅λλ€.
πββοΈ λΉμ¦λμ€ λ‘μ§(Business Logic)μ΄λ?
2οΈβ£ λ°μ΄ν° μμ€μ λ³κ²½μ λν μ μ°μ±.
- μ ν리μΌμ΄μ
μ νΉμ λ°μ΄ν°λ² μ΄μ€ κΈ°μ μ΄λ μ μ₯μμ μμ‘΄νμ§ μμ΅λλ€.
- μλ₯Ό λ€μ΄, μ ν리μΌμ΄μ μ΄ MySQLμμ MongoDBλ‘ λ°μ΄ν°λ² μ΄μ€λ₯Ό μ νν΄μΌ ν κ²½μ°, Repository λ΄λΆμ ꡬνλ§ λ³κ²½νλ©΄ λλ―λ‘ λ³κ²½ μμ μ΄ μ©μ΄ν΄μ§λλ€.
3οΈβ£ ν μ€νΈ μ©μ΄μ±.
- λ°μ΄ν° μ κ·Ό λ‘μ§μ΄ Repositoryλ‘ μΆμνλμ΄ μκΈ° λλ¬Έμ, ν
μ€νΈ μ½λμμ Mock(λͺ¨μ κ°μ²΄)λ₯Ό μ¬μ©ν΄ Repositoryμ λμμ λ체ν μ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ λ°μ΄ν°λ² μ΄μ€ μμ΄λ λΉμ¦λμ€ λ‘μ§μ ν μ€νΈν μ μκ² λ©λλ€.
3οΈβ£ Spring Data JPAμμμ Repository ν¨ν΄ ꡬν.
- Spring Data JPAλ Repository ν¨ν΄μ νΈλ¦¬νκ² κ΅¬νν μ μλλ‘ ν΄μ€λλ€.
- κ°λ°μλ λ°μ΄ν° μ κ·Ό λ‘μ§μ μΌμΌμ΄ μμ±ν νμ μμ΄, Spring Data JPAκ° μ 곡νλ
JpaRepository
μΈν°νμ΄μ€λ₯Ό νμ₯ν¨μΌλ‘μ¨ μλμΌλ‘ CRUD(μμ±, μ‘°ν, μμ , μμ ) μμ μ μ²λ¦¬ν μ μκ² λ©λλ€.
- κ°λ°μλ λ°μ΄ν° μ κ·Ό λ‘μ§μ μΌμΌμ΄ μμ±ν νμ μμ΄, Spring Data JPAκ° μ 곡νλ
π μμ: User μν°ν° ν΄λμ€.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String Integer age;
// κΈ°λ³Έ μμ±μ, getter, setter μλ΅
}
π μμ: UserRepository μΈν°νμ΄μ€.
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
}
- μμ μ½λμμ
UserRepository
λJpaRepository
λ₯Ό μμλ°μ μλμΌλ‘ κΈ°λ³Έμ μΈ CRUD λ©μλ(save
,findAll
,findById
,delete
λ±)λ₯Ό μ¬μ©ν μ μμ΅λλ€.- λν,
findByName
μ΄λΌλ λ©μλλ₯Ό μ μΈνλ©΄, Spring Data JPAλ μ΄ λ©μλ μ΄λ¦μ λΆμνμ¬ name νλλ₯Ό κΈ°μ€μΌλ‘ μ‘°ννλ SQL 쿼리λ₯Ό μλμΌλ‘ μμ±ν΄μ€λλ€.
- λν,
π μλΉμ€ λ μ΄μ΄μμ μ¬μ©.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.streotype.Service;
@Service
public class UserSevice {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUserByName(String name) {
return userRepository.findByName(name);
}
public void saveUser(User user) {
userRepository.save(user);
}
}
4οΈβ£ Repository ν¨ν΄μ μ¬μ© μμ.
- λ§μ½ νμ¬ MySQLμ μ¬μ©νκ³ μμ§λ§, λ―Έλμ MongoDBλ‘ μ ννκ³ μΆλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€.
- Repository ν¨ν΄μ μ¬μ©νκ³ μλ€λ©΄, λ€μκ³Ό κ°μ μμ
μ΄ κ°λ₯ν©λλ€.
-
- MySQL κΈ°λ°μ UserRepository ꡬνμ MongoDB κΈ°λ°μ μλ‘μ΄ UserRepositoryλ‘ κ΅μ²΄.
-
- μλΉμ€ λ μ΄μ΄λ λΉμ¦λμ€ λ‘μ§μ μμ ν νμ μμ΄, λ°μ΄ν°λ² μ΄μ€ κΈ°μ μ μ νν μ μμ.
-
- Repository ν¨ν΄μ μ¬μ©νκ³ μλ€λ©΄, λ€μκ³Ό κ°μ μμ
μ΄ κ°λ₯ν©λλ€.
5οΈβ£ μμ½.
- Repository ν¨ν΄μ λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ μΊ‘μννμ¬, λ°μ΄ν° μ κ·Ό λ‘μ§μ λΉμ¦λμ€ λ‘μ§κ³Ό λΆλ¦¬νλ λμμΈ ν¨ν΄μ λλ€.
- μ΄ ν¨ν΄μ λ°μ΄ν° μμ€μ λ³κ²½μ λν μ μ°μ±μ μ 곡νκ³ , μ ν리μΌμ΄μ μ½λμ μ μ§λ³΄μμ±κ³Ό μ¬μ¬μ©μ±μ λμ¬μ€λλ€.
- Spring Data JPAλ μ΄λ¬ν Repository ν¨ν΄μ λ§€μ° μ½κ² ꡬνν μ μλλ‘ λ€μν κΈ°λ₯μ μ 곡νμ¬, κ°λ°μλ€μ΄ λ°μ΄ν° μ κ·Ό κ³μΈ΅μ κ°λ¨νκ³ ν¨μ¨μ μΌλ‘ κ΄λ¦¬ν μ μκ² ν΄μ€λλ€.