'Tomcat'에 해당되는 글 3건

  1. CentOS에서 Apache Tomcat 설치하기
  2. Apache Tomcat, java.lang.OutOfMemoryError: Java heap space 오류 발생시 대처 방법
  3. [Tomcat] 웹 애플리케이션 접속시 URL에 포트 번호 없이 접속하기

CentOS에서 Apache Tomcat 설치하기

개요

Apache TomcatJava EE 스펙의 부분 구현체로 소규모 웹사이트부터 엔터프라이즈 웹 애플리케이션까지 광범위하게 사용되는 가볍고 빠른 성능의 오픈 소스 웹 컨테이너이다. 이번 글에서는 CentOS 6에서 Apache Tomcat 8을 설치하고 실행하는 과정을 설명해보고자 한다.

방화벽 허용하기

$ vi /etc/sysconfig/iptables
iptables -A INPUT -m state --state NEW -p tcp --dport 8080 -j ACCEPT

$ service iptables restart
  • Apache Tomcat의 기본 서비스 포트는 8080이다. 해당 포트를 방화벽에서 허용하도록 설정한 후 방화벽을 재시작한다.

사용자 계정 생성하기

$ groupadd tomcat
$ useradd -g tomcat tomcat
$ passwd tomcat
  • root 계정으로 Apache Tomcat을 바로 실행하는 것은 보안상 피해야 한다. 설치에 앞서 Tomcat을 관리하기 위한 tomcat이라는 이름의 그룹 및 사용자 계정을 새로 생성한다.

JDK 설치하기

$ su - tomcat
$ wget http://download.oracle.com/otn-pub/java/jdk/7u71-b14/jdk-7u71-linux-x64.tar.gz
$ tar -zxvf jdk-7u71-linux-x64.tar.gz
$ rm jdk-7u71-linux-x64.tar.gz
$ ln -s jdk1.7.0_71 jdk
  • Apache TomcatJava에 종속적이다. CentOSyum을 이용하여 손쉽게 OpenJDK를 설치할 수 있다. 만약 시스템에 설치된 JDK에 영향을 주지 않으면서 현재 사용자 계정에서만 다른 버전의 JDK를 사용하고자 한다면 위와 같이 직접 다운로드하는 방법을 추천한다. 앞서 생성한 tomcat 사용자로 로그인하여 다운로드 및 압축 해제 후 JDK에 대한 심볼릭 링크를 생성한다.

Apache Tomcat 다운로드 및 설치하기

$ wget http://apache.tt.co.kr/tomcat/tomcat-8/v8.0.15/bin/apache-tomcat-8.0.15.tar.gz
$ tar -zxvf apache-tomcat-8.0.15.tar.gz
$ rm apache-tomcat-8.0.15.tar.gz
$ ln -s apache-tomcat-8.0.15 tomcat
  • Apache Tomcat을 다운로드한다. 여기서는 공식 홈페이지 상의 8.0.15 버전의 tar.gz 파일 링크를 그대로 다운로드 후 압축을 해제한다.
  • 추후 관리의 편의를 위해 tomcat이란 이름으로 압축 해제된 디렉토리를 바라보는 심볼릭 링크를 생성한다.

환경변수 및 인코딩 설정하기

$ vi $HOME/.bashrc
export PATH="$HOME/jdk/bin:$HOME/tomcat/bin:$PATH"
export JAVA_HOME="$HOME/jdk"
export JRE_HOME="$HOME/jdk/jre"
export CATALINA_HOME="$HOME/tomcat"
export CATALINA_OPTS="-server -Xms256m -Xmx256m"

$ vi $CATALINA_HOME/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
  • 설치한 Apache Tomcat 8JDK 7을 기반으로 실행한다는 것을 명시하기 위해 tomcat 사용자의 홈 디렉토리의 .bashrc 파일을 열고 가장 마지막에 위와 같이 환경변수를 추가한다.
  • CATALINA_OPTS-Xms, -Xmx 옵션은 Tomcat에서 가용할 수 있는 Heap Size의 최소, 최대 크기를 의미한다. 시스템의 쓰임새와 메모리 용량을 고려하여 적절한 값을 설정한다. Heap Size가 초과되면 java.lang.OutOfMemoryError: Java heap space 오류가 발생한다.
  • URIEncoding 옵션을 별도로 지정하지 않으면 Apache Tomcat은 기본 캐릭터셋으로 서블릿 스펙에 명시된 ISO-8859-1을 사용한다. ISO-8859-1은 대부분의 서유럽 언어만을 수용하기 때문에 요청 URI에 한글이 포함되면 깨져버린다. URIEncodingUTF-8로 지정해야 HTTP Request시 한글 파라메터가 깨지지 않고 온전히 서버로 전달된다.

Apache Tomcat Manager 접근 권한 부여하기

$ vi $CATALINA_HOME/conf/tomcat-users.xml
<tomcat-users>
    <role rolename="manager-gui"/>
    <user username="$USERNAME" password="$PASSWORD" roles="manager-gui"/>
</tomcat-users>

$ vi $CATALINA_HOME/webapps/manager/WEB-INF/web.xml
    <multipart-config>
      <max-file-size>104857600</max-file-size>
      <max-request-size>104857600</max-request-size>
      <file-size-threshold>0</file-size-threshold>
    </multipart-config>
  • Apache Tomcat Manager는 웹으로 애플리케이션을 배포하고 관리할 수 있는 도구이다. 접근 권한을 가진 사용자 계정을 생성하면 http://localhost:8080/manager/html 주소를 실행하여 원격 관리가 가능하다.
  • Apache Tomcat Manager 또한 Apache Tomcat에 의해 실행되는 Java Web Application이다. 배포를 위한 .war 업로드시 최대 파일 크기가 50MB로 제한되어 있는데 크기를 늘리려면 위와 같이 web.xmlmax-file-size, max-request-size 엘러먼트의 값을 수정하면 된다. 값의 단위는 byte이다.

Apache Tomcat 서비스 시작하기

$ $CATALINA_HOME/bin/startup.sh
  • Apache Tomcat 서비스를 시작한다. http://localhost:8080/ 주소로 접속하여 서비스가 정상적으로 실행되고 있는지 확인한다.

참고 글


저작자 표시 비영리 동일 조건 변경 허락
신고

'SW 개발 > Tomcat' 카테고리의 다른 글

CentOS에서 Apache Tomcat 설치하기  (0) 2014.12.01

Apache Tomcat, java.lang.OutOfMemoryError: Java heap space 오류 발생시 대처 방법

java.lang.OutOfMemoryError: Java heap space

Apache Tomcat에서 실행 중인 웹 애플리케이션에서 java.lang.OutOfMemoryError: Java heap space 오류가 발생하는 경우 어떻게 조치해야 할까? 절차를 아래와 같이 정리해봤다.

  • 먼저 Heap이란 용어를 이해해야 한다. Heap이란 Java Application이 실행 중에 생성되는 Object가 저장되는 메모리 영역이다.(당연히 Garbage Collection이 발생하는 영역이기도 하다.) Heap Size는 바로 이러한 Heap의 크기를 의미하며 당연히 Heap Size가 클수록 좋다. Heap Size가 작으면 java.lang.OutOfMemoryError: Java heap space 오류가 발생할 확률이 높아진다. 물론 Heap 사용량을 유발하는 코드 상의 구조적인 결함이 있는지도 점검해봐야 한다. 구조적인 결함을 놔둔채 Heap Size만 늘리면 애플리케이션의 시한부 생명을 조금이나마 더 늘리는 것에 불과하다.
  • Heap Size를 늘리기 위해 실행 중인 Apache Tomcat 서비스를 중지하고 운영체제 별로 아래 명령을 실행하고 서비스를 재시작한다.
// Linux 기반의 Bash 쉘일 경우
export CATALINA_OPTS="-Xms1024m -Xmx1024m"

// Windows 기반일 경우
set CATALINA_OPTS=-Xms1024m -XmX1024m
  • 위의 옵션이 바로 Heap Size를 결정하는 옵션으로 -Xms는 최소 Heap Size, -Xmx는 최대 Heap Size를 의미한다. 1024m은 1024MB를 의미한다. 1g를 입력해도 의미는 동일하다. 시스템의 메모리는 물리적으로 한정된 공간이므로 Heap Size를 무조건 높게 잡을 수는 없다. 최대값은 사용 가능한 시스템 메모리의 75% 정도를 할당하자. 최소값과 최대값 모두 같은 값을 할당하는 것도 좋은 방법이다.

참고 글

저작자 표시 비영리 동일 조건 변경 허락
신고

[Tomcat] 웹 애플리케이션 접속시 URL에 포트 번호 없이 접속하기

* 운영체제에서 실행되는 하나의 Tomcat 서비스에는 1개 이상의 인스턴스들을 실행할 수 있는데 각 인스턴스들은 http://127.0.0.1:8080/appName 과 같은 URL을 통해 요청을 수행한다.


* :8080은 Tomcat이 HTTP 서비스를 수행 중인 포트 번호를 의미하고 /appName 부분은 접속할 인스턴스의 Path명을 의미한다. Path명 없이 접속하면 / 인스턴스로 접속된다.(애플리케이션을 ROOT.war 파일명으로 업로드하면 / 인스턴스로 접속된다.)


* :8080과 같은 포트 번호를 접속할 때마다 URL에 입력하는 것은 번거로운 작업이기 때문에 생략하는 방법을 조사해봤다.


* 가장 손쉬운 방법은 HTTP 프로토콜의 기본 포트인 80으로 리스닝하도록 Tomcat의 설정을 변경하는 것이다. 두번째 방법은 Tomcat 앞에 ApacheReverse Proxy로 두는 것으로 앞의 방법보다는 복잡하지만 자세한 설정이 가능하다.


* 포트 번호를 80으로 바꾸는 방법 자체는 쉽지만 리눅스 운영체제에서는 1024 미만의 포트 사용은 root 권한에게만 허용하는 제약에 걸린다. 제약을 해결하기 위한 가장 쉬운 방법은 80 포트에 대한 요청이 들어오면 8080 포트로 리다이렉트하도록 iptables의 설정을 변경하는 것이다.

# sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080


* iptables 설정을 운영체제 부팅시마다 적용하기 위해 /etc/rc.local 파일에 위 명령을 추가한다.

# vi /etc/rc.local

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080


<참고자료>

How to Start Tomcat on Port 80 without Root Privileges on Linux (by Mihail Stoynov)

http://mihail.stoynov.com/2011/04/04/howto-start-tomcat-on-port-80-without-root-privileges/


How to Setup Apache Forwarding to Tomcat (Run Tomcat on Port 80) (by Looply)

http://blog.eventloud.com/2011/04/20/how-to-setup-apache-forwarding-to-tomcat-run-tomcat-on-port-80/



저작자 표시 비영리 동일 조건 변경 허락
신고