내부 톰캣 vs 외부 톰캣
내부 톰캣 (Embedded Tomcat)
- Spring boot에 내장된 톰캣 서버
- Jar 파일 실행으로 애플리케이션과 함께 시작
- 별도 설치 불필요, 의존성으로 포함
- 개발 환경에서는 빠른 테스트 및 배포 가능
- 설정을 application.properties에서 관리
장점:
- 배포 간편 -> jar 하나로 실행 완료
- 개발 생산성 -> 별도 서버 설정 불필요
- 포트 관리 -> 자동 포트 할당 가능
- 마이크로서비스 -> 독립적 배포에 최적화
- 버전 호환 -> 스프링 부트가 호환성 보장
단점:
- 메모리 사용량 -> 각 앱 마다 톰캣 인스턴스 생성
- 튜징 제약 -> 세밀한 성능 조정 어려움
- 모니터링 -> JVM 레벨 모니터링 제한적
- 확정성 -> 대규모 트래픽 처리에 한계
외부 톰캣 (Standalone Tomcat)
- 별도 설치된 독립적인 톰캣 서버
- war 파일을 webapps 디렉토리에 배포
- 톰캣 서버 설정 파일(server.xml, context.xml) 로 관리
- 운영 환경에서 세밀한 튜닝 가능
- 여러 어플리케이션 동시 배포 가능
장점:
- 성능 튜닝 -> 커넥션 풀, 스레드 등 세밀 조정
- 리소스 효율 -> 여러 앱이 톰캣 인스턴스 공유
- 모니터링 -> JMX, 관리 도구 풍부
- 운영 안정성 -> 검증된 운영 환경
단점:
- 배포 복잡 -> war 패키징, 서버 의존성
- 설정 관리 -> 서버와 앱 설정 분리 관리
- 환경 차이 -> 개발/운영 환경 불일치 가능성
대표적인 외부 톰캣(WAS)
Apache Tomcat
가장 널리 사용되는 오픈소스 서블릿 컨테이너
- 경량화 되어 중소규모 애플리케이션에 적합
- Spring 프레임워크와 궁합이 좋다
상용 WAS
WebLogic (Oracle): 엔터프라이즈급 기능, 클러스터링 강력
WebSphere (IBM): 대기업 환경, 트랜잭션 처리 우수
JEUS (TmaxSoft): 국산 WAS, 금융권에서 많이 사용
JBoss/WildFly (Red Hat): 오픈소스 기반, EJB 지원
클라우드 네이티브
Undertow: JBoss에서 개발, 고성능 비동기 처리
Jetty: Eclipse 재단, 임베디드 환경에 최적화