개요
소제목 : 아파치, 톰캣, 우분투, Apache & Tomcat on Ubuntu with AWS
시작하기 전에
- 커맨드는 $ 표시로 구분하였다.
- 중요한 내용이 아닌 경우 [참고] 라는 이름으로 별도의 타이틀링을 하였다. 삽질 과정의 주저리로서 무시해도 괜찮은 내용이다.삽질 과정을 모두 기록한 글이기 때문에, 중간 중간 과도하게 상세한 설명이 들어가있다.
- JDK 설치를 위해서 반드시 진행해야 하는 부분은 [👨🏼💻 중요] 표시로 구분하였다. 이 표시만 따라가면 우분투 리눅스에 JDK 를 설치할 수 있다.
참고 블로그
다음 글을 참고했다.
이전 과정 요약
- 자바 다운로드 및 설치
- 다운로드
- 압축 풀기 및 Unpack(Unarchaive)
- 파일 이동
- 링크파일 생성
- 자바 환경변수 설정 /etc/profile
- 환경변수 수정 (vim)
- 환경변수 적용 (source)
- 환경변수 확인 (env, echo)
- 톰캣 다운로드 및 설치
- 다운로드
- 압축풀기
- 파일 이동
- 링크파일 생성
- 톰캣 설정파일 설정 및 실행
- 환경변수 수정 (vim)
- 환경변수 적용 (source)
- 환경변수 확인 (env, echo)
- .sh 파일 실행
- 브라우저로 인터넷 접속 확인
들어가기 전에, WAS vs WS
들어가기 전에 WAS 와 Web Server 의 차이를 알고 가자.
Apache와 Tomcat 을 연동하기 위해서는 mod_jk
라는 모듈이 필요하다. (Apache 에서 제공하는 Module이다.)
우리가 리눅스에 설치할 서버 프로그램은 Apache Server
, Tomcat Server
두 개이다.
(즉, Apache Tomcat 과 Aapche2 라는 서버는 서로 다른 서버이다. 이름때문에 햇갈리지 말자.)
[👨🏼💻 중요]
동적 처리가 필요한 페이지(jsp)는 tomcat 이 처리하게 하고, 정적 페이지(html) 은 apache 가 처리하게 하는 것이 목표다.
요즘엔 WAS 만 쓴다.
[👨🏼💻 중요]
🚨 (2020년 필자가 돌아와서 적는 글) 과거에는 동적페이지
를 정적페이지
와 분리하여 처리하게 하는 것이 리소스 관리 측면에서 유리했다고 한다. 곧, 예전에는 정적페이지
를 처리하는 속도가 tomcat
이 apache 서버
에 비해 느렸다고 한다. 하지만 요즘에는, 정적페이지
를 처리하기 위해 별도의 HTTP 서버를 가동하는 추세는 아닌것 같다. tomcat
과 같은 WAS
의 성능이 날로 좋아지면서 WAS
만으로 정적페이지와 동적페이지를 동시에 처리하게 하는 경우가 대부분인것 같다.
WS Apache
- 정적 서버, HTML 과 같은 페이지를 요청시마다 해당하는 URL 의 '정적'인 페이지를 보여준다.
- 즉 사용자가 달라도, 그들의 요청에 똑같은 응답인 웹 페이지가 전달된다.
WAS Tomcat
- JSP, Servlet 페이지를 띄워주는 역할을 한다. 사용자의 요청에 적절히 응답하여 그에 따라 '동적'인 페이지를 보여준다.
- 사용자가 다르면, 그들의 요청에 따라 다른 응답을 보여준다.
Apache 설치
패키지 매니저(apt-get)를 활용하여 apache2
를 설치한다.
[👨🏼💻 중요]
$ apt-get install apache2
[참고] 패키지 매니저를 활용시 OS의 변화
패키지 매니저를 사용하여 프로그램을 설치하게 되면 운영 시스템 상엔 어떠한 변화가 있을까? 또는 환경변수 상의 변화가 있을까? 기타 아직 모르는 리눅스의 백그라운드 시스템에 변화가 있을까?
apt-get
은 일종의 앱스토어 같은 곳으로, 내 시스템에 맞는 파일들을 알아서 다운로드 해주는 것 같다.
[참고] 패키지 매니저 Console 요약
apt-get
커맨드를 입력하고 나면 설치과정이 쏜살같이 지나가버린다. 그 설치과정을 요약해보면 다음과 같다.
- Get (1 반복 10가지 파일)
- Fetched
- Preconfiguring packages
- Selecting previously unselected package
- Preparing to unpack
- Unpacking (Get 에서 받은 10가지 파일에 대해 4~6 반복 진행)
- Processing triggers for (libc-bin / man-db / ufw / systemd / ureadahead 에 대해 반복)
- Setting up (libapr 부터 apache2 까지 9개 파일에 대해 반복)
- Enabling module (npn_event, authz_core 외 20여가지 항목에 대해 반복)
- setting up (ssl-cert)
- Processing triggers for (libc-bin / systemd / ureadahead / ufw, 4가지에 대해 반복)
무슨 말인지는 잘 모르겠지만, 훗날 힌트가 될까 해서 정리해보았다.
패키지매니저(apt-get)와 환경변수
보통 블로그들을 참고해보면("apt-get jdk 설치"라는 검색어로 구글링), apt-get 으로 패키지를 설치하고 나면 java, javac 와 같은 명령어는 운영체제에 등록되어 패키지매니저를 활용한 설치만으로도 사용할 수 있는 것을 확인할 수 있는데, 패키지매니저가 PATH 환경변수에 해당 프로그램들의 경로를 추가하기 때문인 것같다.
반면, java 구동을 위해서 JAVA_HOME
환경변수 및 CLASSPATH
환경변수는 패키지매니저가 설정하지 않는 모양이다. 즉, 별도의 환경변수는 사용자가 직접 경로를 알아내어 추가해주어야 하는 것 같다.
아파치 서버 동작 확인
[👨🏼💻 중요]
mod_jk 설치
mod_jk
는 WS 와 WAS 를 서로 연결해주는 모듈이다.
[👨🏼💻 중요]
$ apt-get install libapache2-mod-jk
mod_jk 커넥터 설정
WS 및 WAS 가 서로 연동되어 동작하도록 실행환경을 구성하는 환경설정이다.
mod_jk
의 workers.properties
파일을 다음과 같이 수정하자.
[👨🏼💻 중요]
$ vi /etc/libapache2-mod-jk/workers.properties
[👨🏼💻 중요]
workers.properties
workers.tomcat_home=/usr/local/tomcat8 #기본은 /usr/share/tomcat8 이었다.
workers.java_home=/usr/local/java #기본은 /usr/lib/jvm/default-java
worker.list=ajp13_worker #기본 설정과 동일하다.
worker.ajp13_worker.port=8009 #기본 설정과 동일하다.
worker.ajp13_worker.host=localhost #기본 설정과 동일하다.
worker.ajp13_worker.type=ajp13 # 기본 설정과 동일하다.
worker.ajp13_worker.lbfactor=1# 기본 설정과 동일하다.
#
이하의 주석은 지워주도록 하자
[참고] mod_jk worker
worker 라는 개념이 등장하는데 톰캣과 같은 서버를 하나 이상 연결 할 수 있는 것 같다. 이에 대한 심화적인 내용은 따로 찾아보는 것으로 하자. 지금 톰캣은 1마리면 될 것 같으니까.
주석을 잘 읽자. 세상에 이렇게나 꼼꼼하고 친절하다.
# workers.tomcat_home should point to the location where you
# installed tomcat. This is where you have your conf, webapps and lib
# directories.
# workers.java_home should point to your Java installation. Normally
# you should have a bin and lib directories beneath it.
workers.tomcat_home 에는 당신의 tomcat 을 설치한 위치를 지정해야 합니다. 이곳은 conf, webapps 와 lib 디렉토리를 갖고 있는 곳입니다.
workers.java_home 에는 당신의 java가 설치된 위치를 지정해야합니다. 일반적으로 이 디렉토리는 하위에 bin 과 lib 디렉토리를 가지고 있어야 할 것입니다.
tomcat 설정
[👨🏼💻 중요]
$ vi /usr/local/tomcat8/conf/server.xml
[👨🏼💻 중요]
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
위 내용이 주석처리 되어 있다면 주석 해제한다.(이전번 실패때는 주석되어있더니 이번엔 아니었다.)
[👨🏼💻 중요]
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="/" reloadable="true" />
......생략......
</Host>
위 코드를 해석해보자. http://localhost/path
경로로 요청한 결과에 대해 apache에서 tomcat 으로 docBase에 설정된 경로로 연결을 해준다. docBase 설정을 하지 않는다면 기본적으로 tomcat 설치경로의 webapps 의 ROOT 폴더를 바라보게 된다고 한다.
위 코드는 DocumentRoot
설정을 위해 필요하다. 아파치와 톰캣의 ROOT 폴더를 공유하고자 할때 변경해줄 수 있다.
그러나 블로그를 따라 톰캣의 ROOT 디렉토리에 아파치 ROOT 가 향하게 하자.
Apache 설정
[👨🏼💻 중요]
$ vi /etc/apache2/sites-enabled/000-default.conf
아래와 같이 내용을 수정하고, (#
이하의 주석은 지워주도록 한다.)
[👨🏼💻 중요]
ServerAdmin webmaster@localhost #내 메일로 바꿔주자.
DocumentRoot /usr/local/tomcat8/webapps/ROOT #아파치의 ROOT 폴더를 톰캣의 ROOT 로 바꿔주자 (기존 아파치는 /var/www/html )
ServerName example.com // 설정된 도메인 #주석 해제하여서버 네임을 지정할 수 있는 것 같다. (AWS DNS 넣나?)
ServerAlias http://www.monchertongtong.com # 주석되어 있는 부분이 되어있지 않은걸 보니 임의로 넣어야 하는 부분?
맨 밑에 JkMount 관련부분을 추가해준다.
[👨🏼💻 중요]
JkMount /* ajp13_worker
JkMount / ajp13_worker
위와 같이 설정하면 http://ip/PATH
경로로 시작하는 요청은 모두 커넷터 설정에서 지정한 WORKER_LIST(mod_jk 설정)로 연결이 된다.
[참고] 잡담
원리가 뭘까? 블로그에서는 http://ip/PATH
(http://ip/PATH) 경로로 시작하는 주소는 모두 커넥터 설정에서 지정한 Worker_list 로 연결된다고 하는데 느낌만 짐작할 뿐, 쉽게 알아차리기가 어렵다.
Apache, Tomcat 재시작
Apache 서버 재시작
[👨🏼💻 중요]
$ service apache2 restart
Tomcat 서버 재시작
[👨🏼💻 중요]
$ cd /usr/local/tomcat8/bin
$ ./shutdown.sh
[참고] Apache 서버 재시작 삽질
그럴 것 같았다... 역시나 실패다. 잘못한 부분을 찾아보자.
역시 'Code Never Lies" 다. control process exited
로서 에러를 확인해보라고 했고, 확인했더니 30째줄이 잘못됐다고 한다. 000-default.conf
의 (어? 이거 어디서 많이 보던 오류 스타일이다. JAVA 다. 새삼스럽지만 Tomcat 은 JAVA 로 돌고 있는거다.)
필자는 JkMount
라고 써야 할 부분에 JkMound
라고 오타를 적었었다. 30번째 줄이 다행히 두 번째 JkMount 였다. 그렇다면 29째줄인 JkMount 는 잘 되었었다는 거겠지.
[참고] 환경변수의 scope
./shudown.sh
명령어를 사용하면서 신기한 사실을 발견하였다. 이 동작을 실수로 sudo ./shutdown.sh
라고 sudo
로 명령을 진행했었는데 JAVA_HOME 또는 JAVA_JRE 환경변수가 설정되어 있어야 한다고 했다. 분명, 해당 환경변수를 추가해줬었는데 말이다. 이유는 sudo 로 실행하게 되면, root 계정 환경에서 동작하게 되고 환경변수가 다르게 작동하는것이기 때문일것이다. (즉 root 계정에는 JAVA_HOME 환경변수가 없다는 거다.)
[참고] tomcat 이 꺼져있는 경우
tomcat 이 shutdown 된 상태에서 apache 는 동작하고 있는 것일 테다. 그렇다면, 사이트에 접속이 될까?
대답은 No, 아래와 같이 Service Unavailable 이라는 메시지가 뜬다.
[참고] tomcat 재시작 소요시간
./startup.sh
명령어를 실행하고 나서 브라우저로 확인하는데 잘 되지 않았다.
크윽 ... 잘 될 리가 없지... 아예 응답이 없다. ㅠㅠ
톰캣은 시작 되었다는 메시지를 보았다.
아파치도 재시작하려다보니까, 갑자기 된다. 역시 좀 기다려야 했었던 것이다.
[참고] apt-get 의 tomcat
이전 과정에서 tomcat 을 수동으로 설치했었다. apt-get 으로 설치한 tomcat 은 동작이 잘 안되었는데 무슨 이유인지 아직 찾지 못하였다. 아마 경로설정이 잘못되어있었을거라고 추측은 해보지만, 다시 도전해볼 필요가 있다.
Apache, Tomcat 연동 동작 확인
[👨🏼💻 중요]
이 상태(톰캣 재시작 전)에서도 :8080 포트 없이 접속한 ip (아마도 80포트) 가 톰캣으로 확인된다.모습을 볼 수 있다.
'Server 만들기' 카테고리의 다른 글
[삽질 가득 서버 설치기] [Apache + Tomcat] 6 - 이클립스에서 개발한 프로젝트 리눅스에 배포하기 (0) | 2018.07.04 |
---|---|
[삽질 가득 서버 설치기] [Apache + Tomcat] 5 - 리눅스에서 JSP와 DB 연동하기(MySQL) (6) | 2018.06.19 |
[삽질 가득 서버 설치기] [Apache + Tomcat] 4 - 소스코드 배포환경 구성 (1) | 2018.06.13 |
[삽질 가득 서버 설치기] [Apache + Tomcat] 2 - 우분투 Tomcat 설치 (2) | 2018.06.11 |
[삽질 가득 서버 설치기] [Apache + Tomcat] 1 - 우분투 JDK 수동 설치, JAVA 수동 설치 (0) | 2018.06.11 |