Infra/네트워크

3 Tier Architecture 구성하기 (feat. VMware, xshell, GNS3)

minseoki 2026. 3. 8. 22:27

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.shcatalina.sh 를 백그라운드에서 동작시키기 위한 스크립트이다. (.sh = shell script)

shutdown.shcatalina.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 동작 흐름