우물안에서 보는 하늘도 맑다

Spring boot embed tomcat 사용법 링크 모음 본문

Spring boot embed tomcat 사용법 링크 모음

몽염이 2023. 4. 28. 13:30
반응형

* Embedded tomcat in 스프링부트 - 에디의 기술블로그
https://brunch.co.kr/@springboot/98

Embedded Tomcat  in 스프링 부트

- 스프링 부트 환경에서 Tomcat 설정 및 성능 검토하기 | 시간이 지나서 글을 다시 읽어봤는데, 너무 잡다한 내용의 글을 써놨었네요; 제목은 스프링 부트의 임베디드 톰캣 인데, 막상 스프링 부

brunch.co.kr


* Spring Boot] 스프링부트 원리 - 내장 서버 (HTTPS와 HTTP2), 요약 - dsunni

https://velog.io/@dsunni/Spring-Boot-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EC%9B%90%EB%A6%AC-%EB%82%B4%EC%9E%A5-%EC%84%9C%EB%B2%84-HTTPS%EC%99%80-HTTP2-1vcfg132

[Spring Boot] 스프링부트 원리 - 내장 서버 (HTTPS와 HTTP2), 요약

「스프링부트 개념과 활용」 - 2부

velog.io


* Spring Boot Tomcat을 구성하는 방법 - 그날그날메모

https://memo-the-day.tistory.com/m/126

Spring Boot Tomcat을 구성하는 방법

1. 개요 Spring Boot 웹 애플리케이션에는 기본적으로 사전 구성된 임베디드 웹 서버가 포함됩니다. 그러나 일부 상황에서는 사용자 지정 요구 사항을 충족 하도록 기본 구성 을 수정 하고 싶습니다

memo-the-day.tistory.com


구글에 embeded tomcat 을 설정하는 application.properties 를 설정하는 방법을 챗GPT에게 같이 물어보았다

Q. Spring boot 에서Tomcatsevletwebserverfacotry를 이용해서 embed tomcat을 실행 하는 예제를 알려줘
A. Spring Boot에서 내장 Tomcat을 실행하는 예제를 제공합니다.

먼저 pom.xml 파일에 spring-boot-starter-web 의존성을 추가해야 합니다. 다음으로, application.properties 파일에서 포트 번호와 컨텍스트 경로를 설정합니다.

<!-- pom.xml -->
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
# application.properties
server.port=8080
server.servlet.context-path=/myapp

이제 main 메서드에서 ServletWebServerFactory를 구성하고 run() 메서드를 호출하여 내장 Tomcat을 시작할 수 있습니다.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class MyApp {

    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }

    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.setPort(8080);
        factory.setContextPath("/myapp");
        return factory;
    }
}

위 예제에서는 TomcatServletWebServerFactory를 사용하여 webServerFactory() 메서드에서 내장 Tomcat을 구성합니다. setPort() 메서드와 setContextPath() 메서드를 사용하여 포트 번호와 컨텍스트 경로를 설정합니다.

이제 MyApp 클래스를 실행하면 내장 Tomcat 서버가 시작되고 http://localhost:8080/myapp URL에서 애플리케이션에 접근할 수 있습니다.


Q. jks는 뭘까
A. jks는 Java KeyStore의 약자로, Java 플랫폼에서 사용되는 키와 인증서의 저장소입니다.

Java 플랫폼에서 SSL/TLS 기반의 보안 통신을 사용하기 위해 서버 측에서는 공개키/비밀키 쌍을 생성하고, 인증 기관(CA)에서 발급받은 인증서를 설치합니다. 클라이언트 측에서는 서버 측에서 사용하는 인증서의 공개키를 이용하여 SSL/TLS 연결을 수립합니다.

이때, 서버 측에서는 개인키와 인증서를 보안적으로 안전한 위치에 저장해야 합니다. Java 플랫폼에서는 이를 위해 Java KeyStore를 사용하며, 이중 .jks는 Java KeyStore의 기본 형식 중 하나입니다.

.jks 파일은 Java KeyStore에 저장된 개인키와 인증서, 그리고 인증 기관에서 발급받은 CA 인증서 등을 포함하고 있습니다. 이를 통해 Java 플랫폼에서 SSL/TLS 기반의 보안 통신을 수행할 수 있습니다.

보안 관련된 작업에서 .jks 파일을 사용하는 경우가 많습니다. 예를 들어, Spring Boot 애플리케이션에서 HTTPS를 사용하기 위해 .jks 파일을 사용하는 경우가 있습니다.


Q. controller component springbootapplicatoion restcontroller 차이
A. @Controller, @Component, @SpringBootApplication, @RestController는 Spring Framework에서 사용되는 어노테이션입니다.

@Component는 Spring Framework에서 Bean으로 등록할 클래스를 표시하는 데 사용됩니다. 이 어노테이션이 지정된 클래스는 자동으로 스캔되어 Bean으로 등록됩니다.

@Controller는 Spring MVC 웹 애플리케이션에서 사용되는 어노테이션으로, HTTP 요청을 처리하고 HTTP 응답을 반환하는 컨트롤러 클래스를 지정하는 데 사용됩니다. 이 어노테이션이 지정된 클래스는 @RequestMapping 등의 다른 MVC 어노테이션과 함께 사용됩니다.

@SpringBootApplication은 Spring Boot 애플리케이션에서 사용되는 어노테이션으로, Spring Boot 애플리케이션의 시작점을 지정하는 데 사용됩니다. 이 어노테이션이 지정된 클래스는 main() 메서드가 포함되어야 하며, @EnableAutoConfiguration, @ComponentScan 등의 다른 Spring Boot 어노테이션을 포함합니다.

@RestController는 Spring MVC 웹 애플리케이션에서 @Controller 어노테이션과 유사하게 HTTP 요청을 처리하고 HTTP 응답을 반환하는 컨트롤러 클래스를 지정하는 데 사용됩니다. 이 어노테이션이 지정된 클래스는 @RequestMapping, @GetMapping, @PostMapping 등의 다른 RESTful 웹 서비스 어노테이션과 함께 사용됩니다.

간단히 말해, @Component는 일반적인 Spring Framework의 Bean 등록을 위한 어노테이션입니다. @Controller는 Spring MVC 웹 애플리케이션에서 사용되는 어노테이션입니다. @SpringBootApplication은 Spring Boot 애플리케이션에서 사용되는 어노테이션입니다. @RestController는 Spring MVC 웹 애플리케이션에서 RESTful 웹 서비스를 위한 어노테이션입니다.


Q. Springbootapplication tomcat maxthreads application.properties
A. @SpringBootApplication은 Spring Boot 애플리케이션의 시작점을 지정하는 어노테이션입니다. application.properties 파일은 Spring Boot 애플리케이션의 구성을 지정하는 데 사용됩니다. max-threads는 Tomcat의 최대 스레드 수를 지정하는 속성입니다.

Tomcat은 HTTP 요청을 처리하기 위해 스레드를 사용합니다. max-threads 속성을 사용하여 Tomcat에 할당되는 최대 스레드 수를 지정할 수 있습니다. 이를 통해 동시에 처리할 수 있는 요청 수를 제한할 수 있습니다.

max-threads 속성을 application.properties 파일에 추가하려면 다음과 같이 작성할 수 있습니다.

server.tomcat.max-threads=100

이렇게 설정하면 Tomcat의 최대 스레드 수가 100으로 설정됩니다. 이 값은 Spring Boot 애플리케이션의 성능을 조정하는 데 사용됩니다. 값이 너무 작으면 동시 요청에 대한 처리가 지연될 수 있으며, 값이 너무 크면 애플리케이션의 성능이 저하될 수 있습니다. 따라서 적절한 값으로 설정하는 것이 중요합니다.


Q. Appbase, unpackwars, autodeploy, className=“org.apache.catalina.valves.accesslogvalve”
A. appBase, unpackWARs, autoDeploy, className="org.apache.catalina.valves.AccessLogValve"은 Apache Tomcat의 설정 속성입니다.

appBase은 Tomcat이 웹 애플리케이션을 로드할 위치를 지정합니다. appBase는 Tomcat 서버의 Host 구성 요소에서 설정됩니다. 이 속성은 웹 애플리케이션을 배포할 때 사용됩니다. 예를 들어, appBase가 "/var/lib/tomcat/webapps"로 설정되어 있으면 Tomcat은 "/var/lib/tomcat/webapps" 디렉토리에서 WAR 파일 및 폴더를 검색하여 웹 애플리케이션을 로드합니다.

unpackWARs는 Tomcat이 WAR 파일을 압축 해제하도록 지시하는 속성입니다. 이 속성을 true로 설정하면 Tomcat이 WAR 파일을 압축 해제하여 웹 애플리케이션을 로드합니다. 이 속성을 false로 설정하면 Tomcat은 WAR 파일을 그대로 사용하여 웹 애플리케이션을 로드합니다.

autoDeploy는 Tomcat이 웹 애플리케이션의 변경사항을 자동으로 감지하도록 지시하는 속성입니다. 이 속성을 true로 설정하면 Tomcat은 appBase 디렉토리에서 웹 애플리케이션을 주기적으로 스캔하여 변경사항을 감지하고 자동으로 다시 로드합니다. 이 속성을 false로 설정하면 Tomcat은 웹 애플리케이션을 로드한 후 변경사항을 감지하지 않습니다.

className="org.apache.catalina.valves.AccessLogValve"은 Tomcat 서버의 로그를 처리하는 클래스를 지정하는 데 사용됩니다. AccessLogValve 클래스는 HTTP 요청 및 응답의 로그를 생성하는 데 사용됩니다. 이 클래스를 사용하면 로그 파일에 IP 주소, 요청 시간, 요청 메서드 등의 정보를 포함하여 로그를 작성할 수 있습니다. className 속성은 Tomcat의 구성 파일에서 사용됩니다.


Q. 위 내용을 applicaton.properties에서 설정 할수 있는 예제를 보여줘
A. 애플리케이션 프로퍼티 파일인 application.properties에서 이 속성들을 설정하는 예시를 보여드리겠습니다.

#appBase 설정 예제
server.tomcat.basedir=/var/lib/tomcat
server.tomcat.appBase=/var/lib/tomcat/webapps

#unpackWARs 설정 예제
server.tomcat.basedir=/var/lib/tomcat
server.tomcat.unpack-wars=true

#autoDeploy 설정 예제
server.tomcat.basedir=/var/lib/tomcat
server.tomcat.autoDeploy=true

#AccessLogValve 클래스 설정 예제
server.tomcat.basedir=/var/lib/tomcat
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b
server.tomcat.accesslog.directory=/var/log/tomcat
server.tomcat.accesslog.prefix=access_log
server.tomcat.accesslog.suffix=.log

이 예제에서는 server.tomcat 프로퍼티를 사용하여 Tomcat의 구성을 변경하고 있습니다. basedir 속성은 Tomcat의 기본 디렉토리를 지정합니다. appBase, unpack-wars, autoDeploy 속성은 Tomcat의 애플리케이션 배포 및 자동 배포 기능을 설정합니다. accesslog 접두어를 가진 속성은 Tomcat의 로그를 설정합니다. accesslog.enabled 속성을 true로 설정하면 로그가 작성되고, accesslog.pattern 속성을 사용하여 로그의 형식을 지정할 수 있습니다. accesslog.directory, accesslog.prefix, accesslog.suffix 속성을 사용하여 로그 파일의 경로 및 이름을 지정할 수 있습니다.


Q. Resttemplate 와 springapplication 의 차이가 뭐지
A. RestTemplate은 Spring 프레임워크에서 제공하는 HTTP 클라이언트 라이브러리로, 원격 서버와 HTTP 통신을 하기 위한 간단한 방법을 제공합니다. RestTemplate은 Java에서 원격 RESTful 웹 서비스와 통신할 수 있는 간단한 API를 제공하며, GET, POST, PUT, DELETE 등의 HTTP 메소드를 지원하며 HTTP 요청 및 응답을 처리하는 다양한 메소드를 제공합니다.

SpringApplication은 Spring 프레임워크에서 제공하는 기능 중 하나로, 스프링 애플리케이션을 실행할 수 있는 클래스입니다. SpringApplication은 웹 애플리케이션 또는 일반적인 자바 애플리케이션을 실행할 수 있으며, 애플리케이션을 구성하고 실행할 때 필요한 기능을 제공합니다. 예를 들어, SpringApplication은 자동 구성(auto-configuration), 빈 설정(bean configuration), 설정 파일 처리(configuration file processing) 등의 기능을 제공합니다.

따라서, RestTemplate과 SpringApplication은 서로 다른 기능을 제공하며, 완전히 다른 용도로 사용됩니다. RestTemplate은 HTTP 클라이언트 라이브러리로서 HTTP 통신을 위해 사용되고, SpringApplication은 Spring 애플리케이션을 실행하기 위한 클래스입니다. 그러나 둘 다 Spring 프레임워크에서 제공되며, Spring 애플리케이션을 구성하고 실행하는 데 필요한 다양한 기능을 제공합니다.


Q. 위에 두가지 중 embed tomcat 은 어떤거지
A. Embed Tomcat은 웹 애플리케이션을 내장한 Tomcat 서버를 실행하는 것을 의미합니다. 일반적으로 웹 애플리케이션을 배포하기 위해서는 외부 Tomcat 서버에 애플리케이션을 배포해야 하지만, Embed Tomcat을 사용하면 애플리케이션을 포함한 Tomcat 서버를 애플리케이션에 내장하여 실행할 수 있습니다.

Embed Tomcat을 사용하면 애플리케이션을 더 쉽게 실행, 테스트 및 배포할 수 있습니다. Embed Tomcat은 애플리케이션 실행에 필요한 Tomcat 서버 구성 및 구동에 대한 모든 작업을 자동으로 처리하므로, 사용자는 Tomcat을 수동으로 설치하고 구성할 필요가 없습니다. 또한, Embed Tomcat을 사용하면 다른 사람이 애플리케이션을 실행할 때 발생할 수 있는 버전 및 환경 차이와 같은 문제를 방지할 수 있습니다.

Embed Tomcat은 Spring Boot와 같은 프레임워크에서 자주 사용됩니다. Spring Boot은 Embed Tomcat을 기본으로 제공하여 개발자가 쉽게 웹 애플리케이션을 개발, 실행 및 배포할 수 있도록 지원합니다.

반응형