SPRING/Spring Boot

[SpringBoot] Main클래스에서 내장톰캣 실행시키기

IT록흐 2023. 4. 2. 16:30
반응형

 

[SpringBoot] 외장톰캣에서 SpringMVC 구현하기

[SpringBoot] 외장톰캣으로 WAS 띄우기 with IntelliJ(무료버전) SpringBoot는 내장톰캣을 사용한다. SpringBoot가 내장톰캣을 사용하면서 간편해진 점을 알아보기 위해 우선, SpringBoot 이전에 사용했던 외장톰

lordofkangs.tistory.com

 

 
지난 포스팅에는
외장톰캣을 활용한 SpringMVC를 구현해보았다.
 

 
 

 

 

개발자가 작성한 코드가 WAR로 압축되고 톰캣WAS로 배포된 뒤, WAS서버가 실행되어야 했다. 서버의 실행주체는 외장톰캣이다.
 

 
 

 
발상을 바꾸어,
어차피 톰캣도 JAVA언어로 구현되어있는데 톰캣을 라이브러리로 만들고 개발자가 톰캣설정 및 실행을 하는 코드를 구현하여 main 메소드로 실행시키면 어떨까?

 
이것이 내장톰캣이다.
 
 
build.gradle

plugins {
    id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    //내장 톰캣 추가
    implementation 'org.apache.tomcat.embed:tomcat-embed-core:10.1.5'
}

tasks.named('test') {
    useJUnitPlatform()
}

 
톰캣을 외부에서 설치하는 것이 아닌 Gradle을 통해 라이브러리를 받는다.
 
내장톰캣 실행 Main 클래스

import hello.servlet.HelloServlet;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Tomcat;

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(8080);
        tomcat.setConnector(connector);
        
        // 서블릿 등록
        Context context = tomcat.addContext("", "/");
        tomcat.addServlet("", "helloServlet", new HelloServlet());
        context.addServletMappingDecoded("/hello-servlet","helloServlet");
        
        // 톰캣 실행
        tomcat.start();

    }
}

 
HelloServlet.java

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

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!");
    }
}

 
결과

 
 
이와같이, 따로 Tocat서버를 설치하거나 실행시키지 않아도 된다. Gradle로 라이브러리를 받고 JAVA코드로 설정을 하면 끝난다. 다음 포스팅에서는 내장톰캣을 활용하여 Spring Boot클래스를 만들어 보겠다. 
 
 


 

참고자료

스프링 부트 - 핵심 원리와 활용 - 인프런 | 강의

실무에 필요한 스프링 부트는 이 강의 하나로 모두 정리해드립니다., - 강의 소개 | 인프런

www.inflearn.com

 
 
 

반응형