아파치 톰캣은 웹 개발의 핵심 도구이지만, 정확한 이해 없이 사용하는 경우가 많습니다. 이 글에서는 톰캣의 개념부터 실제 활용까지 체계적으로 알아보겠습니다.
여러분이 웹 애플리케이션을 '집'이라고 생각해 보세요.
- 톰캣은 이 '집'이 안전하게 지어지고 살 수 있도록 기반을 제공하는 '부지'와 같습니다.
- 자바 서블릿과 JSP라는 '건축 자재'를 활용해 집을 지을 수 있게 해주는 환경을 제공합니다.
- 브라우저의 요청을 받아 적절한 응답을 제공하는 '집 주인'과 같은 역할을 합니다.
왜 필요한가?
아파치 톰캣이 해결하는 문제들은 다음과 같습니다:
정적 콘텐츠의 한계: 단순 HTML, CSS, 이미지만으로는 사용자와 상호작용하는 동적 웹사이트를 만들 수 없습니다. 톰캣은 자바를 통한 동적 콘텐츠 생성을 가능하게 합니다.
자바 웹 기술 실행 환경: 자바 서블릿, JSP, WebSocket 등 자바 기반 웹 기술을 실행할 수 있는 환경이 필요합니다. 톰캣은 이러한 기술들의 표준 스펙을 구현하여 개발자가 자바 기술로 개발한 웹 애플리케이션을 실행할 수 있게 합니다.
웹 서버와 애플리케이션 로직 분리: 웹 서버는 정적 콘텐츠 제공에 최적화되어 있지만, 비즈니스 로직 처리는 별도의 애플리케이션 서버가 필요합니다. 톰캣은 웹 애플리케이션 서버로서 이 둘을 연결하는 역할을 하며, 단독으로도 작은 규모의 서비스를 위한 웹 서버 기능을 수행할 수 있습니다.
기본 원리
아파치 톰캣의 핵심 원리를 알아볼까요?
주요 구성 요소
1. 카탈리나(Catalina): 서블릿 컨테이너로, 서블릿의 생명주기를 관리하고 요청을 처리합니다.
2. 재스퍼(Jasper): JSP 엔진으로 JSP 파일을 서블릿으로 변환하는 역할을 합니다.
3. 코요테(Coyote): HTTP 커넥터로, 클라이언트와의 통신을 담당합니다.
4. 엘다스(Eldas): 표현 언어(EL)을 처리하는 엔진입니다.
톰캣 디렉토리 구조
apache-tomcat/
├── bin/ # 톰캣 구동을 위한 실행 파일
├── conf/ # 서버 설정 파일
│ ├── server.xml # 주요 설정 파일
│ ├── web.xml # 기본 웹 애플리케이션 설정
│ └── context.xml # 컨텍스트 설정
├── lib/ # 톰캣 라이브러리 파일
├── logs/ # 로그 파일 저장 디렉토리
├── temp/ # 임시 파일 저장 디렉토리
├── webapps/ # 웹 애플리케이션 배포 디렉토리
│ ├── ROOT/ # 기본 웹 애플리케이션
│ └── examples/ # 예제 애플리케이션
└── work/ # 컴파일된 JSP 파일 등 작업 디렉토리
서블릿 컨테이너 동작 원리
1. 클라이언트가 HTTP 요청을 보냄
2. 코요테(Coyote)가 요청을 받아 카탈리나(Catalina)에 전달
3. 카탈리나가 요청을 분석하여 적절한 서블릿 인스턴스를 찾거나 생성
4. 서블릿 인스턴스가 요청을 처리하고 응답 생성
- 처음 요청 시: init() → service() 메서드 호출
- 이후 요청 시: service() 메서드만 호출
- 서블릿 종료 시: destroy() 메서드 호출
5. 응답이 코요테를 통해 클라이언트에게 전달됨
톰캣 버전별 특징
아파치 톰캣의 주요 버전별 특징을 비교해보겠습니다:
버전 | 서블릿 스펙 | JSP 스펙 | 지원 JDK | 주요 특징 |
---|---|---|---|---|
10.x | 6.0 (Jakarta EE 10) | 3.1 | JDK 11+ | Jakarta EE 10 지원, 성능 향상 |
9.x | 4.0 (Jakarta EE 8) | 2.3 | JDK 8+ | WebSocket 1.1, HTTP/2 지원 |
8.5.x | 3.1 | 2.3 | JDK 7+ | 성능 최적화, 메모리 사용량 감소 |
7.x | 3.0 | 2.2 | JDK 6+ | 비동기 서블릿, WebSocket 초기 지원 |
실제 예제
아파치 톰캣을 실제로 활용해 보겠습니다.
기본 설치 방법
# 1. JDK 설치 확인
java -version
# 2. 톰캣 다운로드 및 압축 해제
wget https://downloads.apache.org/tomcat/tomcat-10/v10.1.x/bin/apache-tomcat-10.1.x.tar.gz
tar -xzvf apache-tomcat-10.1.x.tar.gz
# 3. 실행 권한 부여
chmod +x apache-tomcat-10.1.x/bin/*.sh
# 4. 톰캣 실행
cd apache-tomcat-10.1.x/bin
./startup.sh
# 5. 실행 확인 (기본 포트: 8080)
curl http://localhost:8080
웹 애플리케이션 배포 방법
웹 애플리케이션을 톰캣에 배포하는 방법은 여러 가지가 있습니다:
- webapps 디렉토리에 WAR 파일 복사
# WAR 파일을 webapps 디렉토리에 복사하면 자동으로 배포됨
cp myapp.war apache-tomcat-10.1.x/webapps/
- 톰캣 관리자 웹 콘솔 사용
1. conf/tomcat-users.xml 파일에 관리자 계정 설정
2. http://localhost:8080/manager/html 접속
3. WAR 파일 업로드 섹션에서 파일 선택 후 배포
- context.xml 파일 사용
<!-- conf/Catalina/localhost/myapp.xml 파일 생성 -->
<Context docBase="/path/to/myapp" path="/myapp" reloadable="true" />
실전 활용
다음은 실제 프로젝트에서 어떻게 활용되는지 보여주는 예시입니다:
상황 | 일반적인 방법 | 톰캣 활용 방법 | 개선효과 |
---|---|---|---|
정적+동적 콘텐츠 제공 | 단일 서버 사용 | 아파치+톰캣 연동 (mod_jk) | 서버 부하 분산, 보안 강화 |
대규모 트래픽 처리 | 서버 스펙 업그레이드 | 톰캣 클러스터링 + 로드밸런싱 | 수평적 확장성, 고가용성 |
마이크로서비스 배포 | 복잡한 배포 과정 | 톰캣+Docker 활용 | 배포 간소화, 환경 일관성 |
주의사항 및 팁 💡
⚠️ 이것만은 주의하세요!
보안 설정
- 관리자 콘솔의 기본 비밀번호 변경 필수
- 불필요한 기능과 샘플 애플리케이션 제거
- server.xml의 버전 정보 노출 방지 설정
<!-- server.xml에서 설정 -->
<Connector port="8080" server="서버명 숨김" />
성능 최적화 설정
- JVM 메모리 설정
# bin/catalina.sh 또는 setenv.sh에 추가
JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx2g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m"
- 스레드 풀 설정
```xml
<!-- server.xml의 Connector 설정 -->
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="400" <!-- 최대 스레드 수 -->
minSpareThreads="50" <!-- 최소 유지 스레드 수 -->
acceptCount="100" <!-- 수용 대기열 크기 -->
connectionTimeout="20000" />
```
- 데이터베이스 커넥션 풀 설정
```xml
<!-- context.xml의 Resource 설정 -->
<Resource name="jdbc/myDB" auth="Container" type="javax.sql.DataSource"
maxTotal="100" <!-- 최대 커넥션 수 -->
maxIdle="30" <!-- 최대 유휴 커넥션 수 -->
maxWaitMillis="10000" <!-- 최대 대기 시간 -->
factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
username="user" password="password"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"/>
```
💡 꿀팁
- APR(Apache Portable Runtime) 커넥터 사용으로 네이티브 성능 확보
- 로깅 레벨 조정으로 디스크 I/O 부하 감소
- 세션 클러스터링으로 고가용성 확보
- 정적 콘텐츠는 별도의 웹 서버(Apache, Nginx)로 분리
마치며
지금까지 아파치 톰캣에 대해 알아보았습니다. 처음에는 어렵게 느껴질 수 있지만, 구조와 원리를 이해하면 자바 웹 개발의 강력한 도구가 됩니다. 톰캣은 가볍고 설치하기 쉬우면서도 엔터프라이즈급 성능과 확장성을 제공하여 소규모 프로젝트부터 대규모 서비스까지 다양한 환경에서 활용할 수 있습니다.
혹시 궁금한 점이 있으시거나, 더 알고 싶은 내용이 있으시면 댓글로 남겨주세요.
참고 자료 🔖
#아파치톰캣 #자바서블릿 #웹개발 #WAS #서블릿컨테이너
'100===Dev Ops > Tomcat' 카테고리의 다른 글
웹 애플리케이션의 세계: 톰캣과 스프링의 완벽한 조화 🚀 (0) | 2024.12.12 |
---|