티스토리 뷰

TIL

스프링 동작 흐름 정리

씩씩이5 2025. 3. 15. 23:51

스프링 동작 흐름

스프링은 자바 플랫폼을 위한 오픈소스 웹 어플리케이션 프레임워크다.
스프링의 주요 특징으로는 IOC(Inversion of Control), DI(Dependency Injection), AOP(Aspect Oriented Programmin) 이 있다.

스프링 핵심

  • IOC(Inversion of Control): 객체의 생성과 관리를 프레임워크가 담당
  • -- DI(Dependency Injection): IOC의 한 형태로, 객체가 다른 객체를 생성하지 하는 대신, _외부에서 객체를 주입_하여 모듈 간 결합도(의존성)을 낮춤
  • AOP(Aspect-Oriented Programming): 여러 객체의 공통부분을 모듈화(코드의 중복을 줄이고 유지보수성 높임)

스프링 MVC의 동작 흐름

  1. DispatcherServlet(web.xml에서 설정):
  • Front Controller 역할을 수행하며, 모든 HTTP 요청을 받아들여 처리 흐름을 제어합니다.(정확히는 모든 요청을 가로채는 건 아니고, web.xml에 에 등록된 내용만 가로챈다.)
  • 사용자 요청을 해석하고, 적절한 컨트롤러를 호출합니다
  1. HandlerMapping(servlet-context.xml에서 설정):
  • 클라이언트의 요청을 기반으로 등록된 bean 중에서 어떤 핸들러(컨트롤러 메소드)를 실행할지 결정합니다.
  • Bean은 애플리케이션 시작시에 수행되고 스프링 컨테이너가 설정파일,어노테이션(ex @Component,@RequesMapping ..)을 스캔하여 생성 및 등록한다.
  1. HandlerAdapter:
  • 실제로 컨트롤러 메소드를 호출하는 역할을 합니다[^1].
  1. Controller(Java, @Controller 어노를 통해 스프링에 등록):
  • 클라이언트 요청에 맞는 presentation layer의 처리를 수행합니다.
    @RequestMapping("/users") public class UserController { @GetMapping public List<User> getUsers() { // 비즈니스 로직 수행 return userService.getUsers(); } }
  • 비즈니스 로직을 처리하고, 그 결과를 Model 객체에 저장합니다.
  1. Model(JavaBeans, POJOs, or other Java objects( ex Users)):
  • Controller에서 View로 넘겨줄 데이터를 저장하는 객체입니다.
    public class User { private String name; private String email; // Getter, Setter }
  1. ViewResolver:
  • View 이름을 바탕으로 View 객체를 결정합니다.
  1. View(jsp, nexacro ,Thymeleaf 등이 여기 부분이 속함):
  • 클라이언트에게 화면을 표시합니다. 예를 들어 JSP, Thymeleaf 등이 사용됩니다.
    <%@ page contentType="text/html; charset=UTF-8" %>
    <html>
    <head>
    <title>사용자 목록</title>
    </head>
    <body>
    <h1>사용자 목록</h1>
    <ul>
        <c:forEach items="${users}" var="user">
            <li>${user.name} (${user.email})</li>
        </c:forEach>
    </ul>
    </body>
    </html>

최종 스프링 동작흐름 도식화

_번외로 스프링 MVC 프로젝트의 기본 구조도 슬쩍 보자. 현재 내가 맡고 있는 시스템의 구조와 동일. 이것이 프레임워크의 힘!!_👍👍

스프링 MVC 프로젝트의 기본 구조 및 구동 과정

위 과정을 통해 스프링 MVC는 사용자 요청을 처리하고 응답을 반환합니다.