본문 바로가기

라즈베리파이(RPI)

[버섯] 버섯돌이의 라즈베리 기초 - 톰캣(Tomcat) WAS 설치하기



버섯돌이의 라즈베리 기초

톰캣(Tomcat) WAS 설치하기


Created Date: 2014.08.28
Modified Date: 2014.08.28
revision 1

 

키워드 : 라즈베리 파이, WAS, 톰켓, Tomcat, RPI

 

안녕하세요 버섯돌이 유재성입니다.

웹 애플리케이션 서버(WAS)중 하나인 Apache Tomcat(아파치 톰켓)과 관련된

질문 글도 있고, 관련 강좌가 카페에 없기에 이번 기회에 간단히 설치 글 하나 작성합니다.

오랜만에 작성하는 기초 시리즈군요^^

 

:Web Server? WAS? Tomcat?

웹의 경우 크게는 웹 서버(Web Server)와 웹 애플리케이션 서버(이하 WAS)가 존재한다고 생각하시면 됩니다.

복잡하게 생각할 필요 없이 웹 서버는 html, image 등의 변하지 않는 정적인 콘텐츠만을 취급합니다.

반면, WAS는 정적인 자료 외에도 동적인 콘텐츠를 취급한다고 보시면 됩니다.

WAS의 개념을 간단히 본다면 웹 요청을 통해서 서버 측의 프로그램을 실행할 수 있다.. 정도로 보시면 될 것 같습니다.

동적인 콘텐츠라는 의미에서 추측할 수 있듯이 특정 조건에 따른 결과 물을 만들기 위해

서버 측의 프로그램을 실행해서 가변적인 콘텐츠를 생성할 수 있다는 의미입니다.

 

쉽게 생각해서 A 사용자가 웹에 접근하면 홍길동이라고 출력하고, B 사용자가 접근하면 버섯돌이라고 출력하는 것처럼

특정 상황에 따른 가변적인 콘텐츠를 생성할 수 있도록 도와주는 미들웨어로 보시면 됩니다.

이런 기능을  지원하기 위해서는 서버 측의 프로그램을 실행하는 능력이 지원되어야 하는데

그중에서 Tomcat은 Java Servlet이나 JSP를 실행할 수 있는 Servlet/JSP 컨테이너입니다.

간단하게... JSP나 Servlet를 사용하기 위해 톰켓이 필요하다고 보시면 됩니다.

(참고로, Tomcat은 JSP를 지원하는 WAS 중 하나 일 뿐입니다.)

 

중요한 건... JSP 등의 가변적인 기능이 필요 없이 단순히 html이나 image 등의

정적인 콘텐츠만 필요하다면 굳이 WAS를 설치할 필요 없이 웹 서버(예:Apache Webserver)만 설치하면 됩니다.

언제 웹 서버가 필요하고 WAS가 필요한지만 구분할 수 있으면 될 듯싶네요...

WAS는 Web Server의 기능도 포함하고 있으며 성능 면에서는 정적인 이미지는 웹서버가 전담하고

동적인 이미지는 WAS가 전담하는 형태로 시스템을 구축하는 게 효율적이지만 세부적인 건 자료를 찾아 보세용.*^_^*

 

 

:사용된 OS 이미지 

강좌를 보는 시점에서 OS 버전에 따른 설치 오류를 최대한 줄이고자 2014-08-28 기준으로

가장 최신 버전인 2014-06-20-wheezy-raspbian.img​ 파일을 내려받아서 진행하였으니 참고 하시기 바랍니다.

 

- 최신 버전의 Raspbian “wheezy” 다운로드 후 압축 해제 (2014-06-20-wheezy-raspbian.img)

   다운로드 URL (2014-06-20-wheezy-raspbian.zip) : http://downloads.raspberrypi.org/raspbian_latest

 

참고로, 다운로드 시점에서 가장 최신 버전의 안정화 버전이 다운로드 되므로 파일명은 다를 수 있습니다.

 

:사전 준비 작업

항상 그렇듯 제 강좌는 root 계정을 기본으로 사용하니 root 계정이 싫은 분들은 적절히 대응하시기 바라며,

root 계정 활성화 방법은 단순히 아래 명령을 실행 후 사용할 비밀번호를 입력하시면 됩니다.

> sudo passwd root 

root 계정 활성화와 관련한 세부 내용은 기존 강좌를 참고 하세요.

 

방금 전에 최신 버전을 내려받았지만 배포 시점과 현재 시점 간의 차이가 크기 때문에

최신 정보를 반영하기 위해 업데이트 및 업그레이드 작업을 먼저 진행합니다.

 

> apt-get update

업데이트는 목록만 갱신하기 때문에 그리 오래 걸리지 않습니다.

 

> apt-get upgrade

upgrade 작업은 필수는 아니지만 진행시 상당히 오래 걸리니 감안하시기 바랍니다.

 

참고로, 이 글을 쓰려고 오늘 라즈비안 최신 버전을 설치 후 몇 번 사용을 안 해서 좀 더 살펴봐야겠지만

hostname도 제대로 반영이 안되는듯싶고 업그레이드 영향인지 원래 그런지 모르겠으나

톰켓 설치 후 부팅 시 sshd 구동이 2번 실패되었는데 왠지 불안정한 느낌이네요.^^;;

 

 

 

역시나 최종 배포 후 2달이 지나서 그런지 완료까지 꽤 오래 걸리는군요.^^

 

 

참고로, 지금 사용 중인 라즈비안의 버전은 3.12.22+ 입니다.

 

 

 

:설치

Tomcat은 초반에 설명드렸듯이 Servlet/JSP 컨테이너라서 Java SDK(이하 JDK)가 필수입니다.

다행히 현재 버전의 라즈비안에는 Java SDK가 기본적으로 설치되어 있기 때문에

별도로 희망하는 JDK가 있지 않다면 별다른 설치 없이 단순히 JAVA_HOME 환경 변수만 설정하면 됩니다.

 

Java SDK(JDK)

설치되어있는 Java Compiler가 존재하는지 확인하기 위하여 javac -version 명령을 실행합니다.

> javac -version

 

 

1.7 버전의 JDK가 설치되어 있군요.

 

JAVA_HOME에 javac 파일이 존재하는 경로를 설정하기 위해서는 해당 파일이 어디에 존재하는지 알아야 합니다.

찾는 방법은 여러 가지가 존재하겠지만 가장 기본적인 find 명령으로 찾아보겠습니다.

 

> find / -name javac

java를 찾아도 되지만 필요한 파일은 JVM이 아닌 JDK가 필요하기 때문에 javac 파일이 존재하는 위치를 찾습니다.

 

 

몇 가지 파일이 존재하는데 각 링크를 하나씩 점검해 보면서 최종 위치를 찾습니다.

예를 들어,

> /etc/alternatives/javac -version

처럼 실행해서 처음에 javac 버전을 확인했던 것처럼 "javac 1.7.0_40"으로 실행되는지 확인해봅니다.

 

만약, 정상적으로 실행된다면 ls 명령으로 해당 파일이 그 위치에 존재하는지 확인합니다.

> ls -al /etc/alternatives/javac

 

파란색 표시 부분을 보면 "/etc/alternatives/javac" 파일은

"/usr/lib/jvm/jdk-7-oracle-armhf/bin/javac" 파일의 심볼릭 링크임을 알 수 있습니다.

(find로 찾은 마지막 파일과 동일하죠~?)

 

비슷하게 다른 파일들도 점검 해보면 대충 감이 올 것입니다.

어쨌든, 최종적으로 찾은 파일의 위치는 "/usr/lib/jvm/jdk-7-oracle-armhf/bin/javac" 입니다.

( 반드시 저 위치일 필요는 없으며 설치된 jdk가 여러 개라면 적당하게 고르세요~ )

JAVA_HOME 경로는 bin 폴더 이전까지입니다.

따라서, JDK의 최종 경로는 "/usr/lib/jvm/jdk-7-oracle-armhf" 입니다.

(마지막 대쉬가 없음에 주의 하시기 바랍니다.)

 

환경 변수를 설정하는 방법은 쉘에서 설정하거나 profile 등에 설정하는 방법이 존재하는데

간단하게 쉘에서 아래처럼 실행하면 됩니다.

 

export JAVA_HOME=/usr/lib/jvm/jdk-7-oracle-armhf

 

 

위처럼 쉘에서 실행한 경우에는 리부팅되면 설정된 JAVA_HOME 환경 변수가 사라지는데

톰켓 환경 설정 설명 겸 이번 강좌에서는 Tomcat 설치 전에 쉘에서 설정하도록 하겠습니다.

 

 

Tomcat

> apt-get install tomcat7

 

 

Tomcat7 코어 모듈을 설치합니다.

잠시 후 설치가 완료되면 OK 메시지와 함께 톰켓이 정상적으로 기동되었을 것입니다.

 

 

여기서 주의 깊게 보셔야 할 부분은 빨간색으로 표시한 부분입니다.

환경 설정 파일/etc/default/tomcat7 이며,

웹 서비스를 위한 홈 디렉토리/usr/share/tomcat7 폴더입니다.

끝으로 로그 생성을 위한 /etc/logrotate.d/tomcat7 파일입니다.

 

모든 설정이 정상적이면 Tomcat7이 구동되었겠지만 제 경우 마지막 메시지를 자세히 보시면

JAVA_HOME 설정시 가장 마지막에 슬래쉬까지 설정해서 최종 경로가 잘 못 되었음을 알 수 있습니다.

즉, "export JAVA_HOME=/usr/lib/jvm/jdk-7-oracle-armhf/" 처럼 설정된 것입니다. 

이로 인해 톰켓 구동에 필요한 java 파일을 찾을 수 없어서 구동되지 않았음을 알 수 있습니다.

단순히 OK 메시지가 나왔다고 정상적으로 구동되었다고 오해하면 안 되고 로그는 항상 주의 깊게 살펴보셔야 합니다.

참고로, "apt-get install" 이후 과정이라 Tomcat7 설치까지는 모두 정상이고 단지 구동을 못 한 것입니다.

 

만약, JAVA_HOME 자체를 지정하지 않으셨으면 아래처럼 실패하게 됩니다.

 

 

역시나 설치 자체는 성공적으로 완료되었고 톰켓 구동만 실패했습니다.

이경우에는 JAVA_HOME만 설정후 톰켓을 기동하면 됩니다.

 

Tomcat7 설치 전에 JAVA_HOME 외에는 딱히 설정할 부분이 없으므로

JAVA_HOME만 제대로 설정하셨다면 아래처럼 톰켓 서블릿 엔진이 정상적으로 실행됨을 알 수 있습니다.

 

 

ps 명령으로 확인해 보면 실행 중인 톰켓 프로세서를 확인할 수 있습니다.

> ps -ef | grep tomcat

 

 

:설정

톰켓 설치후 나오는 안내 메시지를 주의 깊게 살펴 보라면서 아래 3가지를 알려 드렸습니다.

 

환경 설정 파일 : /etc/default/tomcat7

홈 디렉토리 : /usr/share/tomcat7

로그 설정 : /etc/logrotate.d/tomcat7 

 

 

환경 설정 파일 : /etc/default/tomcat7

저희는 JAVA_HOME 환경 변수를 별도의 파일에 설정하지 않았기 때문에 라즈베리를 재 구동하면 Tomcat이 실행되지 않습니다.

따라서, 톰켓 구동시 이용하는 환경 설정 파일에 JAVA_HOME을 설정하겠습니다.

 

> vi /etc/default/tomcat7

vi 또는 각자 편한 에디터를 이용하시기 바랍니다.

 

환경 파일의 초반부에 위처럼 JAVA_HOME을 설정하는 곳이 있습니다.;

보통은 JAVA_HOME을 환경 변수로 설정해서 자동으로 인식되는 방식을 이용합니다만

이 파일에서 강제로 지정이 가능하니 앞에서 살펴봤던 JAVA_HOME을 이곳에 추가합니다.(빨간색 표시 영역 참고)

앞으로는 라즈베리를 재구동하더라도 톰켓이 정상적으로 실행됩니다.

 

그 외 튜닝이나 디버깅 등을 위해 JAVA_OPTS에 필요한 추가 옵션을 지정할 수 있습니다.

 

 

로그 설정 : /etc/logrotate.d/tomcat7

> cat /etc/logrotate.d/tomcat7

 

 

logrotate.d를 이용해서 "/var/log/tomcat7/catalina.out" 파일의 롤링 파일을 생성합니다.

세부 내용은 "logrotate.d"에 대해서 검색해보시기 바라며, 여기서 중요한 건 ​"/var/log/tomcat7/catalina.out"입니다.

즉, 톰켓의 구동 상태는 "/var/log/tomcat7/catalina.out​"에 저장됩니다.

 

>cat /var/log/tomcat7/catalina.out

톰켓의 구동 로그를 보시면 많은 걸 알 수 있습니다.

마지막을 보시면 톰켓이 정상적으로 start 되었음을 알 수 있으며, http 용으로 8080 포트를 열었음을 알 수 있습니다.

이 중에서 가장 중요한 건(?) "/var/lib/tomcat7/webapps/ROOT" 일 듯싶군요.

"/var/lib/tomcat7/webapps/" 폴더가 실질적인 웹 앱들이 올라가는 폴더이며 톰켓은 기본적으로 ROOT가 퍼블리싱 되어 있습니다.

즉, "http://127.0.0.1:8080" 요청 시 나오는 화면이 "/var/lib/tomcat7/webapps/ROOT"​ 폴더의 "index.html"입니다.

 

 

 

> ls /var/lib/tomcat7/webapps/ROOT 

명령으로 ROOT 폴더를 살펴보면 index.html 파일이 존재하는 걸 알 수 있으며,

index.html 내용을 cat으로 살펴보면 많이 보던 HTML 내용이 보일 것입니다.*^^*

따라서, 웹 작업이 필요하시면 ROOT 폴더의 index.html을 수정하시거나 ROOT 폴더안에 원하는 파일을 만드시면 됩니다.

 

참고로, 톰켓 작업을 하시면 "/var/lib/tomcat7" 폴더가 사실상 홈 디렉토리서 자주 애용하실 거라 봅니다.^^

 

 

 

일반적인(?) 톰켓 서비스와 관련된 설정은 바로 이곳 conf 폴더에 존재합니다.

 

 

server.xml 파일을 열어 보시면 8080포트를 비롯하여 익숙한 환경 설정들이 존재하는데

설정과 관련된 세부적인 내용은 톰켓 문서를 참고 하세요.

 

"/var/lib/tomcat7/logs" 폴더에 보면 파일이 다양하게 존재합니다.

 

 

catalina.out 로그 파일도 중요하지만..

아무래도 개발 중에는 localhost.~.log 파일을 자주 보게 됩니다.*^^*

각각의 파일에 어떤 내용들이 저장되는지 확인해보시기 바랍니다.

 

 

홈 디렉토리 : /usr/share/tomcat7

 

 

실질적인 톰켓의 구동과 관련된 폴더입니다.

폴더 내용을 보시면 대충 어떤 용도의 폴더인지 알 수 있을 거라 봅니다.*^^*

 

참고로, /usr/share/tomcat7-root 폴더도 존재하니 참고하세요.

 

 

Tomcat에 대한 강좌가 아니기 때문에 세부 내용은 인터넷 자료와 톰켓 매뉴얼을 참고하시기 바랍니다.

 

 

:구동

톰켓을 직접 압축 파일을 해제한 방식으로 설치한 게 아니라 서비스 방식으로 설치했기 때문에 

service 명령어를 이용해서 톰켓을 구동 및 정지 시킬 수 있습니다.

 

>service tomcat7 start

>service tomcat7 stop

 

 

start와 stop 만 알고 있으면 충분하리라 봅니다.^^

 

 

:테스트

톰켓이 정상적으로 기동 중인지 확인하는 편한 방법은 웹 브라우저에서 접근하는 것입니다. 

 

 

위의 경우에는 직접 라즈베리의 ip를 이용해서 접근했습니다만...

외부에서의 접속은 방화벽이나 기타 환경 요인에 의해 제대로 안 될 수 있으니 정상적으로 출력되지 않는다면

라즈베리에서 직접 웹 브라우저를 실행 후 "127.0.0.1:8080"으로 먼저 확인하시기 바랍니다.

참고로, 톰켓의 기본  포트는 8080포트로 설정되어 있으니 정상적으로 동작하지 않는 경우 바인딩 된 포트 등도 확인해보세요.

 

 

JSP 테스트

간단한 JSP 테스트를 위해 /var/lib/tomcat7/webapps/ROOT​/hi.jsp 파일을 아래 내용으로 만듭니다.

> vi /var/lib/tomcat7/webapps/ROOT​/hi.jsp

 

 

그리고 웹 브라우저에서 방금 작성한 hi.jsp 파일이 정상적으로 동작하는지 확인합니다.

http://192.168.1.6:8080/hi.jsp 

 

 

jsp도 문제없이 잘 동작하는군요.

 

 

:마치며..

간단한 설치 절차만 적으려고 했는데...

신규 OS 설치부터 몇 가지 경우를 테스트하면서 새로 적다 보니 꽤 오래 걸리는군요.ㅜㅜ;;

덕분에 본문 내용이 길어져서 복잡해 보일 수 있지만 Tomcat 설치가 어렵거나 복잡한 부분은 전혀 없습니다.

 

다만, 각자의 고유한 환경 요인에 따른 문제까지 결합되면 답이 없기 때문에

만약 잘 안되면 구글링해서 찾아보시거나 OS부터 새롭게 설치해서 진행해 보시기 바랍니다.^^

기본 환경을 벗어난 문제의 해결은 각자의 몫입니다.*^^*

 

좀 더 적으려고 했는데 너무 피곤한 관계로 하루가 또 지나기 전에 이쯤에서 마무리하고 잠을 청해야겠네요.^^;;

모쪼록 도움이 되었길 바래요~

 

[참고자료]
Apache Tomcat

Apache Tomcat 7 문서

WAS란?

End.

written by 버섯돌이(Dev4uNet)

이 저작물은 크리에이티브 커먼즈 저작자표시-비영리 3.0 Unported 라이선스에 따라 이용할 수 있습니다.