Spring MVC(Model-View-Controller)

Kkd·2024년 12월 16일
0

매일메일 개념정리

목록 보기
31/93

Spring MVC란?

Spring MVC(Model-View-Controller)는 Spring Framework에서 제공하는 웹 애플리케이션 개발을 위한 모듈입니다.
웹 요청과 응답을 처리하고, 비즈니스 로직과 UI를 효과적으로 분리할 수 있도록 설계되었습니다.


Spring MVC의 동작 구조

Spring MVC는 요청(Request)이 들어왔을 때 이를 적절히 처리하고 응답(Response)을 반환하는 흐름을 제공합니다.
다음은 Spring MVC의 주요 동작 과정을 설명합니다:

  1. 클라이언트 요청
    사용자가 브라우저 또는 API 클라이언트를 통해 요청을 보냅니다.

  2. DispatcherServlet
    모든 요청은 DispatcherServlet에서 시작됩니다. 이 서블릿은 요청을 분석하고 알맞은 컨트롤러로 전달하는 역할을 합니다.

  3. HandlerMapping
    요청 URL과 매핑되는 컨트롤러를 찾습니다. (예: /users 요청은 UserController로 매핑)

  4. Controller
    비즈니스 로직을 처리하거나 서비스(Service) 계층과 소통하여 필요한 데이터를 가져옵니다.

  5. ViewResolver
    컨트롤러가 반환한 뷰 이름(View Name)을 기반으로 실제 뷰(HTML, JSP, Thymeleaf 등)를 찾습니다.

  6. 응답 반환
    최종적으로 뷰(View)를 렌더링하여 클라이언트에게 응답을 반환합니다.


Spring MVC의 주요 구성 요소

1. DispatcherServlet

  • Spring MVC의 프론트 컨트롤러로, 모든 요청을 받아 처리하는 중심 역할을 합니다.
  • 주요 역할:
    1. 요청을 처리할 컨트롤러 찾기.
    2. 요청에 맞는 비즈니스 로직 실행.
    3. 결과를 적절한 뷰(View)에 전달.

2. Controller

  • 요청을 처리하는 로직을 담당하며, 주로 REST API 엔드포인트를 정의합니다.
  • Spring에서는 @Controller 또는 @RestController로 컨트롤러를 정의합니다.
@RestController
@RequestMapping("/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        // 비즈니스 로직 수행
        User user = userService.findById(id);
        return ResponseEntity.ok(user);
    }
}

3. Model

  • 애플리케이션의 데이터를 저장하거나 전송하는 객체입니다.
  • Spring에서는 Model 또는 ModelAndView를 사용해 뷰에 데이터를 전달합니다.
@Controller
public class GreetingController {

    @GetMapping("/greeting")
    public String greeting(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "greeting";
    }
}

4. View

  • 최종적으로 클라이언트에게 보여질 화면(UI)을 담당합니다.
  • Spring MVC는 여러 뷰 템플릿 엔진(Thymeleaf, JSP, Mustache 등)을 지원합니다.

5. Service

  • 컨트롤러의 요청을 처리하는 비즈니스 로직 계층입니다.
  • 데이터 접근 계층(DAO/Repository)과 컨트롤러 사이의 중간 계층 역할을 합니다.

6. Repository

  • 데이터베이스와의 직접적인 통신을 담당합니다.
  • Spring Data JPA와 같은 기술을 사용해 구현됩니다.

Spring MVC 주요 어노테이션

1. 요청 매핑

  • @RequestMapping: 특정 URL에 컨트롤러나 메서드를 매핑합니다.
  • 축약 어노테이션:
    • @GetMapping (GET 요청)
    • @PostMapping (POST 요청)
    • @PutMapping (PUT 요청)
    • @DeleteMapping (DELETE 요청)

2. 파라미터 매핑

  • @PathVariable: URL 경로 변수 매핑
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable Long id) { ... }
  • @RequestParam: 쿼리 파라미터 매핑
    @GetMapping("/search")
    public List<User> search(@RequestParam String keyword) { ... }

3. 응답 처리

  • @ResponseBody: 메서드 반환값을 JSON 또는 XML 형식으로 응답
  • @RestController: @Controller + @ResponseBody 역할 수행

4. 데이터 바인딩

  • @ModelAttribute: 요청 데이터를 객체로 매핑
    @PostMapping("/users")
    public String createUser(@ModelAttribute User user) { ... }
  • @RequestBody: JSON 데이터를 객체로 변환
    @PostMapping("/users")
    public ResponseEntity<User> createUser(@RequestBody User user) { ... }

Spring MVC의 특징

  1. 요청과 응답의 분리

    • 요청 처리(Controller)와 응답(View)를 명확히 분리하여 코드 재사용성과 유지보수성을 향상.
  2. 유연한 뷰 처리

    • HTML, JSP, PDF, Excel, JSON 등 다양한 형식의 응답을 지원.
  3. 유연한 확장성

    • 요청 처리 과정에서 인터셉터를 추가하거나 커스터마이징 가능.
  4. RESTful API 지원

    • RESTful 웹 서비스를 쉽게 구현할 수 있는 구조 제공.

Spring MVC 학습 포인트

  1. DispatcherServlet의 동작 과정 이해하기

    • 요청에서 응답까지의 흐름을 그림으로 그려보세요.
  2. 요청 매핑 어노테이션 활용

    • @GetMapping, @PostMapping을 사용한 다양한 엔드포인트 구현.
  3. 템플릿 엔진 활용

    • Thymeleaf 또는 JSP를 사용하여 간단한 HTML 뷰 생성.
  4. Rest API 설계와 구현

    • JSON 데이터를 주고받는 API를 설계하고, 테스트 도구(Postman 등)로 확인해보세요.
  5. 유효성 검증 추가

    • @Valid와 Bean Validation을 사용하여 입력 데이터를 검증.
  6. 에러 핸들링

    • @ControllerAdvice@ExceptionHandler를 사용해 전역 예외 처리 구현.

Spring MVC는 웹 애플리케이션 개발에서 가장 중요한 구성 요소 중 하나입니다.
DispatcherServlet의 동작을 중심으로 학습을 시작하고, RESTful API와 템플릿 엔진을 통해 실습을 진행하면 효과적입니다.

추가 학습 자료

profile
🌱

0개의 댓글