Spring MVC에서 사용하는 여러 Special Bean Types입니다. 이 빈들은 DispatcherServlet이 요청을 처리하는 과정에서 중요한 역할을 수행하며, 주로 핸들러 매핑, 핸들러 어댑터, 뷰 해석, 예외 처리 등의 기능을 담당합니다. 아래에 각 빈 타입과 그 역할에 대해 간단히 정리해 드리겠습니다.
Special Bean Types 설명:
- HandlerMapping:
- 요청을 핸들러(Controller)로 매핑합니다. 예를 들어, URL 패턴을 기반으로 요청을 처리할 컨트롤러를 결정합니다.
- 주요 구현체: RequestMappingHandlerMapping, SimpleUrlHandlerMapping.
- HandlerAdapter:
- 선택된 핸들러(Controller)를 실제로 호출하는 역할을 합니다. 핸들러가 어떻게 호출되는지에 대한 로직을 처리합니다.
- 예를 들어, RequestMappingHandlerAdapter는 @RequestMapping으로 매핑된 컨트롤러를 처리합니다.
- HandlerExceptionResolver:
- 컨트롤러에서 발생한 예외를 처리합니다. 발생한 예외를 처리하여 사용자에게 적절한 오류 페이지나 응답을 제공합니다.
- ViewResolver:
- 논리적 뷰 이름을 실제 뷰 파일(JSP, Thymeleaf 등)로 변환합니다. ViewResolver는 논리적 이름을 기반으로 물리적인 뷰 파일 경로를 찾아내고, 그 뷰를 렌더링합니다.
- LocaleResolver 및 LocaleContextResolver:
- 사용자의 로케일(언어 및 지역 설정)을 확인하고, 해당 로케일에 맞는 콘텐츠를 제공하는 데 사용됩니다.
- ThemeResolver:
- 웹 애플리케이션에서 사용될 테마를 결정합니다. 사용자 인터페이스에서 개인화된 테마를 적용하는 데 사용됩니다.
- MultipartResolver:
- 파일 업로드와 같은 멀티파트 요청을 처리합니다. 브라우저로부터 전송된 파일을 서버에서 처리할 수 있도록 도와줍니다.
- FlashMapManager:
- 리다이렉트 요청 시 데이터를 전달하는 데 사용됩니다. FlashMap을 통해 요청 간 데이터를 유지할 수 있습니다. 보통 "성공" 메시지 등을 리다이렉트 이후에도 보여줄 때 사용됩니다.
요약:
이 표는 Spring MVC에서의 요청 처리 흐름에서 사용되는 중요한 빈 타입들을 설명한 것입니다. 이러한 빈들은 주로 핸들러 선택, 핸들러 호출, 예외 처리, 뷰 선택, 로케일 및 테마 관리 등의 기능을 제공하며, DispatcherServlet의 작동 방식을 이해하는 데 중요한 역할을 합니다.
"웹브라우저에게 모든 웹페이지를 한 번에 제공하겠다"는 **싱글 페이지 애플리케이션(Single Page Application, SPA)**의 개념을 설명하는 말입니다.
싱글 페이지 애플리케이션(SPA)이란?
**싱글 페이지 애플리케이션(SPA)**은 한 번의 초기 로딩으로 모든 필요한 리소스(HTML, CSS, JavaScript)를 웹브라우저에 전달하고, 이후 페이지 전환이나 추가 데이터 로딩이 필요할 때 전체 페이지를 다시 불러오지 않고, 부분적으로 데이터를 가져와 동적으로 화면을 업데이트하는 방식입니다. 즉, 사용자가 다른 페이지로 이동할 때도 페이지 전체를 새로고침하지 않고, 필요한 부분만 업데이트하여 빠른 사용자 경험을 제공합니다.
주요 특징:
- 최초 로드: 웹 애플리케이션을 처음 실행할 때, 브라우저에 모든 리소스를 한 번에 로드합니다.
- 동적 데이터 로딩: 페이지 전환이나 상호작용이 있을 때, 서버에서 필요한 데이터만 AJAX나 Fetch API로 가져와서 화면의 일부만 업데이트합니다.
- 빠른 전환: 페이지를 다시 로드하지 않기 때문에 페이지 전환이 빠르고 매끄럽습니다.
- 라우팅: 클라이언트 사이드 라우팅을 통해 URL에 따라 화면의 특정 부분만 업데이트됩니다. 예: React Router, Vue Router.
장점:
- 빠른 사용자 경험: 처음 로딩 이후엔 페이지 전환 시 속도가 매우 빠릅니다.
- 서버 요청 감소: 페이지 전체를 다시 불러오지 않고, 필요한 데이터만 요청합니다.
- 모바일 친화적: 빠른 응답성을 제공해 사용자 경험을 개선합니다.
대표적인 SPA 프레임워크:
- React
- Angular
- Vue.js
이러한 SPA는 주로 React나 Vue.js와 같은 프론트엔드 프레임워크를 통해 구현되며, AJAX나 Fetch를 사용해 서버와 통신하면서 필요한 데이터를 실시간으로 가져옵니다.
docBase
와 appBase
는 Apache Tomcat 서버에서 웹 애플리케이션의 경로를 설정할 때 사용되는 두 가지 중요한 속성입니다. 이 속성들은 Tomcat 서버가 어떤 디렉토리에서 애플리케이션을 찾고 실행할지를 정의합니다.
1. docBase (Document Base)
- 설명:
docBase
는 특정 웹 애플리케이션의 루트 디렉터리 또는 WAR 파일의 위치를 지정하는 속성입니다. 즉, Tomcat 서버는docBase
에 지정된 경로에서 해당 애플리케이션을 찾고, 그 애플리케이션을 실행합니다. - 사용 위치:
Context
엘리먼트 내에서 사용됩니다. - 설정 방법:또는 WAR 파일의 경우:
<Context docBase="/path/to/webapp.war" ... />
<Context docBase="/path/to/webapp" ... />
- 예시:
docBase="/var/www/myapp"
: 여기서myapp
은 웹 애플리케이션의 루트 디렉터리로 사용됩니다.docBase="/path/to/myapp.war"
:myapp.war
파일이 배포되는 WAR 파일을 사용하여 애플리케이션을 실행합니다.
2. appBase (Application Base)
- 설명:
appBase
는 Host 엘리먼트 내에서 정의되는 속성으로, 특정 Host에 속한 모든 웹 애플리케이션들이 위치하는 기본 디렉터리를 정의합니다. Tomcat은appBase
디렉토리 아래의 모든 애플리케이션을 자동으로 찾습니다. 이 디렉터리 아래에 있는 각 WAR 파일이나 애플리케이션 디렉터리가 자동으로 배포됩니다. - 사용 위치:
Host
엘리먼트 내에서 사용됩니다. - 설정 방법:
<Host name="localhost" appBase="webapps" ... />
- 예시:
appBase="webapps"
: Tomcat 서버는 기본적으로webapps
폴더를 사용하여 여기에 있는 모든 애플리케이션(WAR 파일 또는 디렉터리)을 자동으로 배포합니다.
주요 차이점:
- docBase는 특정 개별 웹 애플리케이션의 경로를 지정하는 데 사용됩니다. 예를 들어, 애플리케이션을 수동으로 다른 경로에서 배포하거나, 다른 폴더에 있는 WAR 파일을 배포할 때 사용됩니다.
- appBase는 특정 Host에 속한 모든 웹 애플리케이션의 기본 경로입니다. Tomcat 서버는 이 경로에 있는 모든 애플리케이션(WAR 파일 또는 디렉터리)을 자동으로 배포합니다.
예시로 보는 차이:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/myapp" docBase="/path/to/myapp" />
</Host>
- 여기서
appBase="webapps"
는 Tomcat이webapps
디렉터리에 있는 모든 웹 애플리케이션을 자동으로 배포하도록 지정합니다. docBase="/path/to/myapp"
는myapp
이라는 애플리케이션이 다른 경로에 있고, Tomcat이 그 경로에서 이 애플리케이션을 실행해야 함을 지정합니다.