caffeine-library / pro-spring-5

🌱 전문가를 위한 스프링5를 읽는 스터디
5 stars 0 forks source link

[question] SpringBoot에서 tomcat 대신 jetty 사용하기 및, 이들을 스스로 사용하는 원리 #33

Closed binchoo closed 3 years ago

binchoo commented 3 years ago

질문

Tomcat 대신 jetty를 사용하도록 설정하는 방법

상세 내용

임베디드 톰캣을 사용하지 않고 대신 제티를 사용하려면 구성 파일을 간단히 수정해 spring-boot-starter-web 의존성에서 톰캣 스타터 모듈을 제외하면 됩니다.

임베디드 톰캣에서 앱을 실행하지 않고, 제티를 사용한다면

  1. spring-boot-starter-web 의존성에 이미 포함된 spring-boot-starter-tomcat 의존성을 제외하고
  2. jetty 의존성을 추가하면 된다고 합니다.

구체적인 방법은 설명되지 않아서 실제 설정 과정이 궁금합니다.

연관 챕터

29

챕터 4.15 예제 4-105 설명 마지막 문단

참고

cc. @caffeine-library/readers-pro-spring-5

binchoo commented 3 years ago

챕터4의 예제 코드중 boot-web의 구성을 수정한다고 가정합니다.

1단계. spring-boot-stater-tomcat 의존성 제거

boot-web> build.gradle > dependencies 클로져> 톰캣 의존성 제거를 추가합니다.

dependencies {
    ...
    compile(boot.starterWeb) {
        exclude module: "spring-boot-starter-tomcat"
    }
    ...
}

2단계. spring-boot-starter-jetty 의존성 추가

dependencies {
    ...
    compile(boot.starterWeb) {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile "org.springframework.boot:spring-boot-starter-jetty:$bootVersion"
}

번외

최상위 build.gradle> boot 리스트에 starterJetty라는 엔트리를 추가했을 경우

boot = [
        ...
    starterJetty    : "org.springframework.boot:spring-boot-starter-jetty:$bootVersion"
]

boot-web> build.gradle > dependencies 클로져

dependencies {
    compile boot.actuator
    compile(boot.starterWeb) {
        exclude module: "spring-boot-starter-tomcat"
    }
    compile boot.starterJetty
}

이후 Jetty 사용을 확인할 수 있었습니다. image

참고

의존 모듈 제외 시키기 - https://stackoverflow.com/a/42818588 Tomcat 대신 Jetty 사용 설정하기 - https://blog.leocat.kr/notes/2017/10/09/spring-boot-use-jetty-instead-of-tomcat

binchoo commented 3 years ago

추가 질문

개발자의 UX 측면에서, 스프링이 사용할 서블릿 컨테이너를 설정하려면 우리가 할 일은 tomcat이나 jetty등의 의존성을 설치하는 것 뿐입니다.

보통의 라이브러리 사용 과정은 이럴 텐데요.

  1. 그 라이브러리를 설치하고
  2. 필요한 클래스를 우리가 직접 임포트 & 인스턴스화

하지만, 스프링 부트는 의존성을 스스로 가져다 쓰고 있는데, 그 원리가 궁금합니다.

wooyounggggg commented 3 years ago

추가 질문

jetty와 tomcat은 어떠한 차이가 있는지, 그리고 둘 다 Servlet 기반 컨테이너인데, 이것이 Servlet과는 어떠한 관계성을 가지고

어떠한 도움을 주는지 궁금합니다.