ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 🐱 Tomcat
    🌱 spring 2023. 3. 12. 01:41

    🐱 Tomcat


    스프링 부트에서는 기본적으로 내장 서버로 톰캣을 사용한다.

     

    📖 내장 서버(Embedded server)를 사용하는 이유

    • 애플리케이션을 더 쉽게 개발하고 배포할 수 있도록 도와준다.
    1. 개발 및 테스트 용이
      • 내장 서버를 사용하면 별도의 WAS를 설치하거나 구성할 필요가 없다.
      • 따라서, 애플리케이션을 개발 및 테스트하는데 훨씬 용이
      • 애플리케이션 개발 과정에서 코드를 수정하면 서버를 다시 시작해 변경 사항을 반영할 수 있다.
    2. 단일 패키지 배포
      • 내장 서버를 사용 시, 애플리케이션과 서버가 단일 패키지로 묶여 있어 애플리케이션을 쉽게 배포할 수 있다.
      • 서버를 설치하거나 구성하는데 필요한 복잡성이 줄어들고 배포 프로세스가 간소화된다.
    3. 높은 이식성
      • 내장 서버를 사용하면 애플리케이션을 다른 환경으로 이식하기가 더 쉽다.
      • 실행 환경에 따라 내장 서버를 변경하거나 설정을 변경하여 애플리케이션을 배포할 수 있다.
    4. 성능 및 안정성
      • 애플리케이션을 실행하는데 필요한 서버 프로세스를 단일 프로세스로 관리한다.
      • 따라서, 애플리케이션의 성능과 안정성이 향상된다.
      • 내장 서버는 특정 서버에서 실행되는 애플리케이션과 달리 애플리케이션과 서버가 동일한 JVM에서 실행되 네트워크 오버헤드가 줄어들고 성능이 향상된다.

     

    ⭐️ 내장 서버를 사용하면 애플리케이션을 더 쉽게 개발하고 배포할 수 있다.

     

    ⭐️ 더 높은 이식성과 성능 / 안정성을 제공한다.

     

    🧐 아파치 (Apache)란?

    아파치는 아파치 소프트웨어 재단에서 관리하는 HTTP 웹 서버이다.

    • HTTP 서버로 다양한 추가 기능을 제공
    • 구축이 쉽다
    • 80포트 사용

    ⇒ 클라이언트에서 요청하는 HTTP 요청을 처리하는 웹서버

    • 정적 타입(HTML, CSS, 이미지 등)의 데이터만을 처리한다.

     

    🔥 Tomcat

    톰캣은 아파치 소프트웨어 재단의 웹 애플리케이션 서버이다(WAS)

    • 가장 일반적이로 많이 사용되는 WAS
    • 자바 서블릿을 실행
    • JSP 코드가 포함되어 있는 웹 페이지를 만들어 준다.
    • 8080 포트 사용

     

    🆚 Apache 와 Tomcat

    톰캣이 아파치의 기능(웹 서버의 기능)을 지원한다.

    하지만, 톰캣의 웹 서버 기능은 아파치 웹 서버보다 느리다.

    • 웹의 모든 정적/동적 데이터를 WAS가 처리하면 사용자의 요청에 대한 응답이 느려지게 된다.

    또한, 아파치의 모든 기능을 제공하지는 않는다.

    • 특수 상황에서 아파치 톰캣만으로 구현이 어렵다.

     

    일반적으로 아파치는 프록시 서버로 사용되어 클라이언트의 요청을 받아들이고, 톰캣과 같은 백엔드 서버로 요청을 전달한다.

     

    ⇒ 아파치는 정적인 파일들을 처리

    ⇒ 동적인 콘텐츠를 생성하는데는 톰캣과 같은 백엔드 서버에게 요청을 전달하여 처리하게 된다.

    ⇒ 아파치와 톰캣 각각 자신의 역할을 수행하면서 웹 서버의 성능을 높일 수 있다.

     

    왜 톰캣이 스프링 부트의 기본 내장 서버일까

    📖 기본 설정이 편리하다.

    • 개발자가 별도의 서버를 설치하거나 구성할 필요가 없다.

     

    📖 안정적이고 범용적이다.

    • 톰캣은 이미 많은 사용자들이 사용해왔기 때문에 안정성이 검증되어 있다.
    • 또한, 톰캣은 꾸준히 버전 업데이트가 이루어져 보안 이슈나 버그등에 대한 대처가 빠르다.

     

    📖 호환성

    • 톰캣은 Java Servlet API, JSP API 등과 호환성이 뛰어나다

     

    📖 설정 용이

    • 설정이 비교적 간단하다

     

    📖 적절한 성능

    • 톰캣은 동시에 처리 가능한 요청 수가 많아 대규모 웹 애플리케이션에 적합하다.
    • 스프링 부트는 Tomcat의 NIO 기능을 활용해 비동기 I/O를 처리해 좋은 성능을 낸다.

     

    🌟 스프링 부트는 기본 설정이 편리하고 안정적이며 범용적인 서버인 톰캣을 내장 서버로 사용한다.

     

    🧾 다른 내장 서버


    📍 제티(Jetty)

    Jetty는 Eclipse Foundation에서 개발한 Java 웹 애플리케이션 서버이다.

     

    특징

    • Jetty는 빠른 시작 시간과 작은 메모리 풋프린트를 가지고 있다.
    • 서블릿 컨테이너와 웹 서버를 함께 제공하여, 비동기 요청을 처리를 지원하기 때문에 대규모 트래픽 처리에 적합하다.

     

    📍 언더토(Undertow)

    Undertow는 Red Hat에서 개발한 경량 Java 웹 애플리케이션 서버이다.

     

    특징

    • 높은 처리량과 낮은 지연 시간을 가지고 있다.
    • 비동기 요청 처리를 지원
    • WebSocket 및 HTTP/2 프로토콜을 지원해 성능 및 확장성이 뛰어나다.

     

    📍 네티(Netty)

    Netty는 JBoss에서 개발한 네트워크 프레임워크이다.

     

    특징

    • 다양한 프로토콜을 지원한다.
      • TCP 및 UDP 기반의 비동기 네트워크 애플리케이션을 개발할 수 있다.
      • TCP, UDP, HTTP, WebSocktes

     

    • 이벤트 기반
      • Netty는 이벤트 기반으로 구성되어 네트워크 입출력 처리 시 이벤트를 처리하는 핸들러를 구현할 수 있다.

     

    • 네트워크 I/O 처리를 위해 NIO API를 사용한다.
      • 비동기 I/O를 사용하기 때문에 네트워크 입출력을 처리하는데 소요되는 시간을 최소화

     

    • 대규모 트래픽 처리 및 고성능 네트워크 애플리케이션 개발에 적합하다.
      • 높은 성능을 제공

     

    대규모 트래픽을 좀 더 효율적으로 처리할 수 있는 서버를 개발하기 위해 많은 사람들이

    Tomcat + Spring MVC 환경에서 Netty + Spring Webflux 전환을 고려한다.

     

    참고자료

    https://byul91oh.tistory.com/65

    https://velog.io/@newtownboy/Spring-톰캣과-아파치

    https://inpa.tistory.com/entry/TOMCAT-⚙️-설치-설정-정리

    '🌱 spring' 카테고리의 다른 글

    @TransactionalEventListener 적용해보기 😎  (0) 2024.03.17
    🍀 MongoDB - QueryDsl with Spring  (0) 2023.05.30
    ThreadLocal  (0) 2023.01.18
    🌊 Connection Pool  (0) 2023.01.13
    JDBC ❓  (0) 2023.01.13

    댓글

Designed by Tistory.