[스프링부트 핵심가이드] 개발에 앞서 알면 좋은 기초 지식 - 스프링 부트의 동작 방식
by 볼빵빵오춘기스프링부트의 동작 방식
- 클라이언트가 /urlEx에 대한 HTTP 요청을 보낸다.
- Servlet Container가 요청을 받아 DispatcherServlet에 전달한다.
- DispatcherServlet이 요청을 받아서 적절한 핸들러를 찾는다.
- HandlerMapping이 요청 URL을 처리할 컨트롤러를 찾는다. HandlerAdapter는 핸들러(컨트롤러)를 실행한다.
- Controller는 요청을 처리하고 비즈니스 로직을 위해 Service를 호출한다.
- Service는 비즈니스 로직을 수행하고, 데이터를 위해 Repository를 호출한다.
- Repository는 데이터베이스와 상호작용하여 데이터를 조회하거나 저장한다.
- Entity는 데이터베이스 테이블과 매핑되는 객체로 데이터를 주고받는다. Database는 실제 데이터를 저장하고 조회하는 장소이다.
- Service는 비즈니스 로직을 수행한 결과를 Controller에 반환한다.
- Controller는 HandlerAdapter에 결과를 반환한다.
- DispatcherServlet은 HandlerAdapter를 통해 받은 결과를 반환받는다.
- DispatcherServlet는 ViewResolver에 반환한 뷰 이름을 실제 뷰 파일로 변환하고 이를 렌더링합니다.
- View는 데이터를 전달받아 사용자에게 보여줄 UI를 렌더링한다.
단계 별 수행 역할
클라이언트(Client)
클라이언트(브라우저, 모바일 앱 등)는 HTTP 요청을 보낸다.
Servlet Container
서블릿 컨테이너(예: Tomcat, Jetty)는 Java EE 애플리케이션 서버의 일부로, 서블릿과 JSP를 실행할 수 있는 환경을 제공한다.
클라이언트의 요청을 받아서 DispatcherServlet에 전달한다.
클라이언트의 HTTP 요청을 받아 DispatcherServlet에 전달한다.
서블릿 객체를 생성, 초기화, 호출, 종료하는생명주기를 관리한다.
서블릿 객체는 싱글톰 패턴으로 관리된다.
멀티 스레딩을 지원한다.
DispatcherServlet
DispatcherServlet은 Spring MVC의 프론트 컨트롤러로, 모든 HTTP 요청을 받아서 적절한 핸들러를 찾고 요청을 처리한다.
⇒ 모든 요청을 받아들이고, 이를 처리할 핸들러(컨트롤러)를 찾는다. 요청을 핸들러로 전달하고, 핸들러의 응답을 받아 최종 응답을 생성한다.
HandlerMapping
DispatcherServlet은 요청 URL을 기반으로 요청을 처리할 핸들러를 찾기 위해 HandlerMapping을 사용한다.
HandlerMapping은 요청을 어떤 컨트롤러가 처리할지 결정한다.
HandlerAdapter
HandlerAdapter는 HandlerMapping에 의해 선택된 핸들러를 실제로 실행한다.
각 타입의 핸들러에 대해 적절한 HandlerAdapter가 필요하다.
⇒ 핸들러(컨트롤러)를 실행하고, 결과를 반환한다.
Controller
HandlerAdapter가 핸들러 메서드를 실행하면, 컨트롤러가 비즈니스 로직을 수행할 Service를 호출한다.
⇒ 요청을 처리하고, 비즈니스 로직을 수행할 Service를 호출한다. 요청에 따라 적절한 뷰(view) 이름 또는 데이터를 반환한다.
Service
컨트롤러는 대부분의 비즈니스 로직을 서비스 계층에 위임한다.
서비스 계층은 비즈니스 로직을 처리하고, 필요한 데이터를 Repository 계층에서 가져온다.
⇒ 비즈니스 로직을 처리한다. 데이터베이스 작업을 위해 Repository를 호출한다.
Repository
서비스 계층은 데이터베이스 작업을 수행하기 위해 Repository를 사용한다.
Repository는 데이터베이스와의 상호작용을 담당한다.
⇒ 데이터베이스 CRUD 작업을 수행합니다.
Entity
Entity는 데이터베이스 테이블과 매핑되는 클래스이다.
Repository는 Entity를 사용하여 데이터베이스 작업을 수행한다.
⇒ 데이터베이스 테이블과 매핑되는 도메인 객체이다.
Database (DB)
Repository는 실제 데이터베이스에서 데이터를 가져오거나 저장한다. 이때, SQL 쿼리가 실행된다.
⇒ 데이터를 저장하고 조회하는 역할을 한다.
View
컨트롤러는 서비스로부터 받은 데이터를 뷰에 전달한다.
뷰는 데이터를 사용자에게 보여줄 템플릿 파일이다.
⇒ 사용자가 볼 수 있는 UI를 렌더링한다.
ViewResolver
뷰 리졸버(ViewResolver)는 컨트롤러가 반환한 뷰 이름을 실제 뷰 템플릿 파일로 매핑한다.
⇒ 컨트롤러가 반환한 뷰 이름을 실제 뷰 파일로 변환하고, 이를 렌더링한다.
서블릿(Servlet)
클리아이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술이다.
일반적으로 서블릿은 서블릿 컨테이너에서 관리한다.
스프링에서는 DispatcherServlet이 서블릿의 역할을 수행한다. (일반적으로 스프링은 톰캣을 embed해 사용한다. 그렇기때문에 서블릿 컨테이너와 DispatchersServlet은 자동 설정된 web.xml의 설정값을 공유한다.
뷰 vs @RestController를 사용하는 DispatchersServlet의 동작방식
뷰를 사용하는 DispatcherServlet의 동작방식
뷰 리졸버는 뷰의렌더링 역할을 담당하는 뷰 객체를 반환한다.
@RestController를 사용하는 DispatcherServlet의 동작방식
뷰 리졸버를 호출하지 않고 MessageConverter를 거쳐 JSON 형식으로 변환해서 응답한다.
MessageConverter는 요청과 응답에 대해 Body 값을 변환하는 역할을 수행한다.
'👩🏻💻 About 프로그래밍 > Spring, Spring boot' 카테고리의 다른 글
[스프링부트 핵심가이드] 개발에 앞서 알면 좋은 기초 지식 - 디자인 패턴 (0) | 2025.02.01 |
---|---|
[스프링부트 핵심가이드] 개발에 앞서 알면 좋은 기초 지식 - 레이어드 아키텍처 (0) | 2025.02.01 |
[스프링부트 핵심가이드] 개발에 앞서 알면 좋은 기초 지식 - 서버 간 통신 (0) | 2025.01.24 |
[스프링부트 핵심가이드] 스프링 부트란? (0) | 2025.01.24 |
AOP (0) | 2024.09.09 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기