記錄

실습_AWS) Spring AWS 배포 (A to Z) -2 본문

Web/AWS

실습_AWS) Spring AWS 배포 (A to Z) -2

surhommejk 2018. 8. 25. 14:02

이 포스팅은 '실습_AWS) Spring AWS 배포 (A to Z) -1'(http://kimjungkwon.co.kr/530?category=794190)에 이은 두 번째 포스팅이다. 이전 포스팅에서 EC2와 RDS의 인스턴스를 생성하고 연결하는 작업까지 끝을 냈다. 따라서 이번 포스팅에서는 EC2 인스턴스에 내게 필요한 java, tomcat 등을 설치하는 과정을 기록한다.

이전 포스팅에서 1) EC2에서 인스턴스 생성 / 2) 인스턴스 제어(연결) / 3) EC2 - RDS 연결 을 끝냈으므로 이번 포스팅은 4)부터 시작한다.


4) EC2에 Java 설치

xShell에서 EC2인스턴스에 연결한 후 다음 명령어를 실행하여 JDK8 설치

[1] 'sudo add-apt-repository ppa:webupd8team/java' 를 입력하여 java 설치를 위한 repository 추가

[2] 'sudo apt-get install oracle-java8-installer' 를 입력하여 아까 설치한 repository에 java8 설치

[3] 설치 완료 후 'java -version'으로 확인

[4] 'sudo apt-get install oracle-java8-set-default'로 환경 변수를 설정

+참고 : ppa가 뭔지, 무엇을 위한 것인지 참고 -> http://deviantcj.tistory.com/24


5) EC2에 Apache, Tomcat 설치

난 사실 이 포스팅을 하기 전까지 Apache Tomcat인 줄 알았다. 근데 Apache와 Tomcat이 사실 다른 것이었다. 절차를 적기 이전에 둘의 개념적 차이를 먼저 알아 보자.

Apache : WebServer

Tomcat : Web Application Server

WebServer인 Apache는 프로토콜을 이해하고 클라이언트와 통신을 하는 역할을 한다. 그리고 Web Application Server인 Tomcat은 컴파일 해석기로서 java class 파일을 읽고 처리해준다. 즉 Apache가 클라이언트로부터 무엇을 원하는지를 Web Application Server에 알려주고 Web Application Server는 해당 요청을 로직 처리 후 출력물을 WebServer로 전송하고 이를 WebServer가 다시 클라이언트에게 전송하는 것이 전체 플로우다.
따라서 서버 컴퓨터로 활용할 EC2 인스턴스에는 Apache와 Tomcat 모두를 설치하여야 한다. 절차는 아래와 같다.

[1] 'sudo apt-get install apache2' 입력하여 Apache 설치
[2] 'sudo service apache2 start' 입력하여 Apache run
[3] 'sudo apt-get install tomcat8' 입력하여 Tomcat 설치 
[4] 'sudo service tomcat8 start' 입력하여 Tomcat run

이제 모든 절차는 끝이 났다. 설치한 EC2의 인스턴스 IP로 들어가 확인해보는 일이 남았다.
주소는 'IP 주소:8080' 이다.


위와 같은 화면이 뜨면 성공이긴 한데 아직 끝나지 않았다. Apache와 Tomcat의 보완적 역할을 고려하면 Apache와 Tomcat이 연동될 필요성이 있다는 것을 알 수 있다. 정적 페이지와 동적 페이지를 분담하기 위한 일종의 로드밸런싱을 위해 둘의 연동이 필요한 것이다. 따라서 둘을 연동해주는 역할을 하는 mod-jk를 설치하고 경로 설정을 해주어야 한다.


6) libapache2-mod-jk 설치 / tomcat8 경로 변경


[1] 'sudo apt-get install libapache2-mod-jk' 설치


[2] 'sudo vi /etc/libapache2-mod-jk/workers.properties'로 파일을 열고 아래 사항 수정

workers.tomcat_home= ~ 과 workers.java_home= ~ 을 위와 같이 수정해준다. sudo로 열지 않고 그냥 vi로 열게되면 읽기 전용 파일이기 때문에 수정이 안된다. 따라서 꼭 sudo로 열고 수정하여야 한다.


[3] AJP*를 활성화 한다. AJP는 웹서버 뒤에 있는 어플리케이션 서버가 외부 전송 프로토콜을 수신할 수 있도록 하여 로드밸런싱을 가능케 해준다. 'sudo vi etc/tomcat8/server.xml'로 들어가서 아래 사진의 부분에 주석처리가 되어 있는 것을 없앤다.


만약 특정한 포트를 사용하고 싶다면 아래 코드에서 포트 번호를 수정한다.


+ 참고

AJP

The Apache JServ Protocol (AJP) is a binary protocol that can proxy inbound requests from a web server through to an application server that sits behind the web server.

It also supports some monitoring in that the web server can ping the application server. Web implementors typically use AJP in a load-balanced deployment where one or more front-end web servers feed requests into one or more application servers. Sessions are redirected to the correct application server using a routing mechanism wherein each application server instance gets a name (called a route). In this scenario the web server functions as a reverse proxy for the application server.

AJP runs in Apache HTTP Server 1.x using the mod_jk plugin and in Apache 2.x using the provided Proxy AJP, mod_proxy and proxy balancer modules together. Implementations exist for the not-yet-released lighttpd version 1.5,[1] nginx,[2] Grizzly 2.1,[3] and the Internet Information Server.[4]

Both the Apache Tomcat servlet container as well as the Jetty servlet container support AJP.


[4] 'sudo a2enmod proxy_ajp'명령어로 AJP 모듈을 활성화 한다. Ubuntu 패키지에 포함된 apache2로 서버를 운영할 경우, a2enmod 명령으로 apache 모듈을 활성화 할 수 있기 때문에 가능한 명령어다. Ubuntu 패키지의 apache2를 설치할 경우 apache2 디렉토리에는 mods-available 디렉토리와 mods-enabled 디렉토리가 있다. 이 때 mods-available 디렉토리에는 활성화 가능한 모듈들이 들어 있으며, mods-enabled 디렉토리에는 실제 활성화 된 모듈들이 symbolic link 가 생성되어 있다. 따라서 a2enmod 명령으로 모듈을 활성화 하면 mods-available 디렉토리에 있는 모듈들이 mods-enabled로 symbolic link가 생성된 것을 확인 할 수 있다.


[5] 아파치가 URL을 받았을시, 어떤 URL을 톰캣에게 바인딩 할 것인가 알려주는 셋팅을 해야한다. 역시 로드밸런싱 차원의 셋팅이라고 보면 된다. 절차는 아래와 같다.

ㄱ) 'sudo vi /etc/apache2/sites-available/000-default.conf'

ㄴ) 코드 추가 (아래 사진 참고)


[6] 'sudo service apache2 restart'로 아파치 재시작(이건 왜 하는지 모르겠지만 역시 동기화를 위해 하는게 좋겠다)


'Web > AWS' 카테고리의 다른 글

실습_AWS) Spring AWS 배포 (A to Z) -3  (0) 2018.08.25
실습_AWS) Spring AWS 배포 (A to Z) -1  (0) 2018.08.24
생활코딩_AWS) RDS  (0) 2018.08.24
생활코딩_AWS) Simple Storage Service(S3)  (0) 2018.08.23
생활코딩_AWS) Auto Scaling  (0) 2018.08.23
Comments