
3 Tier Architecture 구성
서로 독립적인 서버 구성 시 장점.
- 확장성이 좋다.
- 유지보수가 용이하다.
- 보안성이 증가한다.

연결 흐름
3 Tier Architecture 를 구성하기 위해 VMware로 TOMCAT, DB, WEB 서버 3대를 생성한다.
1. TOMCAT 서버
스펙
CentOS 7 미니멀, 2 core, 2GB, 20GB
IP - 211.183.3.88

자바로 웹 페이지(웹어플리케이션)을 만들었다면, 이런 웹어플리케이션을 배포하는 WAS가 필요하고, 추가적으로 개발환경(JAVA)도 구성이 필요하다.
결론적으로 JAVA + TOMCAT이 필요하다는 말이다.
JAVA = openjdk-11
TOMCAT = tomcat 10 버전
을 사용하기로 한다.
개발환경에 맞는 WAS도 잘 매칭을 시켜주는게 중요하다.
TOMCAT 서버를 생성하고 xshell 로 접속하여 명령어를 수행한다. (앞으로의 과정에서 설명 생략.)
[root@tomcat ~]# yum install -y java-11-openjdk wget unzip
# 자바 설치 및 wget unzip 설치
# 배포판이나 운영체제 버전에 따라서 패키지명이 다를 수 있다.
[root@tomcat ~]# yum search openjdk
# openjdk 문구가 들어간 것들 중에 내가 설치할 수 있는 패키지 검색

내가 사용 중인 버전이다.
톰캣을 웹 페이지에서 다운로드 할 예정이다.
https://tomcat.apache.org/download-10.cgi (톰캣 10 버전 설치 페이지)

wget <링크> 로 다운로드 진행한다.

[root@tomcat ~]# unzip apache* > /dev/null
# apache로 시작하는 모든 파일을 unzip 하고, 압축 풀리는 과정은 생략한다.

[root@tomcat ~]# mv apache-tomcat-10.1.52 tomcat
[root@tomcat ~]# chmod -R 777 tomcat
# 디렉토리 이름 변경 및 권한 부여


startup.sh 는 catalina.sh 를 백그라운드에서 동작시키기 위한 스크립트이다. (.sh = shell script)
shutdown.sh 는 catalina.sh 를 중지시키기 위한 스크립트다.
catalina.sh 를 동작시키면 포어그라운드로 동작하기 때문에 일반적인 환경에서는 startup.sh 나 shutdown.sh 를 쓴다.
실행시키는 방법
1. [root@tomcat tomcat]# sh ./bin/startup.sh
2. [root@tomcat tomcat]# ./bin/startup.sh
2번 명령어로 안되면 1번 명령어로 진행한다.

톰캣이 실행되었다.

현재 tomcat의 설정에 의해 8080 포트로 웹어플리케이션 서버(WAS)가 동작하고 있다.

브라우저에서 잘 돌아가는 모습을 볼 수 있다.
구글에 검색어로 tomcat sample 를 입력하여 들아간 후 sample application 을 다운받을 것이다.

링크 주소를 복사한 후
[root@tomcat tomcat]# wget https://tomcat.apache.org/tomcat-9.0-doc/appdev/sample/sample.war
wget으로 다운로드 한다.
[root@tomcat tomcat]# mv ./sample.war /root/tomcat/webapps
# 다운받은 sample.war 를 webapps 경로로 이동시킨다.

이동하는 과정에서 자동으로 압축이 해제된다.

서버 주소/sample 경로로 접근하면 다운받은 샘플 앱이 보인다.
현재 호스트의 IP를 출력하는 간단한 test.jsp 파일을 만들어준다.
cat <<EOF > test.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head><title>hello world</title></head>
<body>
<h2>
TOMCAT TEST<br><br>
time : <%= new java.util.Date()%>
<%@ page import="java.net.InetAddress" %><br>
<%InetAddress inet= InetAddress.getLocalHost();%>
WAS ip : <%=inet.getHostAddress()%>
</h2>
</body>
</html>
EOF
생성 후 ls 명령어를 입력하면 test.jsp 파일이 생성된 것을 볼 수 있다.

서버 주소:8080/ROOT/test.jsp 가 아닌 서버주소:8080/test.jsp 로 접근 가능하다.
단일 파일들은 ROOT 경로에 위치시켜야 한다.
2. DB 구성
스펙
CentOS 7 미니멀, 2 core, 2GB, 20GB
IP - 211.183.3.6
DB 서버를 생성했다면 mariadb-server 를 설치해준다.
[root@tomdb ~]# yum install -y mariadb-server
[root@tomdb ~]# systemctl enable --now mariadb
[root@tomdb ~]# systemctl restart mariadb && systemctl enable mariadb
# 두 개의 명령을 동시에 실행하고 싶다면 && 기호를 사용하면 된다.
[root@tomdb ~]# mysql_secure_installation
# 암호는 본인이 설정하고 싶은 암호로 설정하고 다른 추가 설정을 물어보는 부분에서는 y, n, y, y 순서대로 입력해 설정을 완료해주면 된다.
[root@tomdb ~]# mysql -u root -p<본인암호>
MariaDB [(none)]> create database tomcatdb;
# 여기서 tomcatdb는 필자가 설정한 DB 이름이므로 본인이 설정한 DB 이름을 입력하면 된다.
MariaDB [(none)]> grant all privileges on tomcatdb.* to tomuser@'%' identified by '암호';
# tomuser 는 사용자 이름부분이다. 필자는 tomuser로 설정했다.
MariaDB [(none)]> grant all privileges on tomcatdb.* to tomuser@'localhost' identified by '1234';
# 경우에 따라서 local 에서 접속이 안되는 경우도 있다. % 안에는 localhost 가 포함이 안될 걸로 간주하는 상황이 생기기도 하기 때문이다.
접속이 안되는 경우 위 명령어로 다시 시도해본다.
후에 exit 명령어로 나간 후 root 가 아닌 사용자 이름으로 다시 DB에 접속해보자.

접속해 보면 tomcatdb가 잘 생성된 걸 볼 수 있다.
다시 tomcat 서버로 돌아와서 mysql 명령을 설치한 다음 접속이 잘 되는지 확인해보자.
[root@tomcat tomcat]# yum install -y mysql
# mysql 명령 설치(클라이언트 역할)
[root@tomcat tomcat]# mysql -u tomuser -p암호 -h DB서버주소

tomcat 서버에서도 잘 보인다.
다음으로 dbtest.jsp 파일을 만들어서 연동이 잘 되는지 테스트 해보자.
dbtest.jsp 파일
cat <<EOF > dbtest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<h1>DB</h2>
<%
Connection conn=null;
try{
String Url="jdbc:mysql://<DB주소>/<DB이름>";
String Id="<DB유저>";
String Pass="<유저암호>";
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection(Url,Id,Pass);
out.println("was-db Connection Success!");
}catch(Exception e) {
e.printStackTrace();
}
%>
EOF
<> 안에는 본인이 설정한 대로 수정하면 된다.
JDBC = JAVA DataBase Connector
자바와 MySQL을 연동하기 위한 라이브러리이다.
[root@tomcat tomcat]# mv ./dbtest.jsp /root/tomcat/webapps/ROOT
# 현재 디렉토리의 dbtest.jsp 파일을 웹앱루트디렉토리로 이동시킨다.

브라우저에서 접속을 해보면 아직 연동이 되지 않았다.
JDBC를 설치해줘야 한다.
https://mvnrepository.com/artifact/mysql/mysql-connector-java/8.0.23
Maven Repository: mysql » mysql-connector-java » 8.0.23
mysql mysql-connector-java 8.0.23 compile Scope:CompileTestProvidedRuntime Format:Groovy LongGroovy ShortKotlin Include backlinks implementation("mysql:mysql-connector-java:8.0.23") libraryDependencies += "mysql" % "mysql-connector-java" % "8.0.23" ivy"mys
mvnrepository.com
# JDBC 라이브러리 설치 경로

마찬가지로 링크 주소를 복사해서 wget <링크 주소> 으로 설치해준다.

다운로드가 잘 되었다.
[root@tomcat tomcat]# mv mysql-connector-java-8.0.23.jar /root/tomcat/lib
# 받은 파일을 라이브러리 디렉토리에 복사한다.
[root@tomcat tomcat]# sh ./bin/shutdown.sh
# 톰캣 중지
[root@tomcat tomcat]# sh ./bin/startup.sh
# 톰캣 시작

다시 브라우저에서 접속해보면 연동이 잘 된 걸 확인할 수 있다.
3. WEB 서버 구축
스펙
CentOS 7 미니멀, 2 core, 2GB, 20GB
IP - 211.183.3.80
여기서 Reverse Proxy 개념이 등장한다.

원래는 client가 직접 WAS 서버(백엔드, tomcat)에 가서 test.jsp 파일을 가져와야 하는데, 외부의 사용자들이 내 백엔드 서버에 접근하는게 보안적으로 좋지 않기 때문에 Reverse Proxy가 WAS를 대리하여 client들에게 test.jsp 파일을 제공하는 구조이다.
웹서버를 설치하고 실행시켜준다.
[root@tomweb ~]# yum install -y httpd
[root@tomweb ~]# systemctl restart httpd
[root@tomweb ~]# systemctl enable httpd
정적인 페이지를 만들어보자
[root@tomweb ~]# echo 'static page' > /var/www/html/index.html
# /var/www/html 경로에 index.html 파일을 만들어 static page 라는 내용을 넣어준다.
정적인 요청은 web 서버가 스스로 처리하고 jsp 파일에 대한 요청을 하면 tomcat 서버가 처리하도록 하고자 한다.
[root@tomweb ~]# vi /etc/httpd/conf/httpd.conf
# Reverse Proxy 파일 설정을 해준다.
위 명령어로 들어가 아래 코드를 56번째 줄 이후에 복붙해준다.
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
<VirtualHost *:80> # 80번 포트로 들어오는 모든 ip에 대한 설정
ProxyRequests Off
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /jsp http://172.16.101.88:8080/
ProxyPassReverse /jsp http://172.16.101.88:8080/
</VirtualHost>

누군가가 웹서버의 jsp 경로(http://211.183.3.80:80/jsp)로 요청하면 그 요청을 211.183.3.88:/8080/ 으로 전달해라 라는 코드 내용이다.
[root@tomweb ~]# systemctl restart httpd
# 웹서버를 재실행시킨다.
[root@tomweb ~]# curl 211.183.3.80:80/index.html
# 정적 요청 = 웹서버가 처리한다.

정적인 요청은 웹서버가 처리하고 jsp 파일에 대한 요청은 tomcat 서버가 처리하고 있다.
Reverse Proxy 동작 흐름

'Infra > 네트워크' 카테고리의 다른 글
| grafana로 서버 모니터링 하기 (feat. telegraf, influxDB, node_expoter, prometheus) (0) | 2026.03.14 |
|---|