[Java]/Spring Boot

[Java] Spring Boot: 스프링 MVC , 디스패처 서블릿

기록자_Recordian 2025. 4. 19. 21:26
728x90
반응형
이전 내용

[Java] Spring Boot: ORM, JPA, 하이버네이트

이전 내용 [Java] Spring Boot: 테스트 코드이전 내용 [Java] Spring Boot: 방명록 Rest API 구현(feat. MySQL 연동)이전 내용 [Java] Spring Boot: 코드, 요청&응답 과정 이해하기이전 내용 [Java] Spring Boot: Maven Repository

puppy-foot-it.tistory.com


MVC 패턴

 
MVC는 모델(Model), 뷰(View), 컨트롤러(Controller)의 세 가지 구성 요소로 이루어진 디자인 패턴이다. 이 패턴은 애플리케이션을 구조화하여 코드의 유지보수와 확장을 용이하게 한다.
 
MVC 관련 내용은 하단 링크 참고

[웹개발] MVC(Model-View-Controller) 패턴이란?

MVC(Model-View-Controller) 패턴이란? 소프트웨어 개발을 하다 보면 복잡한 애플리케이션을 보다 효율적으로 관리하고 유지 보수하기 위해서 구조적인 접근이 필요하다. 그중 가장 널리 알려진 디자

puppy-foot-it.tistory.com


스프링 부트에서 MVC 패턴 구현

 
스프링 부트는 MVC 아키텍처를 쉽게 구현할 수 있는 다양한 기능을 제공한다.
 
◆ 모델
모델은 주로 Java 클래스 형태로 구현되며, JPA를 통해 데이터베이스와 연결된다.
 
[모델의 예: 사용자 정보를 다루는 User 엔티티 클래스]

import jakarta.persistence.*;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.time.LocalDateTime;

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "users") // 테이블 이름을 설정합니다.
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "email", nullable = false, unique = true)
    private String email;

    @Column(name = "password", nullable = false)
    private String password;

    @Column(name = "phone")
    private String phone;

    @Column(name = "created_at", updatable = false)
    private LocalDateTime createdAt;

    @Column(name = "updated_at")
    private LocalDateTime updatedAt;

    // 비즈니스 로직 예시
    public void updateProfile(String newName, String newPhone) {
        this.name = newName;
        this.phone = newPhone;
        this.updatedAt = LocalDateTime.now(); // 수정 시간 업데이트
    }
}

 
◆ 뷰
뷰는 Thymeleaf, JSP 또는 HTML 파일로 구현될 수 있다.
 
[뷰의 예: Thymeleaf를 사용한 HTML]

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>User List</title>
</head>
<body>
<h1>User List</h1>
<table>
    <tr>
        <th>ID</th>
        <th>Name</th>
        <th>Email</th>
    </tr>
    <tr th:each="user : ${users}">
        <td th:text="${user.id}"></td>
        <td th:text="${user.name}"></td>
        <td th:text="${user.email}"></td>
    </tr>
</table>
</body>
</html>

 
◆ 컨트롤러
스프링 MVC에서 컨트롤러는 HTTP 요청을 처리하는 역할을 한다.
 
[컨트롤러 예: 사용자 목록을 표시하는 컨트롤러]

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String listUsers(Model model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "userList"; // Thymeleaf 템플릿 이름
    }
}

스프링 MVC

 
웹 계층에 서블릿(Servlet) API를 기반으로 클라이언트의 요청을 처리하는 모듈이 있는데 이를 스프링 웹 MVC(spring-web-mvc) 또는 스프링 MVC라고 한다.
스프링 MVC는 스프링 프레임워크의 웹 애플리케이션 개발 모듈로, MVC 아키텍처를 기반으로 한 웹 프레임워크다. 이를 통해 개발자는 웹 애플리케이션을 구조화된 방식으로 개발할 수 있다. 이를 통해 개발자들은 더 나은 유지보수성과 확장성을 갖춘 애플리케이션을 개발할 수 있다. 또한, 유연성 덕분에 여러 웹 기술과 잘 조화롭게 사용될 수 있다.

[스프링 MVC 주요 특징]

  • MVC 아키텍처: 스프링 MVC는 모델(Model), 뷰(View), 컨트롤러(Controller)의 세 가지 구성 요소로 웹 애플리케이션을 구조화한다. 이로 인해 코드의 분리가 이루어져 유지보수성이 향상된다.
  • 유연한 요청 처리: Dispatcher Servlet이 모든 HTTP 요청을 중앙에서 처리하며, 각 요청에 맞는 컨트롤러를 찾아 호출한다. 이로 인해 다양한 요청을 효율적으로 처리할 수 있다.
  • 유연한 뷰 리졸버: 다양한 뷰 기술(Thymeleaf, JSP 등)을 지원하며, 개발자는 필요한 템플릿 엔진을 선택하여 사용할 수 있다.
  • 다양한 데이터 바인딩: 사용자가 제출한 폼 데이터를 객체에 자동으로 매핑할 수 있는 기능을 제공한다. 이를 통해 개발자는 데이터 처리를 간소화할 수 있다.
  • RESTful API 지원: 스프링 MVC를 통해 RESTful 웹 서비스를 쉽게 구현할 수 있는 기능이 지원된다. 이를 통해 웹 애플리케이션을 보다 현대적으로 개발할 수 있다.
  • 애너테이션 기반 설정: XML 설정 대신 애너테이션을 사용하여 설정할 수 있어, 더 간결하고 이해하기 쉬운 구성이 가능하다.

Dispatcher Servlet

 
Dispatcher Servlet: 중앙에서 모든 요청을 처리하고, 필요한 컨트롤러와 뷰를 관리하는 핵심 컴포넌트로, 사용자의 요청을 받아 해당 요청에 맞는 컨트롤러를 찾아 호출하고, 처리 결과에 따라 적절한 뷰를 반환한다.

 
[디스패처 서블릿(Dispatcher Servlet)의 역할]

  • 요청 처리: 사용자가 웹 브라우저에서 URL을 요청하면, 디스패처 서블릿은 해당 요청을 처음으로 받는다. 모든 요청은 디스패치 서블릿을 통해 처리된다.
  • 컨트롤러 매핑: 디스패처 서블릿은 요청 URL에 따라 적절한 컨트롤러를 찾기 위해 매핑 정보를 사용한다. 이 정보는 @RequestMapping 애너테이션 등으로 정의된다.
  • 컨트롤러 호출: 올바른 컨트롤러가 결정되면, 디스패처 서블릿은 해당 컨트롤러의 메소드를 호출하여 요청을 처리한다.
  • 모델과 뷰 설정: 컨트롤러는 요청을 처리한 결과로 모델과 뷰 이름을 반환하며, 이 정보는 디스패처 서블릿에게 전달된다.
  • 뷰 리졸버(View Resolver): 디스패처 서블릿은 뷰 리졸버를 활용하여 원하는 뷰를 찾는다. 일반적으로 Thymeleaf 또는 JSP와 같은 템플릿을 사용하여 최종 HTML 응답을 생성한다.
  • 응답 반환: 디스패처 서블릿은 최종적으로 생성된 뷰를 사용자에게 반환하여 브라우저에 해당 내용을 표시한다.

[MVC 패턴과의 관계]
디스패처 서블릿과 MVC 패턴의 관계는 상당히 중요하다. 디스패처 서블릿은 MVC 아키텍처에서 핵심 역할을 담당하며, 사용자 요청을 처리하는 과정에서 매우 중요한 중재자 역할을 한다. 이러한 연관성을 통해 스프링 MVC가 효율적으로 작동할 수 있기 때문에, 아키텍처를 이해하는 데 있어 디스패처 서블릿의 역할을 아는 것이 유용하다.

  • 중재자 역할: 디스패처 서블릿은 MVC 패턴에서 컨트롤러와 모델, 뷰 사이의 중재자 역할을 수행한다. 사용자 요청을 처리하기 위해 각 구성 요소 간의 흐름을 조절한다.
  • 요청 관리: 디스패처 서블릿이 모든 요청을 중앙에서 관리하여 코드의 분리 및 유지 보수성을 높인다. 이는 MVC 패턴의 장점인 각 구성 요소 간의 책임 분리를 더욱 강화한다.
  • 유연성 및 확장성: 디스패처 서블릿을 사용하면 애플리케이션의 요청 처리 방식을 유연하게 정의할 수 있어, 추가적인 기능이나 서비스가 필요할 때 쉽게 확장할 수 있다.

* 참고하면 좋은 내용
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte:ptl:dispatcherservlet

egovframework:rte:ptl:dispatcherservlet    [eGovFrame]

Spring MVC Framework의 유일한 Front Controller인 DispatcherServlet은 Spring MVC의 핵심 요소이다. DispatcherServlet은 Controller로 향하는 모든 웹요청의 진입점이며, 웹요청을 처리하며, 결과 데이터를 Client에게 응

www.egovframe.go.kr


다음 내용
 
 

728x90
반응형