Cloud/Project

AWS 3-tier Architecture 서버 생성 및 연동 ( WAS, WEB -WAS 연동)

dodomp0114 2021. 5. 31. 01:00

◆ AWS 3-tier Architecture 구성도

AWS 3-tier Architecture Network ( VPC, Subnet, NAT, Routing Table )

 AWS 3-tier Architecture Network ( SG, ELB )

AWS 3-tier Architecture 서버 생성( Bastion, WEB, EX-ELB )

 

WAS 생성과 간단한 jsp파일을 올리고, WEB -WAS를 연동해보겠습니다.

WAS 생성 WEB -WAS 연동

 

■ WAS 서버 설치

 

■ Internal Load Balancer 생성

 

■ JSP 파일 생성 및 서버 업로드

 

■ WAS 서버에 JDK 설치

 

■ WAS 서버에 tomcat설치

 

■ WEB - WAS 연동

 


● WAS server 

 

 - WAS( Web Application Server ) 서버란,

   웹 브라우저와 같은 클라이언트로 부터 웹 서버가 요청을 받으면 애플리케이션에 대한 로직을 실행하여

   웹서버로 다시 반환 해주는 소프트웨어 입니다.

   웹 서버와 DBSM 사이에서 동작하는 미들웨어로써, 컨테이너 기반으로 동작합니다.

 

※ WEB 서버와 WAS 서버의 차이점

  

   - WEB 서버는 정적인 컨텐츠 (HTML, CSS, Image 등)을 요청받아 처리합니다.

     WAS 서버는 동적인 컨텐츠 (JSP, ASP, PHP 등)을 요청받아 처리합니다.

 

WAS 서버를 생성해보겠습니다.

 

※ 2대를 생성해주겠습니다.

   ( 구성도를 참고하면서 만들어주세요 )

 

EC2 생성

 

EC2 생성

● EC2 란? - Amazon Elastic Compute Cloud(Amazon EC2) Amazon Web Services(AWS) 클라우드에서 확장 가능 컴퓨팅 용량을 제공합니다. Amazon EC2를 사용하면 하드웨어에 선투자할 필요가 없어 더 빠르게 애플..

dodomp0114.tistory.com

 

위 게시물을 참고하여 미리생성해두었던 3 tier VPC, WAS-subnet, WAS - SG를 적용하여 만들어줍니다.

 

 

WAS 서버 두개가 생성된걸 확인하실 수 있습니다.

 

 

● Internal Load Balancer 

 

- Internal Load Balancer는 WEB 서버에서 WAS 서버로 들어오는 트래픽을 분배해주는 역할을 합니다.

 

Application Load Balancer 클릭

 

Load Balancer 구성

이름 : IN-ELB

체계 : 내부

프로토콜 : HTTP ( 8080 )

가용 영역 : VPC - 3tier

               az-a, az-c

 

보안 그룹 구성 

 - 기존에 만들어 두었던 IN-ELB SG를 선택해줍니다.

 

 

라우팅 구성

 - 이름 : IN-ELB

   포트 번호 : 8080

 

 

대상등록에서는 미리 생성해두었던 WAS 서버 두개를 올려줍니다.

 

 

 

● JSP 파일 생성 및 업로드

<!DOCTYPE html>
<html>
<head>
    <title>계산기</title>
 
    <style>
        table {
            border-collapse: collapse;
        }
        td {
            padding: 5px 10px;
            text-align: center;
        }
        input {
            text-align: right;
            border: none;
        }
        input:focus {
            outline: none;
        }
    </style>
</head>
<body>
    <table border="1">
        <tr>
            <td colspan="4">
                <input type="text" id="display">
            </td>
        </tr>
        <tr>
            <td colspan="4">
                <input type="text" id="result">
            </td>
        </tr>
        <tr>
            <td colspan="3" onclick="reset()">AC</td>
            <td onclick="add('/')">/</td>
        </tr>
        <tr>
            <td onclick="add(7)">7</td>
            <td onclick="add(8)">8</td>
            <td onclick="add(9)">9</td>
            <td onclick="add('*')">*</td>
        </tr>
        <tr>
            <td onclick="add(4)">4</td>
            <td onclick="add(5)">5</td>
            <td onclick="add(6)">6</td>
            <td onclick="add('-')">-</td>
        </tr>
        <tr>
            <td onclick="add(1)">1</td>
            <td onclick="add(2)">2</td>
            <td onclick="add(3)">3</td>
            <td onclick="add('+')">+</td>
        </tr>
        <tr>
            <td colspan="2" onclick="add(0)">0</td>
            <td onclick="add('.')">.</td>
            <td onclick="calculate()">=</td>
        </tr>
    </table>
    <script>
        function add(char) {
            var display = document.getElementById('display'); // 우리가 식을 입력할 input 태그를 불러옵니다.
            // display.value는 input 태그 안에 들어 있는 값을 의미합니다.
            display.value = display.value + char;
            // display.value += char; 로 쓸 수도 있습니다.
            // input 태그의 값 뒤에 char 문자를 추가해 주는 역할을 합니다.
        }
        function calculate() {
            var display = document.getElementById('display');
            var result = eval(display.value); // 식을 계산하고 result 변수에 저장합니다.
            document.getElementById('result').value = result;
        }
        function reset() {
            document.getElementById('display').value = "";
            document.getElementById('result').value = "";
        }
    </script>
</body>
</html>

 

코드를 복사하여 eclipse 같은 IDE 툴을 이용하여 jsp파일을 만들어줍니다.

 

생성된 Calculator.jsp를 WAS1 서버, WAS2 서버에 올려주도록 하겠습니다.

 

ssh와 scp 명령어를 통해서 올려주도록 하겠습니다.

 

 

로컬 PC ----> Bastion Host로 scp 명령을 통해 WAS1.pem / WAS2.pem / Calculator.jsp 파일을 전달합니다.

 

[ec2@user ~]$ sudo scp -i WAS1.pem WAS2.pem Calculator.jsp ec2-user@"Bastion Host Public IP":/home/ec2-user

 

로컬 PC ----> Bastion Host로 ssh 명령을 통해 이동합니다.

 

[ec2@user ~]$ sudo scp -i WAS1.pem WAS2.pem Calculator.jsp ec2-user@"Bastion Host Public IP":/home/ec2-user

 

scp 명령어를 통해 WAS1, WAS2 서버 둘다에게 Calculartor.jsp 파일을 전송합니다.

 

[ WAS 1 ]

[ec2@user ~]$ sudo scp -i WAS1.pem Calculator.jsp ec2-user@"WAS1 prviate IP":/home/ec2-user

[ WAS 2 ]

[ec2@user ~]$ sudo scp -i WAS2.pem Calculator.jsp ec2-user@"WAS2 prviate IP":/home/ec2-user



※ Bastion Host에서 입력!

 

 

 

 

● WAS 서버에 JDK 설치

 

※ WAS1, WAS2 서버 둘다 적용

 

JDK 설치

 

java 홈페이지로 이동한뒤에 리눅스 운영체제에 맞는 압축파일을 받아줍니다.

 

 

로컬 PC에 다운로드를 하여도 좋지만, 지우는게 번거로우니 다운로드 중에 취소를 누른뒤

 

크롬 다운로드 창으로 들어가줍니다. 

 

JDK 다운로드 취소된거에서 우클릭을 누르고 링크복사를 해줍니다.

 

 

복사된 링크를 갖고 WAS1, WAS2 서버에 접속하여줍니다.

 

## /usr/local 디렉토리로 이동

[ec2@user ~]$ cd /usr/local



## wget 명령어를 통해 인터넷에서 직접 파일 다운로드

[ec2@user ~]$ wget "복사한 링크'



## 다운로드를 완료한뒤에 현재 디렉토리에 압축 해제

[ec2@user ~]$ tar -zxvf "다운로드한 JDK 압축파일"



## 압축해제된 파일에 java이름으로 심볼릭링크를 걸어 좀더 간편하게 사용하도록 하겠습니다

[ec2@user ~]$ ln -s "압축해제한 파일" java

 

JDK 설치와 심볼릭 링크 설정이 끝났으니 vi 편집을 이용하여 /etc/profile로 들어가서

환경변수 설정을 해주도록 하겠습니다.

 

## vi 편집기로 /etc/profile 편집

[ec2@user ~]$ vi /etc/profile



## profile 파일 맨아래에 환경변수 작성

JAVA_HOME=/usr/local/java​

CLASSPATH=.:$JAVA_HOME/lib/tools.jar​

PATH=$PATH:$JAVA_HOME/bin​

export JAVA_HOME CLASSPATH PATH​

Source /etc/profile 



:wq를 누르고 vi 편집기 탈출

 

● WAS 서버에 tomcat 설치

 

 

※ WAS1, WAS2 서버 둘다 적용

 

Apache Tomcat 설치

 

Apache Tomcat 홈페이지로 이동한뒤에 리눅스 운영체제에 맞는 압축파일을 받아줍니다. (tar 압축파일)

 

 

JDK 설치와 마찬가지로

 

로컬 PC에 다운로드를 하여도 좋지만, 지우는게 번거로우니 다운로드 중에 취소를 누른뒤

 

크롬 다운로드 창으로 들어가줍니다. 

 

apache tomcat 다운로드 취소된거에서 우클릭을 누르고 링크복사를 해줍니다.

 

 

복사된 링크를 갖고 WAS1, WAS2 서버에 접속하여줍니다.

 

## /usr/local 디렉토리로 이동

[ec2@user ~]$ cd /usr/local



## wget 명령어를 통해 인터넷에서 직접 파일 다운로드

[ec2@user ~]$ wget "복사한 링크'



## 다운로드를 완료한뒤에 현재 디렉토리에 압축 해제

[ec2@user ~]$ tar -zxvf "다운로드한 Apache Tomcat 압축파일"



## 압축해제된 파일에 tomcat 이름으로 심볼릭링크를 걸어 좀더 간편하게 사용하도록 하겠습니다

[ec2@user ~]$ ln -s "압축해제한 파일" tomcat

 

Apache Tomcat 설치와 심볼릭 링크 설정이 끝났으니 vi 편집을 이용하여 /etc/profile로 들어가서

 

환경변수 설정을 해주도록 하겠습니다.

 

## vi 편집기로 /etc/profile 편집

[ec2@user ~]$ vi /etc/profile



## profile 파일 맨아래에 환경변수 작성 (앞서 작성한 JDK 환경변수 밑 )

CATALINA_HOME=/usr/local/tomcat​



:wq를 누르고 vi 편집기 탈출

 

● WEB 서버 - WAS 서버 연동하기

 

연동하기에 앞서 처음에 WAS서버 1,2 각각의 ec2-user 홈디렉토리에 옮겨놓은 Calculator.jsp 파일을

 

옮기도록 하겠습니다.

 

## ec2-user 홈디렉토리로 들어가기.

[ec2@user ~]$ cd ~



## 홈디렉토리에 있는 Calculator.jsp 파일을 옮기기

[ec2@user ~]$ mv Calculator.jsp /usr/local/tomcat/webapps/ROOT

 

 

다음으로 WEB 서버로 들어가서 설정을 해줍니다.

 

※ WEB 1, 2 서버 둘다 설정

 

 

## /etc/httpd/conf/httpd.conf 파일로 들어가서 모듈 설정을 해주겠습니다. ( 57 ~ 59 번째 줄에 추가 입력 )

[ec2@user ~]$ vi /etc/httpd/conf/httpd.conf

LoadModule proxy_module modules/mod_proxy.so​

LoadModule proxy_connect_module modules/mod_proxy_connect.so​

LoadModule proxy_http_module modules/mod_proxy_http.so



:wq ( 저장하고 끝내기 )



## /etc/httpd/conf/httpd.conf 파일 맨밑에 버츄얼 호스트, 프록시 설정 추가

<VirtualHost *:80>

       ProxyRequests On​

       ProxyPreserveHost On​       

       <Proxy *>​              

                Order deny,allow​

                Allow from all​

                setEnv force-proxy-request-1.0.1​

                setEnv proxy-nokeepalive 1​

                setEnv proxy-initial-not-pooled 1​

        </Proxy>​

        ProxyPass "/servlet/" "IN-ELB DNS주소:8080/"  ttl=60​

        ProxyPassMatch "^/.*\.(jsp|do)$" "IN-ELB DNS주소:8080/"​

        Timeout 120​

</VirtualHost>



※ 위에 써져있는 "IN-ELB DNS주소" 란에는 만들어두었던 미리 생성해두었던

   IN-ELB DNS 주소를 적어주시면 됩니다.



:wq ( 저장하고 끝내기 )

 

 

 

● 계산기 어플 열어보기

 

JDK, Tomcat 등 설치와 모든 설정이 완료되었으면 

 

외부의 트래픽을 WEB 1, 2 서버로 분배 해주는 External Load Balancer의 DNS 주소로 들어가서 

 

WAS 1, 2 에 있는 계산기로 들어가보겠습니다.

 

인터넷 브라우저를 열고 검색창에

 

"미리 만들어 두었던 EX-ELB DNS 주소"/Calculator.jsp 를 치시게되면 

 

 

 

이렇게 저희가 작성해 주었던 jsp 파일이 웹서버통해 열리게되는걸 보실수있습니다!