Tomcat이란?

황정준·2023년 7월 25일
0

Tomcat

Tomcat이란?

  • 아파치 소프트웨어 재단의 웹 어플리케이션 서버 (Web Application Server, WAS)
  • 자바 서블릿을 실행시키고 JSP코드가 포함되어 있는 동적 웹 페이지를 구동시켜주는 프로그램
  • 내장되어 있는 웹 서버를 이용해 독립적으로 사용될 수도 있으나 아파치(httpd), Nginx 등의 웹 서버와 함께 사용할 수도 있음

Tomcat의 구조

  • Coyote (HTTP Component) : Tomcat에 TCP를 통한 프로토콜 지원
  • Catalina (Servlet Container) : 자바 서블릿을 호스팅하는 환경
  • Jasper (JSP Engine) : 실제 JSP 페이지의 요청을 처리하는 Servlet

Tomcat의 동작

  • HTTP 요청을 Coyote에서 받아서 Catalina로 전달
  • Catalina에서 전달받은 HTTP 요청을 처리할 웹 어플리케이션을 찾고 WEB-INF/web.xml 파일 내용을 참조하여 요청을 전달
  • 요청된 Servlet을 통해 생성된 JSP 파일들이 호출될 때 Jasper가 Validation Check/Compile등을 수행

처리순서

  • HTTP request > Catalina > Context > Servlet > Response

Tomcat은 JVM 위에서 동작

하나의 JVM에서 하나의 Tomcat Instance가 하나의 Process로 동작

하나의 Server에는 여러 개의 Service가 존재 가능, 각각의 Service는 1개의 Engine여러 개의 Connector로 구성

Engine은 Catalina Servlet Engine이라고도 불리며, 정의된 Connector로 들어온 요청을 하위에 있는 해당 Host에게 전달해주는 역할을 수행

하나의 Engine에는 여러 개의 Host가 존재 가능, Host는 가상호스트 이름을 나타내며, 호스트 이름이 곧 url에 매핑

Host에는 여러 개의 Context가 존재 가능, Context는 하나의 Web Application을 나타내며 주로 *.war 파일의 형태로 배포

Tomcat Server가 요청을 받으면, Catalina (Tomcat Engine)가 요청에 맞는 Context (Context path)를 찾고, Context는 자신이 설정된 어플리케이션의 deployment descriptor file (web.xml)을 기반으로 전달받은 요청을 서블릿에게 전달하여 처리


Tomcat 파일구조

  • bin : 톰캣실행에 필요한 실행, 종료 스크립트 파일이 위치
  • conf : server.xml 및 서버 전체 설정과 관련한 톰캣 설정파일들이 위치
  • lib : 아파치와 같은 다른 웹서버와 톰캣을 연결해주는 바이너리 모듈들이 포함되어있고 톰캣구동하는데 필요한 라이브러리들이 위치
  • logs : 톰캣실행 로그파일 위치
  • temp : 톰캣이 실행되는 동안 임시파일이 위치
  • webapps : 웹어플리케이션 위치
  • work : jsp파일을 서블릿형태로 변환한 java파일과 class 파일을 저장하는 위치

Embedded Tomcat

  • 톰캣은 기본적으로 Java로 개발되어 있음
  • 위에서 설명한 일반적인 톰캣말고 임베디드 톰캣을 사용하면 웹 어플리케이션에 내장시켜서 어플리케이션과 동일한 JVM에서 실행이 가능
  • 마이크로서비스에 적합
  • Spring boot에서는 기본적으로 Embedded Tomcat이 포함되어 있음

Tomcat과 Embedded Tomcat의 차이

  • 성능 상 유의미한 차이 없음
  • 임베디드 톰캣은 virtual host가 지원되지 않음
  • 임베디드 톰캣은 WAS 설정을 웹 어플리케이션 내부에서 해야함 (Java Code, application.properties 등)
  • 외장 톰캣은 xml파일로 WAS설정을 할 수 있음
  • 부팅속도는 Embedded Tomcat이 좀 더 빠름

그래서 무엇을 선택해야 하나?

나는 B2B 솔루션 제품을 개발하고 있어서 고객사의 요구사항에 따라 설정이 달라지는 경우가 많다.
이런 경우에 배포환경에서는 외장톰캣을 사용하고 상황에 맞춰서 xml파일 수정으로 대응해주고 있는데 고객사에 나가는 제품이 아닌 클라우드 환경의 단일 서버인 경우 임베디드 톰캣을 채택해 사용하고 있다.
결론은 상황에 맞는 최선의 기술을 선택하는 것이 중요하다.

profile
호기심 많은 주니어 백엔드 개발자입니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 25일

정리가 잘 된 글이네요. 도움이 됐습니다.

답글 달기