CS
  • CS-Study
  • database
    • B-Tree와 B+Tree
    • DB JOIN
    • DB Lock
    • DB 트래픽
    • DBCP (DB Connection Pool)
    • Flyway
    • Message Broker
    • MySQL InnoDB 스토리지 엔진
    • MySQL 엔진 아키텍처
    • RDB와 NoSQL
    • Redis
    • SQL Injection
    • 스키마 (Schema)
    • Table Scan과 Index Scan
    • Apache Kafka
    • Key
    • 뷰 (View)
    • 인덱스
    • 정규화
    • RDBMS, NoSQL의 클러스터링/리플리케이션 방식
    • 트랜잭션(Transaction)
    • 트랜잭션의 격리성(Transaction Isolation)
    • 프로시저와 트리거
    • DB 정규화 (Normalization)
  • etc
    • MSA
    • REST, REST API, RESTful
    • SOLID 원칙
    • TDD (Test-Driven Development)
    • 서버리스
    • 컨테이너와 도커
  • java
    • Collections
    • Garbage Collection
    • Generic
    • JDBC
    • Java Virtual Machine(JVM)
    • Java Thread
    • Java8 vs Java11 vs Java17
    • 객체지향 프로그래밍 OOP (Object Oriented Programing)
    • Optional
    • RxJava(Reactive Programming)
    • 문자열(String & StringBuffer & StringBuilder)
    • Synchronized
    • Virtual Thread
    • Wrapper Class
    • Equals()와 Hashcode()
    • final
    • Jackson 라이브러리
    • 리플렉션(Reflection)
    • static class와 static method
    • 스트림(Stream)과 람다(Lambda)
    • 스프링 프레임워크에서 사용되는 디자인 패턴
    • 예외처리(Exception)
    • Java Annotation
    • 추상클래스와 인터페이스
  • network
    • 3-way handshake
    • 4-way Handshake
    • DHCP(Dynamic Host Configuration Protocol)
    • DMZ(DeMilitarized Zone)
    • DNS(Domain Name System)
    • HTTP Method
    • HTTP 버전 비교
    • HTTP status code
    • HTTP
    • IP Address
    • Mutiplexing & Demultiplexing
    • OSI 7계층
    • SOP, CORS
    • TCP와 UDP
    • XSS와 CSRF
    • gRPC
    • Stateless와 Connectionless
    • 라우터 Router
    • 로드밸런서(Load Balancer)
    • 브라우저에 URL입력시 네트워크 상 일어나는 일
    • 서브넷 마스크, 게이트웨이
    • 웹 소켓과 소켓 통신
    • 쿠키(Cookie)와 세션(Session)
  • operating-system
    • IPC (Inter Process Communication)
    • 인터럽트
    • TLB
    • 스레싱 Thrashing
    • Thread Pool, Fork-Join
    • Thread Safe
    • 프로세스
    • 가상 메모리
    • 데드락 (DeadLock, 교착 상태)
    • 동기/비동기 & 블로킹/논블록킹
    • 동기화(Synchronization)
    • 메모리 할당과 단편화
    • 뮤텍스와 세마포어, 모니터
    • 세그먼테이션과 페이징
    • 운영체제
    • 캐시 메모리
    • Context switching(문맥 교환)
    • 컴파일
    • 파일 시스템
    • 페이지 교체 알고리즘(Page Replacement Algorithm)
    • 프로세서 스케줄링 알고리즘
    • 프로세스 주소 공간
  • spring
    • @Transactional
    • AOP(Aspect-Oriented Programming)
    • DTO, DAO, VO, Entity
    • DispatcherServlet
    • Hibernate, JPA, Spring Data JPA
    • Ioc와 DI
    • JPA 연관관계 맵핑
    • N+1 Problem
    • ORM
    • Persistence Context
    • SQL Mapper vs ORM vs QueryBuilder
    • Servlet Filter와 Spring Interceptor
    • Servlet
    • Spring MVC와 Spring Boot
    • Tomcat
    • WebFlux
Powered by GitBook
On this page
  • 배경지식
  • Web Server
  • WAS (Web Application Server)
  • Apache Tomcat 이란?
  • Apache
  • Tomcat
  • Embedded Tomcat
  • 외장 톰캣
  • 내장 톰캣
  • Ref
  1. spring

Tomcat

배경지식

Web Server

개념

  • HTTP 프로토콜을 이용해 정적인 웹페이지를 보여주는 역할을 하는 서버

    • 클라이언트로부터 HTTP요청을 받아드리고 HTML문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램

    • 위 기능을 제공하는 컴퓨터 프로그램을 실행하는 컴퓨터(하드웨어 측면)

  • HTTP 프로토콜 기반으로, 클라이언트의 요청을 서비스하는 기능

역할

  • 정적 컨텐츠 제공

    • WAS를 거치지 않고 바로 자원 제공

  • 동적 컨텐츠 제공을 위한 요청 전달

    • 동적컨텐츠 요청을 WAS로 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달

기능

  • Reverse Proxy

    • 서버와 클라이언트 사이 프록시를 두고 프록시를 통해 데이터를 주고받음

    • 보안의 이유로 서버 내부 구조를 감추기 위해 사용

    Forward Proxy : 서버에 방문하는 클라이언트의 주소를 감춤
    Reverse Proxy : 클라이언트에게 서버의 주소를 감춤
  • 로드 밸런싱

    • 클라이언트의 요청에 따른 처리를 동작 중인 여러 WAS에게 적절히 분배

  • 캐싱

    • Reverse Proxy의 캐시를 의미

    • 서버로 찾아오는 클라이언트들이 자주, 반복적으로 요청하는 리소스들을 프록시 서버에 저장하고 제공

  • 주기적인 체크

    • 웹 서버에 존재하는 수 많은 모듈을 사용해 WAS서비스가 정상적으로 동작하고 있는지 체크

Reverse Proxy, 로드밸런싱, 캐싱의 역할을 Web Server가 담당하기에 Web Server와 WAS를 함께 이용한다

필요성

  • 단순 정적 컨텐츠 처리를 맡으며 서버 부하 방지 및 효율적 분산처리 수행

예시

  • Apache, NginX, IIS(window 전용 web서버)

WAS (Web Application Server)

개념

  • DB조회 및 다양한 로직을 처리를 요구하는 동적 컨텐츠를 제공하기 위해 만들어진 Application server

  • HTTP를 통해 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어

  • 웹 컨테이너, 서블릿 컨테이너라고도 불림

    • 웹 컨테이너

      • JSP, Servlet을 실행할 수 있는 소프트웨어

      • 웹 서버에서 JSP를 요청하면 톰캣에서는 JSP파일을 서블릿으로 변환하여 컴파일을 수행하고, 서블릿 수행결과를 웹 서버에게 전달

      • JSP컨테이너가 탑재되어있는 WASsms JSP페이지를 컴파일해 동적인 페이지 생성

    • 즉 WAS는 JSP, Servlet 구동환경을 제공

JSP (Java Server Pages)

  • HTML코드에 JAVA코드를 넣어 동적 웹페이지를 생성하는 웹어플리케이션 도구

  • JSP가 실행되면 서블릿으로 변환되며 웹 어플리케이션 서버에서 동작되며 필요한 기능 수행

  • 위를 통해 생성된 데이터를 웹 페이지와 함께 클라이언트로 응답

역할

  • Web Server 기능들을 구조적으로 분리해 처리하는 목적으로 제시

  • 현재 WAS가 가지는 Web server도 정적 컨텐츠를 처리하는데 성능상 큰 차이 없음

기능

  • 프로그램 실행 환경과 데이터베이스 접속 기능 제공

  • 여러개의 트랜잭션 관리

  • 업무를 처리하는 비즈니스 로직 수행

  • Web Service 플랫폼으로서의 역할

필요성

  • 자원의 효율적 사용: 요청에 맞는 데이터를 DB에서 가져와 비즈니스 로직에 맞춰 그때그때 결과 제공

예시

  • Tomcat, Jetty, Undertow, Boss, Jeus, Web Sphere

위의 예시들은 자바진영에서 사용하는 것을 WAS로, 자바이외의 다른 진영에서는 WAS역할을 명확히 구분해놓지 않고있다.

Web Server와 WAS의 분리이유

  • 기능 분리로 서버 부하 방지

  • 물리적 분리로 보안강화

  • 여러대의 WAS 연결이 가능하므로 로드밸런싱, fail over, fail back 처리에 유리

  • 여러 웹 어플리케이션 서비스 가능

Apache Tomcat 이란?

  • Apache 재단에서 제공하는 공개 소프트웨어 웹 어플리케이션(WAS)

  • Tomcat이 Apache의 기능 일부를 가져와 제공해주는 형태로 Apache Tomcat으로 같이 합쳐서 부름

Apache

  • Apache 소프트웨어 재단에서 관리하는 HTTP 웹 서버

    • 흔히 부르는 apache server는 해당 재단에서 후원하는 오픈소스 프로젝트 커뮤니티에서 만든 http 웹 서버를 의미

Tomcat

개념

  • Apache 재단에서 개발한 서블릿 컨테이너(WAS)

  • JSP, 자바 서블릿과 같은 자바 기술을 실행하고 관리하는데 사용

구성

  • Coyote (HTTP Connector)

    • 톰캣의 HTTP Connector 역할 담당

      • 클라이언트와 서버간의 통신 처리

      • HTTP 프로토콜 지원

    • 아파치 웹서버와 함께 정적파일 서비스

    클라이언트와 통신을 담당

  • Catalina (Servlet Container)

    • 톰캣의 Servlet Container 역할

      • JSP, Java Servlet을 호스팅하는 환경 제공

      • 서블릿의 라이프사이클 관리

    서블릿과 JSP의 실행

  • Jasper (JSP Engine)

    • 톰캣의 JSP엔진

      • JSP페이지를 서블릿으로 변환하고 실행하는 역할

      • 클라이언트가 JSP페이지에 접근하면 이를 서블릿 코드로 변환하고 컴파일 후 실행

    JSP페이지의 처리

동작

  1. HTTP request: HTTP요청을 Coyote에서 받아 Catalina로 전달

  2. Catalina : Catalina에서 전달받은 HTTP요청을 처리할 웹 어플리케이션(Context)를 찾음

  3. Context : WEB-INF/web.xml 파일 내용을 참조해 전달받은 요청을 서블릿에게 전달

  4. Servlet : 요청된 Servlet을 통해 생성된 jsp 파일들이 호출될 때, Jasper (JSP Engine)가 Validation Check / Compile 등을 수행

특징

  • Tomcat은 자바로 작성된 프로그램으로 JVM위에서 동작

    • 하나의 JVM에 하나의 Tomcat Instance(Server)가 하나의 프로세스로 동작

Embedded Tomcat

외장 톰캣

어플리케이션 실행

  • 톰캣 설치

    • 실제 자바로 작성된 코드와 상호작용할 서블릿 컨테이너가 필요함

  • 톰캣 설정 파일 구성

  • 톰켓 webapp 디렉토리에 빌드된 스프링 어플리케이션 war파일 포함

  • 톰캣 실행

특징

  • Host설정으로 apache virtual host 설정 가능

    • Apache HTTPd에서 사용하는 Virtual Host 기능 제공

      • Virtual Host : main host 하위에 가상의 호스트를 소프트웨어적으로 둘 수 있는 기능

    즉 여러 어플리케이션을 하나의 포트로 서비스 할 수 있음

내장 톰캣

  • Spring boot에는 톰캣이 내장되어있음

    • 어플리케이션 빌드와 실행만으로 웹 어플리케이션 서비스 가능

    • 톰캣을 설치할 필요없이 어플리케이션 바로 실행 가능

어플리케이션 실행

  • 빌드된 스프링부트 어플리케이션 jar, war를 자바 명령어로 실행

특징

  • 여러 호스트를 분기할 수 있는 기능을 사용하기 매우 복잡

    • 내장톰캣으로 실행하는 Spring boot어플리케이션은 그 자체가 하나의 프로그램으로 서블릿 컨테이너가 하나의 포트를 독자적으로 점유

  • 톰캣 구성 부분의 관심사를 분리하여 개발자가 코드 작성에 집중 가능

Ref

PreviousSpring MVC와 Spring BootNextWebFlux

Last updated 12 months ago

아파치 톰캣 내부구조
Web - 아파치(Apache)/톰캣(Tomcat)이란?
Embedded Tomcat과 Tomcat의 차이