Spring MVC ๊ฐœ์š”

๐Ÿ” ๊ฐœ์š”

  • Spring MVC๋Š” Spring Framework๊ฐ€ ์ œ๊ณตํ•˜๋Š” Servlet API ๊ธฐ๋ฐ˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • MVC ํŒจํ„ด๊ณผ Front Controller ํŒจํ„ด์„ ๊ตฌํ˜„ํ•˜์—ฌ ์š”์ฒญ ํ๋ฆ„์„ ์ค‘์•™์—์„œ ์ œ์–ดํ•˜๊ณ , ๊ด€์‹ฌ์‚ฌ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค.
  • ํ•ต์‹ฌ ๊ตฌ์„ฑ์š”์†Œ์ธ DispatcherServlet์ด ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›์•„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์œ„์ž„ํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•œ๋‹ค.
  • MVC ํŒจํ„ด (Model - View - Controller)
  • Front Controller ํŒจํ„ด - ์š”์ฒญ์˜ ํ๋ฆ„์„ ์ค‘์•™ ์ง‘์ค‘์‹์œผ๋กœ ๊ด€๋ฆฌ (๊ณตํ†ต ๊ธฐ๋Šฅ ์ฒ˜๋ฆฌ: ์ธ์ฆ, ์ธ๊ฐ€ ๋“ฑ)

โ˜๐Ÿป ํ•œ์ค„ ์š”์•ฝ

Spring MVC๋Š” DispatcherServlet์„ ์ค‘์‹ฌ์œผ๋กœ ํ•œ MVC ์•„ํ‚คํ…์ฒ˜๋กœ, ์š”์ฒญ์„ ์ค‘์•™ ์ง‘์ค‘์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์ปจํŠธ๋กค๋Ÿฌยท๋ทฐยท๋ชจ๋ธ์„ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•œ๋‹ค.


๐Ÿค” ์™œ ํ•„์š”ํ•œ๊ฐ€?

  • ์„œ๋ธ”๋ฆฟ/JSP ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ์‹œ ๋ฐœ์ƒํ•˜๋Š” ์ค‘๋ณต ์ฝ”๋“œ(์š”์ฒญ/์‘๋‹ต ์ฒ˜๋ฆฌ, ํŒŒ๋ผ๋ฏธํ„ฐ ํŒŒ์‹ฑ, ๋ทฐ ๋ Œ๋”๋ง)๋ฅผ ์ œ๊ฑฐ
  • ์š”์ฒญ ํ๋ฆ„์„ ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ์œ ์—ฐํ•œ ํ™•์žฅ์„ฑ: ์ธํ„ฐ์…‰ํ„ฐ, ํ•„ํ„ฐ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ๋“ฑ์œผ๋กœ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๊ฐ€ ์šฉ์ด

โš™๏ธ ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ

DispatcherServlet

  • ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›์•„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์ „๋‹ฌํ•˜๋Š” Front Controller
  • ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘, ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ, ๋ทฐ ๋ฆฌ์กธ๋ฒ„ ๋“ฑ์„ ํ†ตํ•ด ์š”์ฒญ-์‘๋‹ต ์ฒ˜๋ฆฌ

WebMvcAutoConfiguration

  • Spring Boot์—์„œ ๊ธฐ๋ณธ์ ์ธ MVC ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ž๋™ ์„ค์ •

EnableWebMvcConfiguration

  • ์ฃผ์š” ๋นˆ ์ƒ์„ฑ ๋ฐ ์„ค์ •:
    • RequestMappingHandlerMapping
    • RequestMappingHandlerAdapter

WebMvcConfigurer

  • MVC ์„ค์ •์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • ๋ฉ”์„œ๋“œ ์ข…๋ฅ˜:
    • addXxx(): ์ƒˆ๋กœ์šด ๋นˆ/์„ค์ • ์ถ”๊ฐ€
    • configureXxx(): ๊ธฐ์กด ์„ค์ • ๋ณ€๊ฒฝ

๐Ÿš€ @SpringBootApplication

  • Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ์ž‘์ ์ด๋ฉฐ, ๋‹ค์Œ์„ ํฌํ•จ:
    • @Configuration: Bean ๋“ฑ๋ก ์„ค์ • ํด๋ž˜์Šค
    • @ComponentScan: ์ปดํฌ๋„ŒํŠธ ์Šค์บ”
    • @EnableAutoConfiguration: ์ž๋™ ์„ค์ • ํ™œ์„ฑํ™”

๐ŸŽฎ Controller

@Controller

  • ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  View ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ
@Controller
public class HomeController {
    @GetMapping("/")
    public String index() {
        return "index";
    }
}

@RequestMapping ๊ณ„์—ด ์• ๋…ธํ…Œ์ด์…˜

  • URL, HTTP Method, ์กฐ๊ฑด ๋“ฑ์— ๋”ฐ๋ผ ๋ฉ”์„œ๋“œ ๋งคํ•‘
  • ์ถ•์•ฝํ˜•:
    • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping
@GetMapping("/persons/{id}")
public Person getPerson(@PathVariable Long id) { ... }

๐Ÿ“ฆ Model & ํŒŒ๋ผ๋ฏธํ„ฐ ์ฒ˜๋ฆฌ

๋ชจ๋ธ ๊ฐ์ฒด

  • Model, Map, ModelMap ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ๋ทฐ์— ๋ฐ์ดํ„ฐ ์ „๋‹ฌ
@GetMapping("/user")
public String getUsers(Model model) {
    model.addAttribute("users", userRepository.getUsers());
    return "users";
}

ํŒŒ๋ผ๋ฏธํ„ฐ ๋ฐ”์ธ๋”ฉ

  • @RequestParam: ์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜์‹ 
  • @PathVariable: URL ๊ฒฝ๋กœ ๋ณ€์ˆ˜ ๋ฐ”์ธ๋”ฉ
  • @RequestHeader, @CookieValue: HTTP ํ—ค๋”, ์ฟ ํ‚ค ๊ฐ’ ์ฝ๊ธฐ
  • @ModelAttribute: ์š”์ฒญ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ์ž๋™ ๋ฐ”์ธ๋”ฉ

โš ๏ธ ์ฃผ์˜ํ•  ์ 

  • @Controller๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ทฐ ๋ฐ˜ํ™˜, API ์‘๋‹ต ์‹œ @RestController ๋˜๋Š” @ResponseBody ์‚ฌ์šฉ
  • @ModelAttribute์™€ @RequestBody๋Š” ๋ชฉ์ ์ด ๋‹ค๋ฆ„:
    • @ModelAttribute: ํผ ๋ฐ์ดํ„ฐ/์ฟผ๋ฆฌ ํŒŒ๋ผ๋ฏธํ„ฐ โ†’ ๊ฐ์ฒด
    • @RequestBody: JSON/XML ์š”์ฒญ ๋ฐ”๋”” โ†’ ๊ฐ์ฒด
  • Spring Boot๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ DispatcherServlet์ด / ๊ฒฝ๋กœ์— ๋งคํ•‘๋จ

๐Ÿ”— ๊ด€๋ จ