Home > Spring > πŸƒ[Spring] κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜μ—μ„œ Service의 μ—­ν• .

πŸƒ[Spring] κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜μ—μ„œ Service의 μ—­ν• .
Spring Framework

πŸƒ[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) κ°„μ˜ λͺ…ν™•ν•œ 뢄리λ₯Ό μœ μ§€ν•˜μ—¬ μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ λ†’μž…λ‹ˆλ‹€.