π[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 컨ν μ΄λλ μ΄ μ΄λ Έν μ΄μ μ΄ λΆμ ν΄λμ€λ€μ μλμΌλ‘ κ°μ§νμ¬ λΉμΌλ‘ λ±λ‘νκ³ , νμν κ³³μ μμ‘΄μ±μ μ£Όμ ν΄μ€λλ€.