2023. 4. 13. 09:10ใ์ธํ๋ฐ/์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ (tistory.com)
์ ๋ฒ ๊ธ์์๋ ์๋ธ๋ฆฟ์ ๋ง๋ค๊ณ ์ง์ ๋ฑ๋ก๋ ํด๋ณด๊ณ , ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ๋ฅผ ํ๊ณ ๊ฑฐ๊ธฐ์ ์ข ๋ ํ์ฅํด์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ๊น์ง ํด๋ดค๋ค.
์ด์ ์ฌ๊ธฐ์ ์คํ๋ง์ ๋ํด์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์คํ๋ง์ ์ถ๊ฐํด๋ณผ ๊ฒ์ด๋ค.
1๏ธโฃ ์คํ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ
build.gradle์ ์คํ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ค๋ค.
//์คํ๋ง MVC ์ถ๊ฐ
implementation 'org.springframework:spring-webmvc:6.0.4'
์ง๊ธ์ ์คํ๋ง ๋ถํธ๊ฐ ์๋๋ผ ์คํ๋ง์ด์ด์ spring-webmvc ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํด์ค์ผ ํ๋ค.
2๏ธโฃ Controller, Config ์ถ๊ฐ
์คํ๋ง์ ์ถ๊ฐํ์ผ๋ ์ด์ Controller, Config์ ๋จผ์ ์ถ๊ฐํด์ค๋ค.
HelloController
@RestController
public class HelloController
{
@GetMapping("/hello-spring")
public String hello()
{
System.out.println("HelloController.hello");
return "hello spring!";
}
}
/hello-spring์ผ๋ก ์์ฒญ์ด ๋ค์ด์ค๋ฉด hello spring!์ด๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ ์คํ๋ง ์ปจํธ๋กค๋ฌ์ด๋ค.
HellloConfig
@Configuration
public class HelloConfig
{
@Bean
public HelloController helloController()
{
return new HelloController();
}
}
HelloConfig์ ์ปดํฌ๋ํธ ์ค์บ์ ์ฌ์ฉํ์ง ์๊ณ ์ง์ ์์ฑํ HelloController๋ฅผ ๋น์ผ๋ก ๋ฑ๋กํด์คฌ๋ค.
3๏ธโฃ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ ๋ฐ ๋ฑ๋ก
public class AppInitV2Spring implements AppInit
{
@Override
public void onStartup(ServletContext servletContext)
{
System.out.println("AppInitV2Spring.onStartup");
// ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ
AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
appContext.register(HelloConfig.class);
// ์คํ๋ง MVC ๋์คํจ์ฒ ์๋ธ๋ฆฟ ์์ฑ, ์คํ๋ง ์ปจํ
์ด๋ ์ฐ๊ฒฐ
DispatcherServlet dispatcher = new DispatcherServlet(appContext);
// ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ๋ฑ๋ก (์ด๋ฆ ์ฃผ์!)
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcherV2", dispatcher);
// /spring/* ์์ฒญ์ด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํตํ๋๋ก ์ค์
servlet.addMapping("/spring/*");
}
}
์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ๋ฅผ ์ฌ์ฉํด์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ๋ฑ๋กํด์ค ๊ฒ์ด๋ค.
์ ๋ฒ์ ๋ง๋ค์ด๋ AppInit์ implements ํด์ฃผ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ ์ฝ๋๊ฐ ์๋์ผ๋ก ์คํ๋๋ค! (์ ๋ฒ ๊ธ์์ ๊ด๋ จ ์์ ์ ํด๋๊ธฐ ๋๋ฌธ)
- ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ
์ด๋ฆ๋ ๊ธด AnnotationConfigWebApplicationContext๊ฐ ์คํ๋ง ์ปจํ ์ด๋์ด๋ค.
์ด ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น์ ๋ฑ๋กํด๋๋ ์คํ๋ง ์ค์ HelloConfig์ ๋ฑ๋กํด์ค๋ค.
- ์คํ๋ง MVC ๋์คํจ์ฒ ์๋ธ๋ฆฟ ์์ฑ, ์คํ๋ง ์ปจํ ์ด๋ ์ฐ๊ฒฐ
new DispatcherServlet(appContext)
DispatcherServlet์ ์คํ๋ง MVC๊ฐ ์ ๊ณตํ๋ ์๋ธ๋ฆฟ์ธ๋ฐ ์ด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์์ฑํ๊ณ ์คํ๋ง ์ปจํ ์ด๋๋ฅผ ์ ๋ฌํ๋ฉด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ์ฐ๊ฒฐ๋๋ค.
์ด์ ์ด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ http ์์ฒญ์ด ์ค๋ฉด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํด๋น ์คํ๋ง ์ปจํ ์ด๋์ ๋ค์ด์๋ ์ปจํธ๋กค๋ฌ ๋น๋ค์ ํธ์ถํ๋ค.
- ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ฑ๋ก
servletContext.addServlet("dispatcherV2", dispatcher) -> ์ด๋ "dispatcherV2" ์ด๋ฆ ์ฃผ์ !! (์๋ธ๋ฆฟ ์ด๋ฆ์ ์ค๋ณต๋๋ฉด ์ค๋ฅ ๋ฐ์ํจ)
๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ฑ๋กํ๊ณ addMapping์ผ๋ก /spring/* ๋ก ์์ฒญ์ด ์ค๋ฉด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ํตํ๋๋ก ์ค์ ํด์คฌ๋ค.
/spring/* ๋ก ๊ฒฝ๋ก๋ฅผ ์ง์ ํด์ฃผ๋ฉด /spring ๊ณผ ๊ทธ ํ์ ์์ฒญ์ ๋ชจ๋ ํด๋น ์๋ธ๋ฆฟ์ผ๋ก ํตํ๊ฒ ๋๋ค.
http://localhost:9080/spring/hello-spring
์ผ๋ก ์คํํด๋ณด๋ฉด ๋ฑ๋กํ๋ HelloController์ /hello-spring์ด ์คํ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
โ ๊ทผ๋ฐ ์ฌ๊ธฐ์ Controller์๋ /hello-spring๋ง ์ง์ ํ๋๋ฐ ์ /spring/hello-spring ์ธ๊ฐ์ ๋ํด์ ๊ถ๊ธํ ์ ์๋ค.
/spring -> ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ผ๋ก ๋ค์ด์ค๊ณ
/hello-spring -> ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์ด์ ์คํ๋ง ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์์ ์คํํ๋ค.
์ฆ, ์๋ธ๋ฆฟ์ ์ฐพ์์ ํธ์ถํ๋๋ฐ ์ฌ์ฉ๋ /spring ์ ์ ์ธํ๊ณ , /hello-spring ๊ฐ ๋งคํ๋ ์ปจํธ๋กค๋ฌ HelloController์ ๋ฉ์๋๋ฅผ ์ฐพ์์ ์คํ๋๋ ๊ฒ์ด๋ค.
'์ธํ๋ฐ > ์คํ๋ง ๋ถํธ - ํต์ฌ ์๋ฆฌ์ ํ์ฉ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
WAR ๋ฐฐํฌ ๋ฐฉ์ ๋จ์ ๊ณผ ๋ด์ฅ ํฐ์บฃ (0) | 2023.04.17 |
---|---|
์คํ๋ง MVC ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ WebApplicationInitalizer (0) | 2023.04.13 |
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ, ์ ํ๋ฆฌ์ผ์ด์ ์ด๊ธฐํ (0) | 2023.04.11 |
์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์ด๊ธฐํ๋? (0) | 2023.04.10 |
IntelliJ์์ ํฐ์บฃ ์ค์ ํ๋ ๋ฐฉ๋ฒ (0) | 2023.04.10 |