하나의 서버에 두개의 웹서버를 서비스하는 경우가 발생한다. 본 포스팅에서는 하나의 물리적 서버에서 두개의 웹서버(Tomcat 7.0)을 서비스하는 방법을 소개한다. 톰캣의 버전과는 크게 무관한 포스팅이며 서버의 운영체제와도 관계없이 범용적으로 적용이 가능한 방법이다.

 

하나의 물리적 서버에 두개의 웹서버를 구성하는 이유는 각각의 웹서버가 상호 의존적이지 않게 서비스를 하기 위함이다. 가령, A 서비스를 중단했다고 B 서비스가 중단되면 안 될 일이다. 하지만, 다중 톰켓을 구현하지 않는다면 모든 서비스가 한개의 웹서버에 적재되기 때문에 한번에 다 죽고사는 공동 운명체를 갖게된다. 이를 방지하고자 이중 톰켓을 구현한다.

 

 

 

 

1. 웹서버의 디렉터리 구조

다중 톰캣을 구현하기 위해 많은 포스팅을 살펴보면 다양하게 웹서버의 디렉터리를 설정하고 있지만, 본 포스팅에서는 가장 간편한 방법으로 웹서버를 구성하는 방향으로 포스팅할 것이다. 웹서버의 디렉터리 구조는 아래와 같이 구성된다.

 

TomcatServer1: C:\Program Files\Apache Software Foundation\TomcatServer1

TomcatServer2: C:\Program Files\Apache Software Foundation\TomcatServer2

 

위와 같은 디렉터리 구조를 선택한 이유는 디렉터리 구조가 직관적이며 몇가지의 설정만 바꿔주면 웹서버 증설이 가능하기 때문이다.

 

 

 

2. Apache Tomcat 공식 사이트에서 톰캣 다운로드

아파치 톰캣의 공식 사이트(http://tomcat.apache.org)에 접속하면 손쉽게 다운로드 가능하다. 아래의 사진과 같이 여러개의 버전이 존재하지만 본 포스팅에서는 Tomcat 7.0.72 버전을 기준으로 작성되었다. 하지만 톰캣의 기본 구조는 서버가 올라가도 변함이 없기 때문에 버전에 관계없이 다중톰캣은 구동이 가능하다.

 

 

 

 

각자 원하는 톰캣 버전을 클릭하면 다운로드 페이지로 이동되는데, 모두 아래와 같이 여러 패키지로 지원을 하고있다. 본인은 Windows Server 64bit 운영체제이기 때문에 '64-bit Windows.zip'을 다운로드 받았다. 주의할 점은 윈도우 서버의 경우 '32-bit/64-bit Windows Service Installer' 패키지도 제공되는데, 해당 패키지는 설치 마법사로 톰캣을 설치하기 때문에 다중 톰캣을 구현하는데에는 어려움이 있다. 따라서, 인스톨러 패키지가 아닌 압축된 형태로 제공하는 패키지를 다운로드 받아야 된다.

 

 

 

Tip) 32-bit/64-bit Windows Service Installer 인스톨러 패키지로 설치하면 안되는 이유

인스톨러의 경우 자동으로 서비스까지 설정이 되기 때문에 수동으로 서비스를 설정할 수 있는 bat(sh) 파일은 제공되지 않는다. 경우에 따라서 bat(sh) 파일 따로 구해서 설정은 가능하지만 바람직하지 않다. 어차피 웹서버를 셋팅해줘야 하기 때문에 수동으로 설치하는 zip 패키지를 권장한다.

 

 

 

 

3. 첫번째 Tomcat Server Setup

다운로드가 완료되면 첫번째 톰캣 웹서버를 설치한다. 설치 마법사(Installer)가 아닌 수동으로 웹서버를 설치하기 때문에 비교적 손이 많이 가지만, 톰캣의 구조를 이해하고 다중 톰캣을 구현하기 위해서는 익숙해질 필요가 있다. 웹서버를 설치하기 위한 작업 절차는 아래와 같다.

 

- 톰켓 기본 디렉터리 구성

- conf/server.xml 포트번호 설정

- bin/startup.bat(sh) 및 bin/shutdown.bat(sh) 설정

- bin/service.bat 설정

 

 

#3-1 톰켓 기본 디렉터리 구성

쉽게 설명하면 다운로드 받은 zip 파일의 압축을 해제할 경로를 말한다. 어느 위치이든 상관없으니 관리하기 편한곳으로 자리 잡으면 된다. 본인은 C:\Program Files\Apache Software Foundation 경로에 Tomcat7Server1 폴더를 생성했다. 압축을 해제한 모습은 아래와 같다.

 

 

#3-2 conf/server.xml 포트번호 설정

server.xml을 수정하는 이유는 웹서버의 포트번호를 설정해주기 위함이며, 서로 중복되지 않게만 자신의 입맛대로 설정해주면 문제없다. 아래의 사진과 같이 빨간색으로 표시한 부분을 변경해주면 되는데, 본인의 경우 관리를 편하게 하기 위해 기본으로 셋팅되어 있는 포트번호에서 앞자리만 전부 7로 바꾸었다. 물론, 현재 상황에서는 웹서버가 처음 설치되었기 때문에 기본으로 셋팅된 포트번호를 그대로 사용해도 좋다.

 

 

Tip) 위의 server.xml 소스는 기본값에서 주석만 제거한 상태다.

 

 

#3-3 bin/startup.bat(sh) 및 bin/shutdown.bat(sh) 설정

startup 및 shutdown 배치파일을 수정하는 이유는 웹서버의 서비스를 구동시키거나 중지시키기 위해 필요한 설정을 해주기 위함이다. 리눅스 계열의 경우 필수적으로 설정을 해야하며, 윈도우 계열의 경우 #3-3, #3-4 중에 한가지 방법으로 설정하면 된다. 윈도우 계열이라면 본인은 #3-4 방법을 추천한다.

 

왜냐하면!

리눅스 계열은 startup.sh 파일을 실행하면 눈에 보이지 않는 백그라운드 영역에서 서비스가 실행되며, 서비스를 중지할 때는 shutdown.sh 파일을 실행하면 종료된다. 하지만, 운영체제의 경우 startup.bat 파일을 실행하면 커맨드창이 떠오르면서 서비스를 할 수 있다. 그 커맨드 창을 항상 유지시켜야 서비스가 가능하지 때문에 불편하다. 그렇기 때문에 윈도우 운영체제에서 지원하는 서비스 관리 도구에 서비스를 등록함으로써 눈에 보이지 않는 백그라운드 영역에서 서비스를 할 수 있다. #3-4에서 자세히 설명한다.

 

ex)

set "CATALINA_HOME=C:\Program Files\Apache Software Foundation\Tomcat7Server1"
set "CATALINA_BASE=C:\Program Files\Apache Software Foundation\Tomcat7Server1"
set "SERVER_NAME=Server1"
set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_80"

 

톰켓 환경 변수값을 세팅해주는 위치는 아래와 같이 setlocal 바로 위에 기입해주면 된다. 만약 setlocal이 보이지 않는다면, 제일 위에 있는 @echo와 주석(rem)을 제외하고 가장 위에 적어주면 된다. startup, shutdown 동일한 내용으로 동일한 위치에 작업해주면 된다.

Tip) 톰캣을 설치하기전에 자바가 설치되어있어야 한다(http://wookoa.tistory.com/52)

 

 

#3-4 bin/service.bat 설정

service.bat 파일을 수정하는 이유는 윈도우 서버 운영체제에서 제공하는 '서비스 관리 도구'에 등록하기 위해서다. 서비스 관리 도구에 접근하기 위한 경로는 아래와 같다.

 

서비스 관리 도구: 제어판 - (시스템 및 보안) - 관리도구 - 서비스

 

 

 

위와 같은 서비스 관리 도구에 웹 서비스를 등록하기 위해서, 먼저 service.bat 파일을 수정해야 한다. 총 두개의 변수를 수정하는데, SERVICE_NAME 변수는 웹 서비스 물리명이고 DISPLAYNAME 변수는 웹서비스 논리명이다. 서버의 모든 서비스 중 유일한 값으로 세팅해야된다.

 

수정하는 위치는 service.bat 파일의 내용 중 SERVICE_NAME 변수명으로 검색을 하면 70번대 라인에 수정해야될 두개의 변수가 보인다. 자신의 입맛에 알맞게 서비스명을 수정해주면 된다. 추가로, 서비스명에 언더바(_)가 들어가면 서버 구동시 오류가 발생하니 언더바가 들어가지 않는 이름으로 명명해야 한다. 본인의 경우 아래의 사진과 같이 변경했다.

 

 

웹 서비스명을 지정한 다음 서비스를 등록해야 한다. 커맨드(cmd) 창을 열고 첫번째 서버가 설치된 경로의 bin 폴더로 이동한다. 위에서 수정한 service.bat 파일을 아래와 같은 명령어로 실행한다.

 

명령어: service.bat install

 

 

 

위의 명령어를 실행하면 윈도우 서비스 관리 도구에 서비스가 등록된 모습을 확인할 수 있다.

 

 

 

 

4. 두번째 Tomcat Server Setup

두번째 톰캣 서버를 설치하는 방법은 첫번째 서버를 설치하는 방법과 동일하다. 추후에 세번째 또는 네번째 웹서버를 증설할 때에도 같은 방법으로 쉽게 증설할 수 있다. 방법이 같지만 간단히 요약하자면 아래와 같다.

 

 

#4-1 톰켓 기본 디렉터리 구성

첫번째 웹서버 경로와 동일한 위치에 원하는 디렉터리를 생성한다.

ex) C:\Program Files\Apache Software Foundation\Tomcat7Server2

 

 

#4-2 conf/server.xml 포트번호 설정

첫번째 웹서버의 포트번호와 중복되지 않는 값으로 세팅한다. 본인의 경우 첫번째 웹서버는 각 포트번호의 앞자리를 7로 변경했으며, 두번째 웹서버는 6으로 변경했다.

 

 

#4-3 bin/startup.bat(sh) 및 bin/shutdown.bat(sh)

첫번째 웹서버와 동일한 방법으로 변경을 하는데 내용은 두번째 웹서버 상황에 맞도록 수정한다.

 

ex)

set "CATALINA_HOME=C:\Program Files\Apache Software Foundation\Tomcat7Server2"
set "CATALINA_BASE=C:\Program Files\Apache Software Foundation\Tomcat7Server2"
set "SERVER_NAME=Server2"
set "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_80"

 

 

#4-4 bin/service.bat 설정

첫번째 웹서버와 동일한 방법으로 변경을 하는데 내용은 두번째 웹서버 상황에 맞도록 수정한다.

 

ex)

 

커맨드(cmd) 창을 열고 두번째 서버가 설치된 경로의 bin 폴더로 이동한다. 위에서 수정한 service.bat 파일을 아래와 같은 명령어로 실행한다.

 

명령어: service.bat install

 

 

 

 

5. 웹 서버의 구동

지금까지의 과정을 요약하면 웹서버 두개를 설치하고 가각의 환경을 설정해준 다음 윈도우 운영체제의 경우 서비스 관리 도구에 등록까지 해주었다. 이젠 실제로 웹서버를 구동하기만 하면 된다. 리눅스의 경우 각각의 실행 쉘(startup.sh)을 실행해 주면 된다. 윈도우 운영체제의 경우 실행 배치(startup.bat)만 설정했다면 배치파일을 더블클릭으로 실행만 해주면 웹서버가 구동된다. 아래의 사진은 윈도우 운영체제의 서비스 관리 도구에 다중 톰캣으로 서비스가 등록된 모습니다.

 

 

위의 서비스 목록중에 Tomcat7Server1, Tomcat7Server2가 보일 것이다. 서비스 구동을 원하는 웹서버를 클릭 후 좌측의 시작 버튼을 클릭하면 웹서버는 구동된다.

 

 

아래의 사진은 서비스 관리 도구에서 웹서버를 모두 실행 시킨 후 지정한 포트 번호로 정상 접속이 되는지 확인해 본 결과다. 모두 정상적으로 웹페이지가 구동되었으며, 서로 독립적인 웹서버기 때문에 한쪽 웹서버가 내려가도 다른 웹서버에는 영향을 미치지 않는다.

 

 

 

설명이 장황해서 그렇지 비교적 간단한 방법으로 다중 톰켓을 구현해 봤다. 알맹이 요점만 집어본다면 Tomcat 디렉터리를 통째로 복사 후 server.xml 파일과 startup, shutdown 배치파일을 수정하면 끝이다. 여기에 윈도우 운영체제의 경우 서비스 관리 도구에 한차례 등록만 더 해주면 되는 것 이다. 톰켓을 설정하기 위한 세세한 설정 방법은 많이 존재 한다. 조금 더 자세한 설정 사항은 다음 포스팅을 기약해보기로 하고 본 포스팅은 여기서 마무리를 짓도록 한다.

 

 

  1. 이런 허접한 자료가지고 복사방지 및 우클릭 방지는 먼지 ㅋㅋ
    • 너가 그렇게 싸움을 잘해?!
      옥땅으로 따라와!
      자료 잘 봤습니다 ^-^
    • 저는 꼼꼼히 작성해 주신 덕분에 오히려 이해가 잘 되어서 좋았는데요 예의가 없네요
    • 꼼꼼히 잘 써주셨는데 뭐가 불만인건지...... 도움 잘 되었습니다!! ㅇㅇ 저분은 그냥 컨씨 컨브이만 하시는분인듯.......
    • 허접한데 복사하려한건 뭣이여

  2. 비밀댓글입니다

  3. 정보감사합니다.

    덕분에 좋은거 알아가요 ㅎ

    그런데 윗분은 정보알아보러 들와서 복사해 가져가려 해놓고 저런말을 하다니 참 세상 몰상식한 분들 많다고 다시 느끼게 되네요
    • 도움이 되셨다니 감사합니다!!
      동일한 포스팅이 웹상에 있으면 안좋다길래 막아놨는데, 다시 풀어야하나 고민했었네요. :-)

  4. 자료 잘 봤습니다. 정리를 잘 하셨네요.

  5. 허접한 자료라고 하면서 우클릭 복사는 다해본 것 같은데 너무 막말러네요. 저는 도움 되었습니다. 고맙습니다.

  6. 고맙습니다.

    처음으로 구축하는데 큰도움 됬습니다.

    실례가 안된다면 블로그 내용을 참조해서

    제 블로그에 자료를 올려도 될까요?

    출처는 꼭 써놓도록 하겠습니다.
    • 오래전에 달아주신 댓글을 이제서야 확인이 되었네요 :-)
      제 포스팅을 참고삼아 올려주신 블로그는 잘 보았습니다. 너무 잘 정리해주셔서 고맙습니다. :-)

  7. 탄방역2번출구 2018.11.15 18:09
    감사합니다.

    설명이 너무 친절하게 잘 되었네요.

    개발하다가 한번에 된적이 드문데

    한번에 척척 잘되니까 기분이 좋네요

    다시 한번 감사 드립니다.^^


Private comment