Hello

스프링부트 구조 및 각 단계별 역할

by 볼빵빵오춘기

클라이언트(Client)

클라이언트(브라우저, 모바일 앱 등)는 HTTP 요청을 보냄.

 

Servlet Container

  • 서블릿 컨테이너(예: Tomcat, Jetty)는 Java EE 애플리케이션 서버의 일부로, 서블릿과 JSP를 실행할 수 있는 환경을 제공.
  • 클라이언트의 요청을 받아서 DispatcherServlet에 전달.
  • 클라이언트의 HTTP 요청을 받아 DispatcherServlet에 전달.
  • 서블릿 생명주기를 관리.

 

DispatcherServlet

  • DispatcherServlet은 Spring MVC의 프론트 컨트롤러로, 모든 HTTP 요청을 받아서 적절한 핸들러를 찾고 요청을 처리
  • 모든 요청을 받아들이고, 이를 처리할 핸들러(컨트롤러)를 찾음.
  • 요청을 핸들러로 전달하고, 핸들러의 응답을 받아 최종 응답을 생성.

 

HandlerMapping

  • DispatcherServlet은 요청 URL을 기반으로 요청을 처리할 핸들러를 찾기 위해 HandlerMapping을 사용
  • HandlerMapping은 요청을 어떤 컨트롤러가 처리할지 결정.
  • URL 패턴과 매핑된 컨트롤러 메서드를 찾음.

 

HandlerAdapter

  • HandlerAdapter는 HandlerMapping에 의해 선택된 핸들러를 실제로 실행.
  • 각 타입의 핸들러에 대해 적절한 HandlerAdapter가 필요.
  • 핸들러(컨트롤러)를 실행하고, 결과를 반환.

 

Controller

  • HandlerAdapter가 핸들러 메서드를 실행하면, 컨트롤러가 비즈니스 로직을 수행할 Service를 호출.
  • 요청을 처리하고, 비즈니스 로직을 수행할 Service를 호출.
  • 요청에 따라 적절한 뷰(view) 이름 또는 데이터를 반환.

 

Service

  • 서비스 계층은 비즈니스 로직을 처리.
  • 데이터베이스 작업을 위해 Repository를 호출

 

Repository

  • 서비스 계층은 데이터베이스 작업을 수행하기 위해 Repository를 사용함.
  • Repository는 데이터베이스와의 상호작용을 담당.
  • 데이터베이스 CRUD 작업을 수행합니다.

 

Database (DB)

  • Repository는 실제 데이터베이스에서 데이터를 가져오거나 저장. 
  • 이때, SQL 쿼리가 실행되면 실질적 데이터를 저장하고 조회하는 역할을 함.

 

View

  • 컨트롤러는 서비스로부터 받은 데이터를 뷰에 전달.
  • 뷰는 데이터를 사용자에게 보여줄 템플릿 파일.

 

ViewResolver

컨트롤러가 반환한 뷰 이름을 실제 뷰 템플릿 파일로 매핑.

 

구조

스프링 부트 구조

 

  1. 클라이언트가 특정 URL에 HTTP 요청을 보냄.
  2. Servlet Container는 요청을 받아서 DispatcherServlet에 전달.
  3. DispatcherServlet은 요청을 받아서 적절한 Handler(Controller)를 찾기 위해 HandlerMapping을 사용.
  4. HandlerMapping이 적절한 Handler(Controller)를 찾으면, HandlerAdapter가 이를 실행.
  5. Controller는 비즈니스 로직을 수행하기 위해 Service를 호출.
  6. Service는 비즈니스 로직을 실제로 수행하고, 데이터를 위해 Repository를 호출.
  7. Repository는 데이터베이스와 상호작용하여 데이터를 조회하거나 저장.
  8. Database는 실제 데이터를 저장하고 조회.
  9. Service는 Controller로 비즈니스 로직 수행 결과를 반환.
  10. Controller는 받은 결과를 View로 넘겨주기 위해 적절한 뷰 이름을 반환.
  11. DispatcherServletHandlerAdapter를 통해 Controller가 반환한 뷰 이름을 처리.
  12. DispatcherServletViewResolver를 사용하여 Controller가 반환한 뷰 이름을 실제 뷰 템플릿 파일 경로로 매핑하고, 이를 렌더링하여 HTML을 생성.
  13. 생성된 HTML은 DispatcherServlet을 통해 클라이언트에게 반환되어 화면을 표시.

 

참고링크

https://djcho.github.io/springboot/spring-boot-chapter2-2/

https://nyyang.tistory.com/118

https://catsbi.oopy.io/f52511f3-1455-4a01-b8b7-f10875895d5b

https://terasolunaorg.github.io/guideline/5.0.1.RELEASE/en/Overview/SpringMVCOverview.html

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기