Spring은 어떻게 동작 하는가?

아몬드봉봉·2024년 2월 20일
0

Spring Framework

목록 보기
2/3

지금까지 개발을 하면서 스프링에 대하여 잘 모르고 개발을 했었다. 그래서 스프링이 어떻게 동작하는지 이해하기 쉽게 정리하며 공부해보려고 한다. 그럼 Spring MVC 의 동작 구조, 실행 순서는 어떻게 되는지 알아보자

Spring Web MVC

Spring Web MVC는 Servlet API를 기반으로 구축된 독창적인 웹 프레임워크이며 처음부터 Spring Framework에 포함되었다. 정식 이름인 Spring Web MVC는 소스 모듈 Spring-webmvc 에서 유래되었지만 일반적으로 Spring MVC로 알려져 있다.

Model, View, Controller 구성요소를 사용하여 사용자의 다양한 HTTP Request를 처리하고 단순한 텍스트 형식의 응답부터 REST 형식의 응담은 물론 View를 표시하는 HTML을 return하는 응답까지 다양한 요청, 응답을 할 수 있는 웹 프레임워크이다.

MVC 패턴

Spring Web MVC를 알기전 MVC 패턴에 대해 알고 있어야 한다. MVC 패턴은 웹 애플리케이션을 개발할 때 사용하는 디자인 패턴이다. 개발 영역을 Model-View-Controller로 구분해서 각 역할에 맞게 코드를 작성하는 개발 방식으로 사용자 인터페이스로부터 비즈니스 로직을 분리하여 서로에게 영향을 주지 않아 유연하고 확장성 있게 웹 애플리케이션을 만들 수 있다.

Model

애플리케이션의 정보, 데이터의 가공을 책임지고 데이터베이스와 상호작용하여 비즈니스 로직을 처리하는 모듈이다. 클라이언트의 요청 사항을 처리하는 영역을 서비스 계층, Java 코드로 구현한 것을 비즈니스 로직이라 한다.

규칙
  • 사용자가 이용하려는 모든 데이터를 가지고 있어야 한다.
  • View 또는 Controller에 대해 어떤 정보도 알 수 없어야 한다.
  • 변경이 일어났을 때 처리 방법을 구현해야 한다.
  • 모델은 재사용이 가능해야 하며 다른 인터페이스에도 변하지 않아야 한다.

View

컨트롤러로부터 전달받은 Model을 클라이언트에게 시각적으로 보여주는 역할. 즉, 사용자 인터페이스 요소를 말한다.

규칙
  • Model이 가지고 있는 데이터를 저장하면 안된다.
  • Model이나 Controller에 대한 정보를 알면 안된다.
  • 데이터를 받아 단순히 화면에 표현하는 역할만 한다.
  • 재사용이 가능하게끔 설계를 해야 하며 다른 정보들을 표현할 때 쉽게 설계해야 한다.

Controller

클라이언트로측의 요청을 직접적으러 전달받는 엔드포인트로 Model과 View의 상호작용을 해주는 역할을 한다. 클라이언트로부터 요청이 들어왔을 때 어떤 로직을 실행시킬 것인지 Model과 View를 연결해주며 제어하는 모듈이다.

규칙
  • Model 또는 View에 대한 정보를 알아야 한다.
  • Model 또는 View의 변경을 인지하여 대처해야한다.
  • Model이나 View의 변경을 통지 받으면 이를 해성해서 각각의 구성 요소에게 통지해야 한다.
  • 애플리케이션의 메인 로직을 담당한다.

MVC1 & MVC2

MVC는 MVC1, MVC2 두가지로 나눌 수 있다. 둘의 차이점은 클라이언트의 요청 사항을 모듈화 하지 않고 하나의 파일로 처리할 것인가, 각각의 기능을 담당하는 모듈을이 역할을 분담하여 처리할 것인가로 정해진다.

MVC1


MVC1 패턴은 JSP가 Controller와 View의 기능을 동시에 담당하여 JSP 페이지에서 비즈니스 로직을 처리하기 위한 코드와 웹 브라우저에 결과를 보여주기 코드가 같이 작성되는 구조이다.

JSP가 두 가지 역할을 담당하기 때문에 너무 많은 코드가 들어가서 가독성이 떨어지고 복잡해질 가능성이 생긴다.

MVC2


MVC2 패턴은 MVC1 패턴의 단점을 보안하기 위해 나왔다. Controller와 View의 역할을 모두 JSP가 수행했지만 MVC2에서는 JSP가 View의 역할만 수행하고 Controller 역할은 Servlet이 수행하게 된다. 클라이언트의 요청을 Servlet이 받아서 비즈니스 로직을 수행하고 View 역할을 하는 JSP에 전달하여 시각화 한다.

Spring Web MVC의 동작 원리

MVC 패턴을 알아보았으니 이제는 Spring의 역할과 동작 순서를 알아보도록 하자.

Spring framework의 동작 원리는 MVC2의 구조를 기반으로 한다.

구성 요소

DispatcherServlet

클라이언트로부터 애플리케이션으로 들어오는 모든 HTTP 요청을 받아들여 직접적으로 요청을 처리하지 않고 다른 구성요소에게 요청을 위임하는 역할을 한다.

HandlerMapping

클라이언트의 HTTP 요청을 바탕으로 어떤 Controller의 메소드를 실행할지 탐색하는 역할을 한다.

HandlerAdapter

Mapping된 Controller의 정보를 토대로 메소드를 호출하는 역할을 한다.

Controller

호출된 정보를 토대로 비즈니스 로직을 실행 후 처리 결과와 View에 관한 정보(View name)를 return 하는 역할을 한다.

ViewResolver

View name을 확인 후 Controller로부터 받은 결과를 전달할 View 파일을 탐색하는 역할을 한다.

View

Controller에서 전달받은 결과를 반영한 화면을 생성하여 클라이언트에게 보여주는 역할을 한다.

실행 순서

  1. 클라이언트로부터 HTTP Request가 들어오면 URL이 DispatcherServlet 클래스에게 전달된다.
  2. DispatcherServlet은 클라이언트로부터 전달받은 URL을 HandlerMapping 클래스에게 전달한다.
  3. HandlerMapping은 URL을 가지고 클라이언트의 요청을 처리할 Controller를 찾아서 DispatcherServlet 클래스에게 반환한다.
    • Controller의 Method 정보도 같이 반환
  4. Controller 정보를 전달받은 DispatcherServletHandlerAdapter 클래스에게 Controller 정보를 전달한다.
  5. HandlerAdapter는 전달받은 정보를 가지고 Controller의 Method를 호출한다.
  6. Controller의 Method는 비즈니스 로직을 실행 후 반환받은 Model 데이터와 View name을 HandlerAdapter 클래스에게 반환한다.
  7. HandlerAdapter는 Controller에게 받은 Model 데이터와 View name을 DispatcherServlcet 클래스에게 반환한다.
  8. DispatchetServlcet은 반환받은 View name을 ViewResolver 클래스에게 전달한다.
  9. ViewResolver는 View name에 맞는 View를 찾아 DispatcherServlet에게 전달한다.
  10. DispatcherSevlcetView에게 Model 데이터를 전달하고 최종 결과를 클라이언트에게 노출할 수 있도록 요청한다.
  11. View는 Model 데이터를 가지고 화면에 표시하여 클라이언트에게 응답한다.

출처

Spring Docs
MDN Web Docs
위키백과
https://ss-o.tistory.com/160
https://ittrue.tistory.com/234
https://kotlinworld.com/326
https://kchs94.tistory.com/201
http://www.techblue.co.kr/?page_id=5464
https://velog.io/@wnsdnjs70/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC%EC%9D%98-%EC%A0%95%EC%9D%98%ED%8A%B9%EC%A7%95%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC
https://starkying.tistory.com/entry/Spring-MVC-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C

profile
성장을 즐기는 백엔드 자바 개발자

0개의 댓글

관련 채용 정보