์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๋“ฑ๋ก

2023. 4. 13. 09:10ใ†์ธํ”„๋Ÿฐ/์Šคํ”„๋ง ๋ถ€ํŠธ - ํ•ต์‹ฌ ์›๋ฆฌ์™€ ํ™œ์šฉ

728x90

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™” (tistory.com)

 

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™”

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”๋ž€? (tistory.com) ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”๋ž€? WAS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ ์— ํ•„์š”ํ•œ ์ดˆ๊ธฐํ™” ์ž‘์—…๋“ค( ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ํ•„ํ„ฐ์™€ ์„œ๋ธ”๋ฆฟ์„ ๋“ฑ๋ก, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ, ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ

hyejin.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์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ์•„์„œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90