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) ๊ฐ„์˜ ๋ช…ํ™•ํ•œ ๋ถ„๋ฆฌ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.