π[Spring] κ³μΈ΅ν μν€ν μ²μμ Serviceμ μν .
Java λ°±μλ μ ν리μΌμ΄μ μ κ³μΈ΅ν μν€ν μ²μμ Service κ³μΈ΅μ λΉμ¦λμ€ λ‘μ§ μ μ²λ¦¬νλ μ€κ° κ³μΈ΅μ λλ€.
Service κ³μΈ΅μ Controllerμ Repository κ³μΈ΅ μ¬μ΄μ μμΉνλ©°, λΉμ¦λμ€ κ·μΉμ κ΄λ¦¬νκ³ λ°μ΄ν°λ₯Ό μ‘°μνλ μν μ μνν©λλ€.
1οΈβ£ Service κ³μΈ΅μ μ£Όμ μν .
1. λΉμ¦λμ€ λ‘μ§ μ²λ¦¬.
- Service κ³μΈ΅μ μ ν리μΌμ΄μ μ ν΅μ¬ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬ν©λλ€.
- λ°μ΄ν°λ₯Ό λ¨μν μ λ¬νλ μν μ νλ Controllerμ λ¬λ¦¬, Serviceλ 볡μ‘ν μ°μ°, κ·μΉ μ μ©, 쑰건 νλ¨ λ±μ μμ μ μνν©λλ€.
- μ΄λ₯Ό ν΅ν΄ λΉμ¦λμ€ μꡬ μ¬νμ μΆ©μ‘±νλ κ²°κ³Όλ₯Ό λμΆν©λλ€.
2. νΈλμμ κ΄λ¦¬.
- Service κ³μΈ΅μ μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ μ°μ°μ νΈλμμ λ¨μλ‘ λ¬Άμ΄ κ΄λ¦¬ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμμ λ°μ΄ν°λ₯Ό μ½κ±°λ μΈ λ νΈλμμ μ μ μ©νμ¬ λͺ¨λ μμ μ΄ μ±κ³΅μ μΌλ‘ μλ£λκ±°λ, λ¬Έμ κ° μκΈ°λ©΄ λ‘€λ°±νλ λ±μ μμ μ μνν©λλ€.
- Springμμλ
@Transactional
μ΄λ Έν μ΄μ μ ν΅ν΄ νΈλμμ μ κ΄λ¦¬ν μ μμ΅λλ€.
3. Repository κ³μΈ΅κ³Ό ν΅μ .
- Service κ³μΈ΅μ Repository κ³μΈ΅μ μ¬μ©ν΄ λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©ν©λλ€.
- Service κ³μΈ΅μ λΉμ¦λμ€ λ‘μ§μ νμν λ°μ΄ν°λ₯Ό Repositoryμμ κ°μ Έμ€κ±°λ μ μ₯νλ μμ μ μνν©λλ€.
- μ΄λ κ² ν¨μΌλ‘μ¨, λΉμ¦λμ€ λ‘μ§κ³Ό λ°μ΄ν°λ² μ΄μ€ μ κ·Ό λ‘μ§μ λΆλ¦¬ν΄ μ½λλ₯Ό λ κΉλνκ² μ μ§ν μ μμ΅λλ€.
4. λ€μ€ λ°μ΄ν° μμ€ μ²λ¦¬.
- Service κ³μΈ΅μ λ¨μΌ λ°μ΄ν° μμ€κ° μλ μ¬λ¬ λ°μ΄ν° μμ€μ λν μ‘°μμ μ€μμμ κ΄λ¦¬ν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, μ¬λ¬ λ°μ΄ν°λ² μ΄μ€μμ λ°μ΄ν°λ₯Ό μ‘°ννκ³ μ΄λ₯Ό κ²°ν©νμ¬ μ²λ¦¬νλ λ±μ 볡μ‘ν μμ μ μνν μ μμ΅λλ€.
5. λΉμ¦λμ€ λ‘μ§ μ¬μ¬μ©.
- μ¬λ¬ Controllerμμ λμΌν λΉμ¦λμ€ λ‘μ§μ΄ νμν κ²½μ°, Service κ³μΈ΅μμ ν΄λΉ λ‘μ§μ ꡬννκ³ μ΄λ₯Ό μ¬λ¬ 컨νΈλ‘€λ¬μμ μ¬μ¬μ©ν μ μμ΅λλ€.
- μ΄λ₯Ό ν΅ν΄ μ½λ μ€λ³΅μ λ°©μ§νκ³ , λ‘μ§μ λ¨μΌννμ¬ μ μ§λ³΄μμ±μ λμΌ μ μμ΅λλ€.
6. 보μ λ° κ²μ¦ μ²λ¦¬.
- Service κ³μΈ΅μ μΆκ°μ μΈ κ²μ¦μ΄λ 보μ μ²λ¦¬λ₯Ό μνν μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, μ¬μ©μκ° νΉμ λ°μ΄ν°λ₯Ό μ‘°νν κΆνμ΄ μλμ§ κ²μ¦νκ±°λ, μ λ ₯λ λ°μ΄ν°λ₯Ό μΆκ°μ μΌλ‘ νμΈνλ μμ μ ν¬ν¨ν μ μμ΅λλ€.
7. μΈλΆ μμ€ν κ³Όμ ν΅μ .
- Service κ³μΈ΅μ μΈλΆ APIμμ ν΅μ , λ©μΌ λ°μ‘, λ©μμ§ ν μ²λ¦¬ λ± λΉμ¦λμ€ λ‘μ§μ μννκΈ° μν΄ λ€λ₯Έ μμ€ν μ΄λ μλΉμ€μ μνΈμμ©νλ μν λ λ΄λΉν©λλ€.
2οΈβ£ μμ μ½λ
Spring Boot μ ν리μΌμ΄μ μμμ Service κ³μΈ΅ μμλ₯Ό ν΅ν΄ κ·Έ μν μ ꡬ체μ μΌλ‘ μ΄ν΄λ³Ό μ μμ΅λλ€.
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository
}
@Transactional
public UserDTO getUserById(Long id) {
User user = userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException("User not found with id " + id));
return new UserDTO(user);
}
@Transactional
public UserDTO createUser(UserDTO userDTO) {
User user = new User(userDTO.getName(), userDTO.getEmail());
User savedUser = userRepository.save(user);
return new UserDTO(savedUser);
}
@Transactional
public void deleteUser(Long id) {
if (!userRepository.existsById(id)) {
thorw new UserNotFoundException("User not found with id " + id);
}
userRepository.deleteById(id);
}
}
3οΈβ£ μ€λͺ .
-
@Service
- Springμμ μλΉμ€ ν΄λμ€μμ λνλ΄λ μ΄λ Έν μ΄μ μ λλ€.
- μ΄ ν΄λμ€λ λΉμ¦λμ€ λ‘μ§μ μ²λ¦¬νλ κ³³ μ λλ€
-
@Transactional
- λ©μλκ° νΈλμμ μμμ μ€νλλλ‘ λ³΄μ₯ν©λλ€.
- μ¬λ¬ λ°μ΄ν°λ² μ΄μ€ μ°μ°μ΄ νΈλμμ λ¨μλ‘ μ²λ¦¬λλ©°, μ€λ₯ λ°μ μ λ‘€λ°±λ©λλ€.
-
λΉμ¦λμ€ λ‘μ§
-
getUserById
λ©μλλ μ¬μ©μκ° μ‘΄μ¬νμ§ μμΌλ©΄ μμΈλ₯Ό λμ§λ₯Ό λ‘μ§μ ν¬ν¨νκ³ μμΌλ©°,createUser
λ μ¬μ©μ κ°μ²΄λ₯Ό μμ±νκ³ μ΄λ₯Ό μ μ₯ν ν λ€μ λ°ννλ λ‘μ§μ μ²λ¦¬ν©λλ€.
-
-
Repositoryμ ν΅μ
- Serviceλ Repository κ³μΈ΅μ μ¬μ©ν΄ λ°μ΄ν°λ² μ΄μ€μ μ κ·Όνμ¬ μ¬μ©μ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ μ μ₯ν©λλ€.
4οΈβ£ κ²°λ‘ .
Service κ³μΈ΅μ μ ν리μΌμ΄μ
μ ν΅μ¬ λΉμ¦λμ€ λ‘μ§μ μΊ‘μννκ³ κ΄λ¦¬νλ μν μ ν©λλ€.
μ΄λ₯Ό ν΅ν΄ λΉμ¦λμ€ λ‘μ§μ μ½κ² μ μ§νκ³ μ¬μ¬μ©ν μ μμΌλ©°, Controllerμ λ°μ΄ν° μ κ·Ό κ³μΈ΅(Repository) κ°μ λͺ
νν λΆλ¦¬λ₯Ό μ μ§νμ¬ μμ€ν
μ μ μ°μ±κ³Ό μ μ§λ³΄μμ±μ λμ
λλ€.