Home > Spring > ๐Ÿƒ[Spring] ์–ธ์ œ `@Service`,`@Repository`,`@Controller`์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ• ๊นŒ?

๐Ÿƒ[Spring] ์–ธ์ œ `@Service`,`@Repository`,`@Controller`์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ• ๊นŒ?
Spring Framework

๐Ÿƒ[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 ์ปจํ…Œ์ด๋„ˆ๋Š” ์ด ์–ด๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์„ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•˜์—ฌ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•˜๊ณ , ํ•„์š”ํ•œ ๊ณณ์— ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•ด์ค๋‹ˆ๋‹ค.