SMALL
1. 아파치(Apache HTTP Server)
1-1. 정의
- 웹 서버(Web Server) 소프트웨어.
- 클라이언트(브라우저) 요청을 처리하고, HTML, CSS, JS 같은 정적 파일을 제공.
- HTTP 프로토콜을 기반으로 동작.
1-2. 주요 기능
- 정적 컨텐츠 제공
- HTML, 이미지, CSS, JS 파일 처리.
- 가상 호스트(Virtual Host)
- 한 서버에서 여러 도메인을 호스팅 가능.
- 모듈 확장
- mod_ssl, mod_rewrite 등 다양한 모듈로 기능 확장 가능.
- 보안
- SSL/TLS 암호화, 접근 제어 기능 제공.
1-3. 특징
- 장점
- 안정적이고 성능 좋음.
- 많은 커뮤니티 지원.
- 단점
- 동적 컨텐츠 처리(JSP, Servlet 등) 직접 지원 불가 → 톰캣 필요.
2. 톰캣(Apache Tomcat)
2-1. 정의
- 서블릿(Servlet) 컨테이너 또는 웹 애플리케이션 서버(Web Application Server).
- 자바 기반 웹 애플리케이션(JSP, Servlet) 실행 가능.
2-2. 주요 기능
- 동적 컨텐츠 처리
- JSP(JavaServer Pages), Servlet 요청 처리.
- 웹 애플리케이션 배포
- WAR 파일 배포 가능.
- HTTP 커넥터
- 기본 HTTP 포트(8080)로 요청 수신.
- Session 관리
- 사용자 세션 관리 기능 제공.
2-3. 특징
- 장점
- 자바 웹 애플리케이션에 최적화.
- 서블릿/JSP 표준 준수.
- 단점
- 정적 컨텐츠 제공 속도가 아파치보다 느림.
- 설정과 관리가 다소 복잡.
3. 아파치와 톰캣의 관계
구분 아파치 HTTP 톰캣
| 역할 | 정적 웹 서버 | 동적 웹 서버 / 서블릿 컨테이너 |
| 처리 가능 컨텐츠 | HTML, CSS, JS, 이미지 | JSP, Servlet, Java 웹 애플리케이션 |
| 성능 | 정적 파일 처리 최적 | 동적 처리 최적 |
| 포트 | 기본 80 | 기본 8080 |
| 특징 | 안정적, 모듈 확장 가능 | 자바 웹 앱 실행, Session 관리 가능 |
연동
- 아파치와 톰캣을 연동(Apache + Tomcat)하면:
- 아파치: 정적 파일 처리, SSL 처리
- 톰캣: 동적 JSP/Servlet 처리
- 연동 방법: mod_jk, mod_proxy 등 사용.
4. 예시 구조
클라이언트 요청 → 아파치(HTTP) → 정적 파일 반환
→ 톰캣(서블릿/JSP) → 동적 컨텐츠 반환
5. 실습
1. Java 설치
Tomcat은 Java 기반이므로 JDK 설치가 필요합니다.
sudo yum install java-11-openjdk -y
설치 확인:
java -version
예시 출력:
openjdk version "11.0.22" 2025-01-15
OpenJDK Runtime Environment
2. Tomcat 다운로드
Tomcat 9 기준 예시:
cd /opt
sudo wget <https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.109/bin/apache-tomcat-9.0.109.tar.gz>
- downloads.apache.org에서는 오래된 버전은 404 오류 발생
- 해결 방법: 아카이브 서버(archive.apache.org)에서 다운로드
3. 압축 해제
sudo tar xvf apache-tomcat-9.0.109.tar.gz
- /opt/apache-tomcat-9.0.109 폴더 생성
4. 실행 권한 부여
cd apache-tomcat-9.0.109/bin
sudo chmod +x *.sh
5. Tomcat 실행
sudo ./startup.sh
정상 실행 시:
Tomcat started.
6. 방화벽 설정 (8080 포트)
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
- 이미 열려 있을 수 있음:
ALREADY_ENABLED: 8080:tcp
7. 브라우저 접속 확인
http://<192.168.3.224>:8080 #리눅스서버 IP
- 만약 Tomcat이 시작 직후 바로 중지된다면 포트 충돌 가능성 확인:
sudo lsof -i :8080
- 예시: HAProxy가 8080 사용 중
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
haproxy 1094056 haproxy 7u IPv4 5168842 0t0 TCP *:webcache (LISTEN)
- 해결 방법: HAProxy 종료 후 Tomcat 실행
sudo systemctl stop haproxy
sudo ./startup.sh
8. 관리자 계정 설정 (Manager App)
tomcat-users.xml 수정
sudo vi /opt/apache-tomcat-9.0.109/conf/tomcat-users.xml
내용:
<tomcat-users xmlns="http://tomcat.apache.org/xml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
version="1.0">
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="admin" password="1234" roles="manager-gui,admin-gui"/>
</tomcat-users>
원격 접속 허용
sudo vi /opt/apache-tomcat-9.0.109/conf/Catalina/localhost/manager.xml
내용 수정:
<Context privileged="true" antiResourceLocking="false" >
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192\\.168\\.1\\.\\d+"/>
</Context>
- 저장 후 Tomcat 재시작
sudo ./shutdown.sh
sudo ./startup.sh
- 브라우저에서 관리자 계정으로 접속 가능
9. JSP 예제 실습
파일 생성
sudo vi /opt/apache-tomcat-9.0.109/webapps/ROOT/hello.jsp
hello.jsp 내용
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<html>
<head>
<title>Hello JSP</title>
</head>
<body>
<h1>Hello Tomcat!</h1>
<p>현재 서버 시간: <%= new java.util.Date() %></p>
</body>
</html>
실행
http://<192.168.3.224>:8080/hello.jsp # 리눅스서버 IP
- 출력: “Hello Tomcat!” + 현재 시간
10. Servlet 예제 실습
1) Servlet 파일 생성
sudo vi /opt/apache-tomcat-9.0.109/webapps/ROOT/WEB-INF/classes/com/example/HelloServlet.java
package com.example;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("<h1>Hello Servlet!</h1>");
out.println("<p>현재 서버 시간: " + new Date() + "</p>");
out.println("</body></html>");
}
}
2) web.xml 설정
sudo vi /opt/apache-tomcat-9.0.109/webapps/ROOT/WEB-INF/web.xml
내용:
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
3) Servlet 컴파일
sudo mkdir -p /opt/apache-tomcat-9.0.109/webapps/ROOT/WEB-INF/classes/com/example
cd /opt/apache-tomcat-9.0.109/webapps/ROOT/WEB-INF/classes
javac com/example/HelloServlet.java
- 만약 컴파일 오류 발생 시:
javac -classpath /opt/apache-tomcat-9.0.109/lib/servlet-api.jar com/example/HelloServlet.java
- JDK가 설치되어 있지 않으면 javac 명령어 사용 불가
- 설치 방법:
sudo dnf install java-11-openjdk-devel -y
javac -version
4) Tomcat 재시작
cd /opt/apache-tomcat-9.0.109/bin
sudo ./shutdown.sh
sudo ./startup.sh
5) Servlet 실행
http://<192.168.3.224>:8080/hello # 리눅스서버 IP
- 출력: “Hello Servlet!” + 현재 시간
'서버' 카테고리의 다른 글
| RAID(Redundant Array of Independent Disks) (0) | 2025.11.11 |
|---|---|
| XRDP 서버 구축 (0) | 2025.10.24 |
| Apache | Nginx (0) | 2025.10.21 |
| Docker 설치 및 Nginx 웹서버 실행 (0) | 2025.10.16 |
| 간단하게 웹 서버 구축 해보기 (0) | 2025.10.15 |