๐[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) ๊ฐ์ ๋ช
ํํ ๋ถ๋ฆฌ๋ฅผ ์ ์งํ์ฌ ์์คํ
์ ์ ์ฐ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์
๋๋ค.