Apache & Tomcat

2020. 3. 18. 12:59DevOps/서버

반응형

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