스프링부트 구조 및 각 단계별 역할
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
컨트롤러가 반환한 뷰 이름을 실제 뷰 템플릿 파일로 매핑.
구조
- 클라이언트가 특정 URL에 HTTP 요청을 보냄.
- Servlet Container는 요청을 받아서 DispatcherServlet에 전달.
- DispatcherServlet은 요청을 받아서 적절한 Handler(Controller)를 찾기 위해 HandlerMapping을 사용.
- HandlerMapping이 적절한 Handler(Controller)를 찾으면, HandlerAdapter가 이를 실행.
- Controller는 비즈니스 로직을 수행하기 위해 Service를 호출.
- Service는 비즈니스 로직을 실제로 수행하고, 데이터를 위해 Repository를 호출.
- Repository는 데이터베이스와 상호작용하여 데이터를 조회하거나 저장.
- Database는 실제 데이터를 저장하고 조회.
- Service는 Controller로 비즈니스 로직 수행 결과를 반환.
- Controller는 받은 결과를 View로 넘겨주기 위해 적절한 뷰 이름을 반환.
- DispatcherServlet은 HandlerAdapter를 통해 Controller가 반환한 뷰 이름을 처리.
- DispatcherServlet은 ViewResolver를 사용하여 Controller가 반환한 뷰 이름을 실제 뷰 템플릿 파일 경로로 매핑하고, 이를 렌더링하여 HTML을 생성.
- 생성된 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
'👩🏻💻 About 프로그래밍 > spring' 카테고리의 다른 글
DTO vs VO, DTO와 VO의 차이점, 언제 VO를 사용하고 언제 DTO를 사용하는가? (0) | 2024.07.08 |
---|---|
Spring 패키지 구조(feat. Controller, DTO, DAO Service, Repository, Entity, Vo) (0) | 2024.07.08 |
스프링 부트 버전별 지원 기간 (0) | 2024.07.03 |
스프링 프레임워크 vs 스프링 부트 (1) | 2024.06.14 |
프레임워크(framework) 란? (1) | 2024.06.08 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기