2023. 4. 13. 09:25ใ์ธํ๋ฐ/์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ (tistory.com)
์คํ๋ง ์ปจํ ์ด๋ ๋ฑ๋ก (tistory.com)
์ ๋ฒ ๊ธ์์ ๋ณด๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ์ด๊ธฐํํ๋ ค๋ฉด ๋จผ์ ServletContainerInitializer ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ๋ฅผ ์ํด์ @HandleTypes ์ด๋ ธํ ์ด์ ์ ์ ์ฉํ๊ณ , ๊ทธ ๋ค์ /META-INF/services/jakarta.servlet.ServletContainerInitializer ํ์ผ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ ํด๋์ค ๊ฒฝ๋ก๋ฅผ ๋ฑ๋กํด์คฌ๋ค.
์ด ๊ณผ์ ์ ๊ณ์ ํ๋ค๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ๊ณ ๊ท์ฐฎ์ ์์ ์ด๋ค..
๊ทผ๋ฐ ์คํ๋ง MVC๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ์ด๊ธฐํ ํ๋ ์์ ์ ์ด๋ฏธ ๋ง๋ค์ด์ ์ ๊ณตํ๊ณ ์๋ค!!
๋ฐ๋ผ์ ๊ฐ๋ฐ์๋ค์ ์ด ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ ๊ณผ์ ์ ํ์ง ์์๋ ๋๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ฝ๋๋ง ์์ฑํด์ฃผ๋ฉด ๋๋ค ใ ใ
WebApplicationInitializer
public interface WebApplicationInitializer {
/**
* Configure the given {@link ServletContext} with any servlets, filters, listeners
* context-params and attributes necessary for initializing this web application. See
* examples {@linkplain WebApplicationInitializer above}.
* @param servletContext the {@code ServletContext} to initialize
* @throws ServletException if any call against the given {@code ServletContext}
* throws a {@code ServletException}
*/
void onStartup(ServletContext servletContext) throws ServletException;
}
WebApplicationInitializer๋ ์คํ๋ง์ด ์ง์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ฝ๋๋ก ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ฝ๋๋ฅผ ์์ฑํด์ฃผ๋ฉด ๋๋ค.
AppInitV3SpringMvc
public class AppInitV3SpringMvc implements WebApplicationInitializer
{
@Override
public void onStartup(ServletContext servletContext) throws ServletException
{
System.out.println("AppInitV3SpringMvc.onStartup");
// ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(HelloConfig.class);
// ์คํ๋ง MVC ๋์คํจ์ฒ ์๋ธ๋ฆฟ ์์ฑ, ์คํ๋ง ์ปจํ
์ด๋ ์ฐ๊ฒฐ
DispatcherServlet dispatcher = new DispatcherServlet(appContext);
// ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ๋ฑ๋ก (์ด๋ฆ ์ฃผ์!)
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcherV3", dispatcher);
// ๋ชจ๋ ์์ฒญ์ด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํตํ๋๋ก ์ค์
servlet.addMapping("/");
}
}
์ ๋ฒ ๊ธ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ฝ๋๋ก ์ฌ์ฉํ๋ ๊ฑธ ๊ทธ๋๋ก ๊ฐ์ ธ์๋ค.
๋์ ์ฌ๊ธฐ์๋ AppInit ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฒ์ด ์๋ ์คํ๋ง์ด ์ ๊ณตํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ธํฐํ์ด์ค WebApplicationInitializer๋ฅผ ๊ตฌํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋ฑ๋กํ ๋ ์ด๋ฆ์ ์ด๋ฒ์ V3 ์ผ๋ก ํด์ฃผ๊ณ , addMapping์์๋ "/" ์ผ๋ก ์ง์ ํด์ ๋ชจ๋ ์์ฒญ์ด ํด๋น ์๋ธ๋ฆฟ์ ํตํ๋๋ก ํ๋ค.
http://localhost:9080/hello-spring ์ผ๋ก ์คํํ๋ฉด ์ด๋ฒ์ /hello-spring์ด ๋งคํ๋ ์ปจํธ๋กค๋ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
โ ์ง๊ธ ๋ณด๋ฉด ๋์คํจ์ฒ ์๋ธ๋ฆฟ๋ ์ฌ๋ฌ๊ฐ๊ณ ์คํ๋ง ์ปจํ ์ด๋๋ ์ฌ๋ฌ๊ฐ์ธ๋ฐ.. .
๋ณดํต์ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ํ๋ ๋ง๋ค๊ณ , ๋์คํจ์ฒ ์๋ธ๋ฆฟ๋ ํ๋๋ง ๋ง๋ค๊ณ , ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๊ฒฝ๋ก ๋งคํ๋ /๋ก ํด์ ํ๋์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํตํด์ ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ค!!
โ ๊ทผ๋ฐ ์ด๋ป๊ฒ WebApplicationIntializer ๋ง ๊ตฌํํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ๊ฐ ๊ฐ๋ฅํ๊ฐ? ์ ๋ํด์๋ ์คํ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋๋ค.
spring-web ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ด๋ณด๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ๋ฅผ ์ํ ๋ฑ๋ก ํ์ผ์ ํ์ธํ ์ ์๋ค!! ์ต์ํ ๊ทธ ๊ฒฝ๋ก์ ํ์ผ์ด๋ค.
๋ค์ด๊ฐ๋ณด๋ฉด SpringServletContainerInitializer ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ ํด๋์ค๊ฐ ๋ฑ๋ก๋์ด ์๋๋ฐ ์ด ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋ฉด
@HandleTypes์ผ๋ก WebApplicationInitailizer๊ฐ ๋ฑ๋ก๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
์คํ๋ง์ด ์ด๋ ๊ฒ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ฉด ์ฐ๋ฆฌ๋ ์ด์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค!!
์คํ๋ง์ด๋ผ๊ณ ๊ทธ๋ฅ ๋ง๋ฒ์ฒ๋ผ ์ง !ํ๊ณ ๊ธฐ๋ฅ์ด ์ ๊ณต๋๋ ๊ฒ์ด ์๋๋ผ ๋ฏธ๋ฆฌ ์ฐ๋ฆฌ๊ฐ ์ ๋ฒ ๊ธ์์ ์ง์ ๋ง๋ค์๋ ์ฝ๋๋ฅผ ์ ๊ณตํด์ฃผ๋ ๊ฒ์ด๊ณ ,
์ฐ๋ฆฌ๋ ํธํ๊ฒ ๊ทธ๊ฑธ ์ฌ์ฉ๋ง ํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์คํ๋ง MVC๊ฐ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ ํ์ผ์ ์ด๊ธฐํ ํด๋์ค๋ฅผ ๋ฑ๋กํด๋๊ณ , WebApplicationInitializer ์ธํฐํ์ด์ค๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ธํฐํ์ด์ค๋ก ์ง์ ํด๋๊ณ ์ด๊ฒ์ ์์ฑํด์ ์คํํ๋ค.
'์ธํ๋ฐ > ์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ด์ฅ ํฐ์บฃ ๋น๋, ๋ฐฐํฌ (Fat Jar) (0) | 2023.04.18 |
---|---|
WAR ๋ฐฐํฌ ๋ฐฉ์ ๋จ์ ๊ณผ ๋ด์ฅ ํฐ์บฃ (0) | 2023.04.17 |
์คํ๋ง ์ปจํ ์ด๋ ๋ฑ๋ก (0) | 2023.04.13 |
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ (0) | 2023.04.11 |
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ๋? (0) | 2023.04.10 |