Apache & Tomcat
2020. 3. 18. 12:59ㆍDevOps/서버
반응형
Apache HTTP Server (아파치 웹 서버)
Apache HTTP Server는 세계에서 가장 널리 사용되는 오픈소스 웹 서버 소프트웨어입니다.
🔧 주요 기능
1. 정적/동적 콘텐츠 제공
- HTML, CSS, 이미지 등 정적 파일 서비스
- PHP, Python, Perl 등과 연동하여 동적 콘텐츠 생성
2. 모듈 기반 아키텍처
- 필요한 기능만 모듈로 로드하여 사용
- 대표적인 모듈:
mod_ssl- HTTPS 지원mod_rewrite- URL 재작성mod_proxy- 리버스 프록시mod_php- PHP 연동
3. 가상 호스트 (Virtual Host)
- 하나의 서버에서 여러 도메인/웹사이트 운영 가능
4. 보안 기능
- SSL/TLS 암호화 지원
- 접근 제어 (IP 기반, 인증 기반)
.htaccess파일을 통한 디렉토리별 설정
📁 주요 설정 파일
# 메인 설정 파일 (Linux 기준)
/etc/apache2/apache2.conf # Debian/Ubuntu
/etc/httpd/conf/httpd.conf # CentOS/RHEL
# 가상 호스트 설정
/etc/apache2/sites-available/ # Debian/Ubuntu
# 디렉토리별 설정
. htaccess
💻 기본 명령어
# 서비스 시작/중지/재시작
sudo systemctl start apache2
sudo systemctl stop apache2
sudo systemctl restart apache2
# 설정 파일 문법 검사
sudo apache2ctl configtest
# 상태 확인
sudo systemctl status apache2
# 활성화된 모듈 확인
apache2ctl -M
📝 간단한 가상 호스트 설정 예시
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access. log combined
</VirtualHost>
🎯 Apache를 선택하면 좋은 경우
- ✅
.htaccess를 통한 디렉토리별 설정이 필요할 때 - ✅ PHP와 함께 사용할 때 (mod_php)
- ✅ 공유 호스팅 환경
- ✅ 다양한 모듈 기능이 필요할 때
- ✅ 레거시 시스템과의 호환성이 중요할 때
Apache Tomcat (아파치 톰캣)
Apache Tomcat은 Java 기반 웹 애플리케이션을 실행하기 위한 오픈소스 서블릿 컨테이너(Servlet Container) 입니다.
🤔 Apache HTTP Server vs Tomcat 차이점
| 구분 | Apache HTTP Server | Apache Tomcat |
|---|---|---|
| 용도 | 정적 웹 콘텐츠 제공 | Java 웹 애플리케이션 실행 |
| 처리 대상 | HTML, CSS, 이미지 등 | JSP, Servlet, Java 앱 |
💡 쉽게 말해: Apache는 일반 웹 서버, Tomcat은 Java 전용 웹 서버(WAS)입니다.
🔧 주요 기능
1. 서블릿 컨테이너 (Servlet Container)
- Java Servlet을 실행하고 관리
- HTTP 요청을 받아 Servlet에 전달
2. JSP 엔진
- JSP (JavaServer Pages) 파일을 컴파일하고 실행
3. 웹 서버 기능
- 정적 콘텐츠도 제공 가능 (하지만 Apache/Nginx보다 느림)
4. Java EE 일부 지원
- Servlet, JSP, WebSocket, EL, JASPIC 등 지원
📁 디렉토리 구조
$CATALINA_HOME/
├── bin/ # 시작/종료 스크립트
├── conf/ # 설정 파일 (server.xml, web.xml 등)
├── lib/ # 라이브러리 (JAR 파일)
├── logs/ # 로그 파일
├── temp/ # 임시 파일
├── webapps/ # 웹 애플리케이션 배포 디렉토리
└── work/ # JSP 컴파일 결과물📝 주요 설정 파일
# 서버 전체 설정
conf/server.xml
# 웹 애플리케이션 기본 설정
conf/web.xml
# 사용자 및 권한 설정
conf/tomcat-users.xml
# 컨텍스트 설정
conf/context.xml
💻 기본 명령어
# Tomcat 시작
$CATALINA_HOME/bin/startup.sh # Linux/Mac
$CATALINA_HOME\bin\startup.bat # Windows
# Tomcat 종료
$CATALINA_HOME/bin/shutdown.sh # Linux/Mac
$CATALINA_HOME\bin\shutdown. bat # Windows
# 또는 systemd 사용 (Linux)
sudo systemctl start tomcat
sudo systemctl stop tomcat
sudo systemctl restart tomcat
⚙️ server.xml 기본 설정 예시
<Server port="8005" shutdown="SHUTDOWN">
<Service name="Catalina">
<!-- HTTP 커넥터 (기본 포트: 8080) -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- HTTPS 커넥터 -->
<Connector port="8443" protocol="HTTP/1.1"
SSLEnabled="true"
keystoreFile="/path/to/keystore"
keystorePass="password" />
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
</Host>
</Engine>
</Service>
</Server>
🚀 웹 애플리케이션 배포 방법
1. WAR 파일 배포
# WAR 파일을 webapps 디렉토리에 복사
cp myapp.war $CATALINA_HOME/webapps/
# 자동으로 압축 해제 및 배포됨
# 접속: http://localhost:8080/myapp
2. 디렉토리 배포
# 폴더를 직접 webapps에 복사
cp -r myapp/ $CATALINA_HOME/webapps/
3. Manager 앱 사용
http://localhost:8080/manager/html접속- GUI로 배포/관리
🏗️ 일반적인 아키텍처
[클라이언트]
↓ HTTP 요청
[Apache/Nginx] ← 정적 콘텐츠 처리
↓ 동적 요청 전달 (리버스 프록시)
[Tomcat] ← Java 애플리케이션 처리
↓
[데이터베이스]
💡 실무에서는 Apache/Nginx를 앞단에 두고, Tomcat을 뒷단에서 Java 처리용으로 사용하는 구조가 일반적입니다.
🎯 Tomcat을 사용하는 경우
- ✅ Java/JSP 기반 웹 애플리케이션 개발
- ✅ Spring Boot 애플리케이션 배포 (내장 Tomcat 포함)
- ✅ 중소규모 Java 웹 서비스
- ✅ 개발/테스트 환경
반응형
'DevOps > 서버' 카테고리의 다른 글
| Hypervisor (0) | 2020.11.26 |
|---|---|
| Nginx (0) | 2020.10.08 |
| Apache Section 설정 (0) | 2020.06.15 |
| Apache ErrorDocument 설정 (0) | 2020.06.09 |
| Apache와 Tomcat의 연동 (0) | 2020.03.18 |