8일차_아파치 톰캣

최지웅·2025년 1월 26일
0

인프라

목록 보기
32/33
  • 톰캣은 EJB(Enterprise Java bean_기업환경의 시스템을 구현하기 위한 서버 측 컴포넌트 모델)를 사용하야 무겁고 값비싼 상용 WAS(Web Application Server_php, jsp, asp와 같은 웹 애플리케이션을 실행시켜 필요한 기능을 수행하고 그 결과를 웹 서버에게 전달하는 일종의 미들웨어로 동적 페이지를 만들 수 있는 서버)대신 사용된다.
    참고) https://velog.io/@bky373/Web-%EC%9B%B9-%EC%84%9C%EB%B2%84%EC%99%80-WAS

1. 톰캣 설치

1-1. JDK 설치

  • 톰캣 구동은 JRE만으로 가능하고, 자바 애플리케이션을 빌드하려면 JDK가 필요하다. 만약 여러 JDK가 설정되어 있다면 기본 java버전을 alternative명령어로 지정할 수 있다.

1-2. 톰캣 설치

  • 일반 사용자로 톰캣을 설치한 뒤 1024번 포트를 사용하자.

1-3. 디렉터리 구성

/bin: 바이너리와 실행 스크립트

  • startup.sh: 톰캣 구동
  • shutdown.sh: 톰캣 종료
  • version.sh: 톰캣의 버전과 운영체제, JDK 정보 출력
  • configtest.sh: 설정의 이상 유무 테스트
  • setenv.sh: 톰캣 실행 시 JVM에 전달할 옵션 지정

/conf: 톰캣 전역 설정 파일

  • server.xml: 톰캣 서비스, 엔진, 호스트 등의 중요 내용
  • tomcat-users.xml: 역활 기반 사용자 권한 및 인증 정보 설정
  • web.xml: 웹 배포 시 사용할 기본 설정
  • context.xml: 세션 쿠키 저장 경로 등 톰캣에 의존적인 설정

/lib: 모든 웹앱에서 사용 가능한 JAR들

/logs: 기본 로그 파일 저장

/webapps: 웹 애플리케이션이 위치한 디렉터리

/work: 서블릿이나 JSP파일 컴파일된 소스와 클래스 파일들

/temp: 임시


(25.01.28)

1-4. JVM 구동 옵션 설정

  • catalina.sh로 환경변수나 JVM옵션을 설정할 수 있다.
# 기본 톰캣 설정의 작은 JVM 메모리를 늘리는 bin/setenv.sh
#!/bin/sh

MIN_MEMORY="128m"
MAX_MEMORY="512m"
MAX_PERM_SIZE="256m" # Permanaet Generation 영역(클래스, 메서드, 객체 등)
SERVICE_NAME="myWebApp"

JAVA_OPTS="-Dcom.example.servicename=${SERVICE_NAME} -Xms${MIN_MEMORY} -Xmx${MAX_MEMORY} -XX:MaxPermSize=${MAX_PERM_SIZE} ${JAVA_OPTS}"
  • 일반적으로 톰캣은 관리자 TCP 포트를 서비스 포트와 같이 사용하기 때문에 톰캣이 제대로 종료되지 않는 경우에는 lsof로 PID을 알아내로 kill하자.
  • 아래는 위 과정을 알아서 종료시키는 스크립트 예시이다. 이해는 정말 안되지만 언젠간 이해해야하는 스크립트 같기에 gpt에게 주석을 시켜 한번이라도 읽어보자. 실행은 chmod +x주면 된다.
#!/bin/sh
# 프로세스 종료 함수 정의
killproc(){
    local prog=$1 # 첫 번째 인자: 프로세스 이름
    local user=$2 # 두 번째 인자: 사용자 이름
    local signal="TERM" # 기본 종료 시그널

    # 인자가 부족하면 사용법 출력
    if [ "$#" = 0 ] ; then 
        echo $"Usage: killproc {program} {user} {signal}"
        return 1
    fi

    # 세 번째 인자가 있으면 해당 시그널로 변경
    if [ "$#" = 3 ]; then 
        signal=$3
    fi

    # 프로세스 ID를 검색
    PID=`ps -eaf | grep ${prog} | grep -v grep | grep ${user} | awk '{print $2}'`
    
    # 프로세스가 실행 중이라면 종료 시도
    if [ ! -z ${PID} ] && [ ${PID} -gt 0 ]; then 
        echo "kill -${signal} ${PID}" 
        kill -${signal} ${PID}; # 프로세스 종료
        return 1; # 종료 성공 시 1 반환
    else
        return 0; # 실행 중인 프로세스가 없으면 0 반환
    fi
}

# 종료할 서비스 이름
SERVICE_NAME=myWebApp

# Tomcat 설치 경로 설정
TC_HOME=/var/tomcat/tomcat-7.0.55
if [ ! -d ${TC_HOME} ]; then
    TC_HOME=`pwd`
fi

# 현재 사용자 이름 확인
USER=`whoami`

# Tomcat 종료 스크립트 실행
cd ${TC_HOME}
./bin/shutdown.sh >& /dev/null
sleep 1

# 반복적으로 종료 시도
for i in 1 2; do
    killproc ${SERVICE_NAME} ${USER}
    RET=$?
    if [ $RET = 0 ]; then
        break;
    fi;
    sleep $i; # 재시도 전 대기
done

# 최종적으로 KILL 시그널로 강제 종료
killproc "${SERVICE_NAME}" "${USER}" "KILL"

2. 설정과 배포


(25.01.25)

아키텍처

  • 톰캣은 서버, 서비스, 카탈리나 엔진, 로컬 호스트, 컨텍스트가 있고 이를 클라이언트와 연결하는 모듈이 커넥터이다. 커넥터는 HTTP(8080), AJP(8009)로 HTTPS는 기본설정되어있지 않다.
  • 톰캣의 서버 모듈은 인스턴스 기동/종료 용으로 8005번 포트릉 사용하여 총 3개의 포트를 사용한다.
  • 톰캣 설치 시 기본적으로 docs, examples, host-manager(호스트관리), manager(컨텍스트관리) 총 4개의 애플리케이션이 설치된다.
  • 벨브(Valve)는 특수한 처리릉 수행하는 컴포넌트로 접근 로그를 남기거나 IP주소로 클라이언트를 제아할 때 사용된다.

3. 아파치 웹 서버와의 연동

  • 주로 톰캣만 사용하지 않고 다른 웹 서버와 연동해 사용하는데 그러한 방식이 정적 컨텐츠 서비스 효율, 유연한 클러스터링, 모듈 기반 확장, 가상 호스트, 보안 등에서 뛰어나다.
  • 아파치 웹 서버의 기본 모듈인 mod_proxy는 사용자가 연결했을 때 서버가 요청(캐시)받아 연결하고 전달해주는 포워드 프록시, 사용자 요청받으면 직접 내부 서바에서 데이터를 받아 전달하는..? 뭔차이여 방식이 있다.
  • 보안 실수 방지를 위해 아파치 웹 서버와 톰캣을 같은 장비에서 구동하는 경우 모든 파일 처리를 톰캑이 하고 아파치 웹 서버는 단순 전달만 하게 하자.
profile
이제 3학년..

0개의 댓글

관련 채용 정보