3 Tier Architecture(3 계층 구조) 구성
실습 환경: VirtualBox CentOS7 Minimal
3 Tier Architecture
는 서비스의 기본으로 서버를 3개로 나누어 구성하는 것을 말한다.
즉 서버의 역할을 3개로 나누어 구성함으로써 보안의 효과도 증가하게 된다.
예를 들어 Web Server와 WAS 사이에 Suricata, WAS와 DB Server 사이에 악성코드 탐지를 배치하여 보안을 높일 수 있다.
서버는 Web Server, Web Application Server(WAS), DataBase Server(DB Server) 로 구성된다.
Client ↔ Internet ↔ Web Server ↔ WAS ↔ DB Server
음식점에 빗대어 설명하면 손님(Client)이 호출 버튼(Internet)을 통해 카운터(Web Server)에 주문을 하면, 주방에서 주방장(WAS)이 요리를 하는데, 요리의 재료를 냉장고(DB Server)에서 꺼내오는 것과 같다.
1.
먼저 Web Server 설정이다.
yum update -y
yum install net-tools
netstat -anp
# nginx 웹서버 설치
yum install epel-release -y
yum install nginx
# 방화벽 해제
systemctl stop firewalld
systemctl disable firewalld
# nginx 실행
systemctl start nginx
systemctl enable nginx
내 Web Server IP는 11.11.11.12 이다.
호스트에서의 접속을 위해 가상머신에 포트포워딩 설정을 해준다.
설치된 nginx의 설정 파일 경로는 /etc/nginx/
홈 디렉토리 경로는 /usr/share/nginx/html/ 에 있다.
호스트에서 http://127.0.0.1:80 에 접속하여 nginx 페이지가 잘 뜨는지 확인한다.
2.
다음은 WAS 설정을 해준다. (IP 11.11.11.11)
WAS에는 Tomcat을 설치한다.
yum install wget
yum install net-tools
# java sdk 설치
yum install java-1.8.0-openjdk-devel.x86_64
wget http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.4/bin/apache-tomcat-9.0.4.tar.gz
tar xvzf ./apache-tomcat-9.0.4.tar.gz
mkdir /usr/local/tomcat
mv ./apache-tomcat-9.0.4/* /usr/local/tomcat
# Tomcat 실행
/usr/local/tomcat/bin/startup.sh
# Tomcat 종료
/usr/local/tomcat/bin/shutdown.sh
Tomcat 실행 후, 다시 호스트에서 http://127.0.0.1 에 접속했을 때 Tomcat의 고양이가 뜨는지 확인한다.
3.
다음은 DB Server 설정이다. (IP 11.11.11.13)
mariadb를 사용한다.
yum install mariadb-server
yum install net-tools
# 방화벽 해제
systemctl stop firewalld
systemctl disable firewalld
# DB 실행
systemctl start mariadb
systemctl enable mariadb
# 계정 생성
mysql
> show databases;
> use mysql;
> show tables;
> create user 'id'@'%' identified by 'pw';
> grant all privileges on *.* to id@'%';
> flush privileges;
# 접속 Test
mysql -u id -h 11.11.11.13 -p
> ...
4.
이제 Web Server와 WAS 연동 작업이다.
Web Server와 WAS에서 각각 수행해야할 명령어들이다.
# Web Server
# nginx 설정 수정
vim /etc/nginx/nginx.conf
# server {...} 안에 추가
location / {
index index.html index.htm index.jsp;
proxy_pass http://11.11.11.11:8080;
}
setsebool -P httpd_can_network_connect 1
systemctl start nginx
# 또는 systemctl restart nginx
# WAS
systemctl stop firewalld
systemctl disable firewalld
setsebool -P httpd_can_network 1
# Tomcat 홈 디렉토리 경로
/usr/local/tomcat/webapps/ROOT/
# 연동 Test
vim /usr/local/tomcat/webapps/ROOT/test.jsp
# Tomcat 재시작
/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh
test.jsp 파일을 만들어 테스트 코드를 짜고, Tomcat 재시작 후 호스트에서 127.0.0.1/test.jsp 로 접근하여 오류가 없는지 확인한다.
5.
마지막으로 WAS와 DB Server를 연동한다.
여기서는 필요한 .jar 파일을 다운받고 환경변수를 세팅한다.
wget https://dlm.mariadb.com/1965742/Connectors/java/connector-java-2.7.5/mariadb-java-client-2.7.5.jar
cp mariadb-java-client-2.7.5.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/lib/
cp mariadb-java-client-2.7.5.jar /usr/local/tomcat/lib/
wget https://downloads.mysql.com/archives/get/p/3/file/mysql-connector-java-5.1.40.tar.gz
tar xvf mysql-connector-java-5.1.40.tar.gz
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/local/tomcat/lib/
cp mysql-connector-java-5.1.40/mysql-connector-java-5.1.40-bin.jar /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/jre/lib/
# 환경변수
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.342.b07-1.el7_9.x86_64/
export CATALINA_HOME=/usr/local/tomcat
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/mariadb-java-client-2.7.5.jar:$CATALINA_HOME/lib/mariadb-java-client-2.7.5.jar
# Tomcat 재시작
/usr/local/tomcat/bin/shutdown.sh && /usr/local/tomcat/bin/startup.sh
source /etc/profile
WebServer에 nginx,
WAS에 Tomcat이 있는데, redirect가 Apache Tomcat이기 때문에 Tomcat의 웹 페이지를 사용할 예정이다.
다시 한 번 경로를 확인한다.
/usr/local/tomcat/webapps/ROOT/
필요한 웹 페이지 파일은 위 경로 밑에 생성할 수 있다.
아래는 DB 연동 Test 코드이다.
/usr/local/tomcat/webapps/ROOT/login.jsp
# login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%
String ID="id"; // mysql ID
String PWD="pw"; // mysql password
String PORTNO="3306"; // mysql port
String DBNAME="test"; // 연결할 DB 이름
String TIMEZONE="serverTimezone=UTC";
String Query="jdbc:mysql://11.11.11.13:"+PORTNO+"/"+DBNAME+"?"+TIMEZONE;
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection(Query, ID, PWD);
if(conn!=null){
out.println("Connected!!<br>");
conn.close();
out.println("Close WebDB.<br>");
}
else{
out.println("Can't Connect WebDB!!<br>");
}
%>
아까 생성했던 MySQL 아이디와 비밀번호를 넣고,
초기에 생성되어 있던 test 데이터베이스를 이용하여 테스트를 실행했다.
호스트에서 127.0.0.1/login.jsp 에 접속했을 때 오류 없이 Connected 메세지가 뜬다면 성공이다.
이제 웹 페이지 코드를 작성하고 DB Server와 연결하여 Web Server를 구동할 수 있다.