Home > Backend > Spring > πŸƒ[Spring] Spring MVCμ—μ„œ `Controller` 객체.

πŸƒ[Spring] Spring MVCμ—μ„œ `Controller` 객체.
Spring Framework

πŸƒ[Spring] Spring MVCμ—μ„œ Controller 객체.

1️⃣ Controller 객체.

  • Spring MVCμ—μ„œ Controller κ°μ²΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³ , ν•΄λ‹Ή μš”μ²­μ— λŒ€ν•΄ μ μ ˆν•œ 응닡을 μƒμ„±ν•˜λŠ” 역할을 ν•˜λŠ” ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€.
  • ControllerλŠ” μ‚¬μš©μž μž…λ ₯을 μ²˜λ¦¬ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•œ ν›„, λ·°λ₯Ό μ„ νƒν•˜μ—¬ κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • Spring MVCμ—μ„œ ControllerλŠ” 주둜 @Controller λ˜λŠ” @RestController μ• λ…Έν…Œμ΄μ…˜μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€.

1️⃣ μ£Όμš” μ—­ν• .

  • 1. HTTP μš”μ²­ 처리
    • Controller κ°μ²΄λŠ” νŠΉμ • URL κ²½λ‘œμ™€ λ§€ν•‘λœ HTTP μš”μ²­(GET, POST, PUT, DELETE λ“±)을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.
      • 각 μš”μ²­μ€ 컨트둀러의 νŠΉμ • λ©”μ„œλ“œμ™€ μ—°κ²°λ˜λ©°, λ©”μ„œλ“œλŠ” μš”μ²­ λ§€κ°œλ³€μˆ˜λ₯Ό μ²˜λ¦¬ν•˜κ³ , ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 2. λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 μˆ˜ν–‰
    • μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ, ControllerλŠ” μ„œλΉ„μŠ€ κ³„μΈ΅μ΄λ‚˜ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ ν˜ΈμΆœν•˜μ—¬ ν•„μš”ν•œ 처리λ₯Ό μˆ˜ν–‰ν•©λ‹ˆλ‹€.
      • μ΄λŠ” λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜€κ±°λ‚˜, 계산을 μˆ˜ν–‰ν•˜κ±°λ‚˜, λ‹€λ₯Έ λ³΅μž‘ν•œ μž‘μ—…μ„ 포함할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 3. λͺ¨λΈ 데이터 μ€€λΉ„
    • ControllerλŠ” 뷰에 전달할 데이터λ₯Ό μ€€λΉ„ν•˜κ³ , 이λ₯Ό Model 객체에 λ‹΄μ•„ 뷰둜 μ „λ‹¬ν•©λ‹ˆλ‹€.
      • 이 λ°μ΄ν„°λŠ” λ·° ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©λ˜μ–΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ³΄μ—¬μ§ˆ μ½˜ν…μΈ λ₯Ό λ™μ μœΌλ‘œ μƒμ„±ν•©λ‹ˆλ‹€.
  • 4. λ·° 선택 및 응닡 생성
    • ControllerλŠ” 처리 결과에 따라 μ–΄λ–€ λ·°λ₯Ό μ‚¬μš©ν• μ§€ κ²°μ •ν•©λ‹ˆλ‹€.
      • 일반적으둜 뷰의 이름을 λ°˜ν™˜ν•˜κ±°λ‚˜, ModelAndView 객체λ₯Ό 톡해 뷰와 λͺ¨λΈ 데이터λ₯Ό ν•¨κ»˜ λ°˜ν™˜ν•©λ‹ˆλ‹€.
      • @RestControllerλ₯Ό μ‚¬μš©ν•˜λ©΄ JSON, XML λ“±μ˜ ν˜•μ‹μœΌλ‘œ 직접 데이터λ₯Ό λ°˜ν™˜ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ Controller 객체의 μ •μ˜.

  • Spring MVCμ—μ„œ ControllerλŠ” @Controller μ• λ…Έν…Œμ΄μ…˜μœΌλ‘œ μ •μ˜λ©λ‹ˆλ‹€.
    • 이 μ• λ…Έν…Œμ΄μ…˜μ€ ν΄λž˜μŠ€κ°€ 컨트둀러 역할을 ν•œλ‹€λŠ” 것을 Springμ—κ²Œ μ•Œλ¦¬λ©°, HTTP μš”μ²­μ„ μ²˜λ¦¬ν•  수 있게 ν•©λ‹ˆλ‹€.

예제: 기본 컨트둀러

@Controller
public class GreetingController {
    
    @GetMapping("/greeting")
    public String greeting(Model model) {
        model.addAttribute("message", "Hello, welcome to our website!");
        return "greeting";
    }
}
  • μœ„ μ½”λ“œμ—μ„œ GreetingController ν΄λž˜μŠ€λŠ” @Controller μ• λ…Έν…Œμ΄μ…˜μ„ 톡해 컨트둀러둜 μ •μ˜λ©λ‹ˆλ‹€.
  • /greeting 경둜둜 GET μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ greeting() λ©”μ„œλ“œκ°€ 호좜되며, "message" λΌλŠ” 데이터λ₯Ό λͺ¨λΈμ— μΆ”κ°€ν•˜κ³ , "greeting" μ΄λΌλŠ” λ·° 이름을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • Spring MVCλŠ” 이 λ·° 이름을 기반으둜 μ‹€μ œ λ·°λ₯Ό λžœλ”λ§ν•©λ‹ˆλ‹€.

3️⃣ @RestController μ‚¬μš©.

  • @RestControllerλŠ” @Controller와 @ResponseBodyλ₯Ό κ²°ν•©ν•œ μ• λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€.
    • 이 μ• λ…Έν…Œμ΄μ…˜μ΄ 적용된 ν΄λž˜μŠ€λŠ” JSONμ΄λ‚˜ XMLκ³Ό 같은 데이터 ν˜•μ‹μœΌλ‘œ 직접 응닡을 λ°˜ν™˜ν•˜λŠ” RESTful μ›Ή μ„œλΉ„μŠ€μ˜ 컨트둀러둜 λ™μž‘ν•©λ‹ˆλ‹€.

예제: REST 컨트둀러

@RestController
public class ApiController {
    
    @GetMapping("/api/greeting")
    public Map<String, String> greeting() {
        Map<String, String> response = new HashMap<>();
        response.put("message", "Hello, welcome to our API!");
        return response;
    }
}
  • μœ„ μ½”λ“œμ—μ„œ ApiController ν΄λž˜μŠ€λŠ” @RestController μ• λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ μ •μ˜λ©λ‹ˆλ‹€.
    • /api/greeting 경둜둜 GET μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ greeting() λ©”μ„œλ“œλŠ” JSON ν˜•μ‹μ˜ 응닡을 λ°˜ν™˜ν•©λ‹ˆλ‹€.

4️⃣ μš”μ²­ 맀핑.

  • ControllerλŠ” URL 경둜 및 HTTP λ©”μ„œλ“œμ™€ λ§€ν•‘λœ λ©”μ„œλ“œλ₯Ό 톡해 μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • Spring MVCλŠ” 이λ₯Ό μœ„ν•΄ @RequestMapping, @GetMapping, @PostMapping λ“± λ‹€μ–‘ν•œ 맀핑 μ• λ…Έν…Œμ΄μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

예제: μš”μ²­ 맀핑.

@Controller
@RequestMapping("/users")
public class UserController {
    
    @GetMapping("/{id}")
    public String getUser(@PathVariable("id") Long id, Model model) {
        User user = userService.findUserById(id);
        model.addAttribute("user", user);
        return "userProfile";
    }
    
    @PostMapping("/create")
    public String createUser(@ModelAttribute User user) {
        userService.saveUser(user);
        return "redirect:/users/" + user.getId();
    }
}
  • μœ„ μ˜ˆμ œμ—μ„œ UserControllerλŠ” /users κ²½λ‘œμ™€ κ΄€λ ¨λœ μš”μ²­μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€.
    • /users/{id} 경둜둜 GET μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, ν•΄λ‹Ή μ‚¬μš©μžμ˜ ν”„λ‘œν•„ 정보λ₯Ό μ‘°νšŒν•˜μ—¬ "userProfile" 뷰에 μ „λ‹¬ν•©λ‹ˆλ‹€.
    • /users/create 경둜둜 POST μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄, μƒˆλ‘œμš΄ μ‚¬μš©μžλ₯Ό μƒμ„±ν•˜κ³ , ν•΄λ‹Ή μ‚¬μš©μžμ˜ ν”„λ‘œν•„ νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•©λ‹ˆλ‹€.

5️⃣ μš”μ•½.

  • Spring MVCμ—μ„œ Controller κ°μ²΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ HTTP μš”μ²­μ„ μ²˜λ¦¬ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ‹€ν–‰ν•œ ν›„, μ μ ˆν•œ 응닡을 μƒμ„±ν•˜λŠ” 핡심 ꡬ성 μš”μ†Œμž…λ‹ˆλ‹€.
  • ControllerλŠ” μš”μ²­κ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ 둜직, 그리고 λ·° λ Œλ”λ§μ„ μ—°κ²°ν•˜λŠ” 역할을 ν•˜λ©°, Spring MVC μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ€‘μš”ν•œ 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.