๐[Spring] ์ธ์ @Service
,@Repository
,@Controller
์ ๊ฐ์ ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ ๊น?
@Service
,@Repository
,@Controller
์ ๊ฐ์ ์ด๋
ธํ
์ด์
์ Spring Framework์์ ํน์ ๋ ์ด์ด์ ์ญํ ์ ๋ช
ํํ ํ๊ณ , ์๋์ผ๋ก ๋น์ ๋ฑ๋กํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ์ด๋
ธํ
์ด์
๋ค์ @Component
์ด๋
ธํ
์ด์
์ ํน์ํ๋ ๋ฒ์ ์ผ๋ก, ๊ฐ๊ฐ์ ๋ ์ด์ด๋ฅผ ๊ตฌ๋ถํ์ฌ Spring ์ ํ๋ฆฌ์ผ์ด์
์ ๋ ๊ตฌ์กฐํํ๊ณ , ์ฑ
์์ ๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
1๏ธโฃ @Service
-
์ฌ์ฉ ์์
- ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ์๋น์ค ๊ณ์ธต์์ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ค๋ช
-
@Service
๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ด์์ ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํํ๋ ํด๋์ค์ ๋ถ์ ๋๋ค. - ์ด ๊ณ์ธต์ ์ปจํธ๋กค๋ฌ์์ ์ ๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๊ฑฐ๋ ๋ค๋ฅธ ๋น์ฆ๋์ค ๊ท์น์ ์ ์ฉํฉ๋๋ค.
- ๋ํ, ์ด ๊ณ์ธต์ ํธ๋์ญ์ ๊ด๋ฆฌ๋ ์์ธ ์ฒ๋ฆฌ์ ๊ฐ์ ์ค์ํ ์์ ๋ ์ํํ ์ ์์ต๋๋ค.
-
-
์ฌ์ฉ ์์
@Service public class UserService { public User findUserById(Long id) { // ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ return userRepository.findById(id).orElseThrow(); } }
-
์ฌ์ฉ ๋ชฉ์
-
@Service
๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ ํด๋น ํด๋์ค๊ฐ ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ์๋น์ค ๊ณ์ธต์ ์ญํ ์ ํ๋ค๋ ์ ์ ๋ช ํํ ํ๊ณ , Spring ์ปจํ ์ด๋์ ์ํด ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋ก๋๊ฒ ํฉ๋๋ค. - ๋ํ,
@Service
์ด๋ ธํ ์ด์ ์ ํตํด Spring์ด ํด๋น ํด๋์ค์ ๋ํด ์ถ๊ฐ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ ์ ์์ต๋๋ค(์: ํธ๋์ญ์ ๊ด๋ฆฌ).
-
2๏ธโฃ @Repository
-
์ฌ์ฉ ์์
- ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต(DAO, Data Access Object) ์์ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ค๋ช
-
@Repository
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ ์์์ฑ ๊ณ์ธต์์ ์ฌ์ฉ๋ฉ๋๋ค. - ๋ณดํต ๋ฐ์ดํฐ๋ฒ ์ด์ค CRUD ์์ ์ ์ํํ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ง์ ์ ์ธ ์ฐ๊ฒฐ, ์ฟผ๋ฆฌ ์คํ, ๊ฒฐ๊ณผ ์ฒ๋ฆฌ ๋ฑ์ ๋ด๋นํฉ๋๋ค.
- Spring์์๋
@Repository
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ธ๋ฅผ Spring ์์ธ๋ก ๋ณํํ๋ ๋ฑ์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
-
-
์ฌ์ฉ ์์
@Repository public interface UserRepository extends JpaRepository<User, Long> { // ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํ ๋ฉ์๋ ์ ์ }
-
์ฌ์ฉ ๋ชฉ์
-
@Repository
๋ ํด๋น ํด๋์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๋ DAO ์ญํ ์ ํ๋ค๋ ์ ์ ๋ช ํํํ๊ณ , ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋ก๋๊ฒ ํฉ๋๋ค. - ๋ํ,
@Repository
๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ด๋ จ๋ ์์ธ๋ฅผ ํ์คํ๋ Spring ์์ธ๋ก ๋ณํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
-
3๏ธโฃ @Controller
-
์ฌ์ฉ ์์
- ์น ๊ณ์ธต(ํ๋ ์ ํ ์ด์ ๊ณ์ธต) ์์ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ค๋ช
-
@Controller
๋ ์ฌ์ฉ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ์ ์ ํ ์๋ต์ ๋ฐํํ๋ ์ญํ ์ ํ๋ ์น ์ปจํธ๋กค๋ฌ ํด๋์ค์ ์ฌ์ฉ๋ฉ๋๋ค. - ์ฃผ๋ก, Spring MVC ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ฉฐ, ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ์ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ HTML ํ์ด์ง๋ JSON ํ์์ผ๋ก ๋ฐํํฉ๋๋ค.
-
-
์ฌ์ฉ ์์
@Controller public class UserController { @GetMapping("/user/{id}") public String getUser(@PathVariable Long id, Model model) { User user = userServie.findUserById(id); model.addAttribute("user", user); return "userDetail"; } }
-
์ฌ์ฉ ๋ชฉ์
-
@Controller
๋ ํด๋น ํด๋์ค๊ฐ ์น ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ์์ ๋ช ํํ ํ๋ฉฐ, Spring ์ปจํ ์ด๋์ ์ํด ์๋์ผ๋ก ๋น์ผ๋ก ๋ฑ๋ก๋ฉ๋๋ค. - ์น ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํ๊ณ , ์๋ต์ ์์ฑํ๋ ์ญํ ์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ ์ธํ ํ์ด์ค ์ญํ ์ ํฉ๋๋ค.
-
4๏ธโฃ @RestController
-
์ฌ์ฉ ์์
- RESTful ์น ์๋น์ค ๊ณ์ธต์์ ์ฌ์ฉ๋ฉ๋๋ค.
-
์ค๋ช
-
@RestController
๋@Controller
์@ResponseBody
๊ฐ ๊ฒฐํฉ๋ ์ด๋ ธํ ์ด์ ์ผ๋ก, ์ฃผ๋ก JSON ๋๋ XML ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๋ RESTful API๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ๋ฉ๋๋ค. - Spring MVC์์ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
-
-
์ฌ์ฉ ์์
@RestController public class UserRestController { @GetMapping("/api/users/{id}") public User getUser(@PathVariable Long id) { return userService.findUserById(id); } }
-
์ฌ์ฉ ๋ชฉ์
-
@RestController
๋ ์ฃผ๋ก REST API ๋ฅผ ๊ฐ๋ฐํ ๋ ์ฌ์ฉ๋๋ฉฐ, ์ปจํธ๋กค๋ฌ์์ ๋ฐํํ๋ ๋ฐ์ดํฐ๋ฅผ HTML ํ์ด์ง๊ฐ ์๋ JSON์ด๋ XML๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ฐํํฉ๋๋ค. - REST API ์ค๊ณ๋ฅผ ํ ๋ ์ด ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์์ ์๋๋ฅผ ๋ช ํํ ์ ๋ฌํ ์ ์์ต๋๋ค.
-
5๏ธโฃ ์ธ์ ์ฌ์ฉํด์ผ ํ๋๊ฐ?
-
@Service
- ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋ ํด๋์ค์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ฑฐ๋ ๊ท์น์ ์ ์ฉํ๋ ๋ฑ์ ์์ ์ ์ํํ๋ ๊ณณ์ ๋๋ค.
-
@Repository
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ฒ๋ฆฌํ๋ ํด๋์ค์ ์ฌ์ฉํฉ๋๋ค.
- ์ฃผ๋ก ๋ฐ์ดํฐ ์ ์ฅ, ์์ , ์กฐํ, ์ญ์ ์ ๊ฐ์ ์์์ฑ ๋ก์ง์ด ํฌํจ๋ DAO ๋๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ถ์ ๋๋ค.
-
@Controller
- ์ฌ์ฉ์๋ก๋ถํฐ HTTP ์์ฒญ์ ๋ฐ์ ์๋ต์ ์์ฑํ๋ ์น ์ปจํธ๋กค๋ฌ์ ์ฌ์ฉํฉ๋๋ค.
- ์ฃผ๋ก Spring MVC์์ ๋์ ์ธ ์น ํ์ด์ฆ๋ฅผ ๋๋๋งํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
-
@RestController
- RESTful ์น ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์ปจํธ๋กค๋ฌ์ ์ฌ์ฉํฉ๋๋ค.
- ์ด ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ๋ฉด ์น ์์ฒญ์ ์ฒ๋ฆฌํ ํ JSON ๋๋ XML ํ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
6๏ธโฃ ๊ฒฐ๋ก
- ์ด ์ด๋ ธํ ์ด์ ๋ค์ ๊ฐ๊ฐ์ ํด๋์ค๊ฐ ์ด๋ค ์ญํ ์ ๋ด๋นํ๋์ง ๋ช ํํ ๊ตฌ๋ถํด ์ค์ผ๋ก์จ, Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐํ์ ๊ด๋ฆฌ์ ๋์์ ์ค๋๋ค.
- Spring ์ปจํ ์ด๋๋ ์ด ์ด๋ ธํ ์ด์ ์ด ๋ถ์ ํด๋์ค๋ค์ ์๋์ผ๋ก ๊ฐ์งํ์ฌ ๋น์ผ๋ก ๋ฑ๋กํ๊ณ , ํ์ํ ๊ณณ์ ์์กด์ฑ์ ์ฃผ์ ํด์ค๋๋ค.