WAR ๋ฐฐํฌ ๋ฐฉ์‹ ๋‹จ์ ๊ณผ ๋‚ด์žฅ ํ†ฐ์บฃ

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

728x90

 

 

0๏ธโƒฃ WAR ๋ฐฐํฌ ๋ฐฉ์‹์˜ ๋‹จ์  

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ฐฐํฌํ•˜๋ ค๋ฉด 

์šฐ์„  ํ†ฐ์บฃ ๊ฐ™์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•œ ๋‹ค์Œ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ WAR๋กœ ๋นŒ๋“œํ•œ ๋‹ค์Œ ๋‹ค์‹œ ์ด ๋นŒ๋“œํ•œ WAR ํŒŒ์ผ์„ WAS์— ๋ฐฐํฌํ•ด์•ผ ํ•œ๋‹ค. 

์ฆ‰, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ๋™ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค. 

 

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•˜๋Š” ์ด ๋ฐฉ๋ฒ•์˜ ๋‹จ์ ์œผ๋กœ๋Š” 

- ํ†ฐ์บฃ ๊ฐ™์€ WAS๋ฅผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. 

- ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •์ด ๋ณต์žกํ•˜๋‹ค. 

( ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ WAS๋ฅผ ์‹คํ–‰ํ•˜๊ณ  WAR์™€ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•œ ๋ณต์žกํ•œ ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.) 

- ๋ฐฐํฌ ๊ณผ์ •์ด ๋ณต์žกํ•˜๋‹ค. 

(WAR ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ด๋ฅผ ๋˜ WAS์— ์ „๋‹ฌํ•ด์„œ ๋ฐฐํฌํ•ด์•ผํ•œ๋‹ค.) 

- ํ†ฐ์บฃ์˜ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํ†ฐ์บฃ์„ ๋‹ค์‹œ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค. 

 

๊ณผ๊ฑฐ์—๋Š” ์ด๋ ‡๊ฒŒ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๋ฅผ ๋ณ„๋„๋กœ ์„ค์น˜ํ•˜๋Š” ๊ตฌ์กฐ๊ฐ€ ๋„ˆ๋ฌด๋‚˜ ๋‹น์—ฐํ•ด์„œ ์ด๊ฒŒ ๋‹จ์ ์ธ๊ฐ€? ์‹ถ๊ธดํ•œ๋ฐ 

์ƒ๋Œ€์ ์œผ๋กœ ํ˜„์žฌ ๋‚ด์žฅ ํ†ฐ์บฃ์„ ์‚ฌ์šฉํ•ด์„œ ํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋น„๊ตํ•ด๋ณด๋ฉด ๋‹จ์ ์ด ๋  ์ˆ˜ ์žˆ๋‹ค. 

 

WAR ๋ฐฐํฌ ๋ฐฉ์‹์˜ ๋‹จ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํ†ฐ์บฃ ๊ฐ™์€ ์›น ์„œ๋ฒ„๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋‚ด์žฅํ•ด ์ œ๊ณตํ•˜๋Š” ๋‚ด์žฅ ํ†ฐ์บฃ ๊ธฐ๋Šฅ์ด ๋“ฑ์žฅํ•œ๋‹ค. 

 

์™ธ์žฅ ์„œ๋ฒ„ ๋ฐฉ์‹์€ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— WAR ํŒŒ์ผ์„ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ , WAS๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ํ•œ๋‹ค. 

๋‚ด์žฅ ํ†ฐ์บฃ ๋ฐฉ์‹์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ JAR ์•ˆ์— ๋‹ค์–‘ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค๊ณผ WAS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ํฌํ•จ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ main() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋™์ž‘ํ•œ๋‹ค. 

 

 

1๏ธโƒฃ ๋‚ด์žฅ ํ†ฐ์บฃ ์„ค์ • 

//์Šคํ”„๋ง MVC ์ถ”๊ฐ€
implementation 'org.springframework:spring-webmvc:6.0.4'

//๋‚ด์žฅ ํ†ฐ์ผ“ ์ถ”๊ฐ€
implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5'

build.gradle์— tomcat-embed-core ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. ์ด๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ  refresh ํ•ด์ฃผ๋ฉด ํ†ฐ์บฃ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํฌํ•จํ•ด์„œ ํ†ฐ์บฃ ์„œ๋ฒ„๋ฅผ ์ž๋ฐ”์ฝ”๋“œ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

EmbedTomcatServletMain

public class EmbedTomcatServletMain
{
   public static void main(String[] args) throws LifecycleException
   {
      System.out.println("EmbedTomcatServletMain.main");
      
      // ํ†ฐ์บฃ ์„ค์ •
      Tomcat tomcat = new Tomcat();
      Connector connector = new Connector();
      connector.setPort(9090);
      tomcat.setConnector(connector);
      
      // ์„œ๋ธ”๋ฆฟ ๋“ฑ๋ก
      Context context = tomcat.addContext("", "/");
      File docBaseFile = new File(context.getDocBase());
      if (!docBaseFile.isAbsolute()) {
         docBaseFile = new File(
               ((org.apache.catalina.Host) context.getParent()).getAppBaseFile(), docBaseFile.getPath());
      }
      docBaseFile.mkdirs();
      tomcat.addServlet("", "helloServlet", new HelloServlet());
      context.addServletMappingDecoded("/hello-servlet", "helloServlet");
      
      tomcat.start();
   }
}

- ํ†ฐ์บฃ ์„ค์ • 

์šฐ์„  ํ†ฐ์บฃ ์„ค์ •์€ ๊ฐ„๋‹จํ•œ๋ฐ ๋‚ด์žฅ ํ†ฐ์บฃ์„ ์ƒ์„ฑํ•˜๊ณ , ํ†ฐ์บฃ์ด ์ œ๊ณตํ•˜๋Š” Connector ๋ฅผ ์‚ฌ์šฉํ•ด์„œ 9090 ํฌํŠธ์— ์—ฐ๊ฒฐํ•œ๋‹ค. 

 

- ์„œ๋ธ”๋ฆฟ ๋“ฑ๋ก 

public class HelloServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet.service");
        resp.getWriter().println("hello servlet!");
    }
}

HelloServlet์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ, 

ํ†ฐ์บฃ์— ์‚ฌ์šฉํ•  contextPath์™€ docBase๋ฅผ ์ง€์ •ํ•ด์ฃผ๊ณ , tomcat.addServlet์„ ํ†ตํ•ด์„œ ์„œ๋ธ”๋ฆฟ์„ ๋“ฑ๋กํ•ด์ค€๋‹ค. 

๊ทธ ํ›„ context.addServletMappingdDecoded()๋ฅผ ํ†ตํ•ด์„œ ๋“ฑ๋กํ•œ ์„œ๋ธ”๋ฆฟ์˜ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์ค€๋‹ค. 

 

- ํ†ฐ์บฃ ์‹œ์ž‘ 

์„ค์ •์„ ๋๋‚œ ํ›„์—” tomcat.start() ์„ ํ†ตํ•ด์„œ ํ†ฐ์บฃ์„ ์‹œ์ž‘ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

 

๐Ÿ’Œ ๋‚ด์žฅ ํ†ฐ์บฃ ๋ฐฉ์‹์€ ํ†ฐ์บฃ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํฌํ•จํ•˜๊ณ , ์œ„์™€ ๊ฐ™์ด ์ž๋ฐ”์ฝ”๋“œ๋กœ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

2๏ธโƒฃ  ๋‚ด์žฅ ํ†ฐ์บฃ, ์Šคํ”„๋ง ์—ฐ๊ฒฐ 

EmbedTomcatSpringMain

public class EmbedTomcatSpringMain
{
   public static void main(String[] args) throws LifecycleException
   {
      System.out.println("EmbedTomcatSpringMain.main");
      
      // ํ†ฐ์บฃ ์„ค์ •
      Tomcat tomcat = new Tomcat();
      Connector connector = new Connector();
      connector.setPort(9090);
      tomcat.setConnector(connector);

      // ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์„ค์ •
      AnnotationConfigWebApplicationContext appContext = new AnnotationConfigWebApplicationContext();
      appContext.register(HelloConfig.class);
      
      // ์Šคํ”„๋ง MVC ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ ์ƒ์„ฑ, ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์—ฐ๊ฒฐ
      DispatcherServlet dispatcher = new DispatcherServlet(appContext);
      
      // ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ ๋“ฑ๋ก
      Context context = tomcat.addContext("", "/");
      tomcat.addServlet("", "dispatcher", dispatcher);
      context.addServletMappingDecoded("/", "dispatcher");
      tomcat.start();
      
      
   }
}

๋‚ด์žฅ ํ†ฐ์บฃ์— ์Šคํ”„๋ง ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹์€ ๋น„์Šทํ•˜๊ฒŒ 

ํ†ฐ์บฃ ์„ค์ • ์šฐ์„  ํ•ด์ฃผ๊ณ , ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑํ•œ ๋‹ค์Œ, ์ด๋ฅผ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์— ์—ฐ๊ฒฐํ•ด์ฃผ๊ณ , 

์ด ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„ ๋“ฑ๋กํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

 

์„ค์ •์„ ๋งˆ์น˜๊ณ  ์ด์ œ main() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‚ด์žฅ ํ†ฐ์บฃ์„ ์ƒ์„ฑํ•ด์„œ 9090 ํฌํŠธ๋กœ ์—ฐ๊ฒฐํ•˜๋„๋ก ์„ค์ •ํ•˜๊ณ , 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋งŒ๋“ค๊ณ  ์ด์ œ ํ•„์š”ํ•œ ๋นˆ๋“ค์„ ๋“ฑ๋กํ•œ๋‹ค. 

์Šคํ”„๋ง MVC ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„ ๋งŒ๋“ค๊ณ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ๋””์ŠคํŒจ์ฒ˜ ์„œ๋ธ”๋ฆฟ์„ ๋‚ด์žฅ ํ†ฐ์บฃ์— ๋“ฑ๋กํ•˜๊ณ  ๋‚ด์žฅ ํ†ฐ์บฃ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 

 

 

๐Ÿ’Œ ์Šคํ”„๋ง MVC ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™” WebApplicationInitalizer (tistory.com)

 

์Šคํ”„๋ง MVC ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™” WebApplicationInitalizer

์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™” (tistory.com) ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ดˆ๊ธฐํ™” ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”๋ž€? (tistory.com) ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ ์ดˆ๊ธฐํ™”๋ž€? WAS๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹œ์ 

hyejin.tistory.com

์—ฌ๊ธฐ์„œ ํ–ˆ๋˜ ๋ฐฉ์‹๊ณผ ๊ฑฐ์˜ ๊ฐ™์€ ๋ฐฉ์‹์ธ๋ฐ ์ฐจ์ด์ ์ด๋ผ๊ณ  ํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ main ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ•˜๋Š”๊ฐ€ ์•„๋‹ˆ๋ฉด ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๋Š”๊ฐ€์— ์ฐจ์ด๊ฐ€ ์žˆ์„ ๋ฟ์ด๋‹ค. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90