아파치 톰캣 로고
아파치 톰캣을 설치해보자

자바 서블릿(Java Servlet)이나 자바 서버 페이지(Java Server Page, JSP)로 동적 웹 사이트(dynamic websites)를 구축하려면 웹 어플리케이션 서버(Web Application Server, WAS)가 필요합니다. WAS는 웹 서버(web server)가 전달해준 사용자의 요청을 받아서, 데이터베이스 서버와 통신하고 데이터를 가공하여 응답을 돌려주는 미들웨어 프로그램입니다.

WAS의 종류는 Nginx, OpenResty 등 다양합니다. 전 세계에서 가장 많이 사용하는 WAS는 아파치 톰캣(Apache Tomcat)입니다. 아파치 톰캣은 아파치 재단(Apache Foundation)에서 지원하는 무료 오픈 소스 WAS입니다. 이번 시간에는 아파치 톰캣을 설치하고 톰캣에서 환경설정하는 법을 살펴보겠습니다.

톰캣 정보

버전 차이점

아파치 톰캣에는 여러 버전이 있습니다. 서블릿 코드를 작성하거나 자바 8 버전 이상을 사용 또는 자바 엔터프라이즈 에디션(Java Enterprise Edition, JavaEE)를 구현한 버전을 설치하려면 톰캣 9 버전을 사용하면 됩니다. 자카르타 엔터프라이즈 에디션(Jakarta Enterprise Edition, JakartaEE)를 구현한 버전을 사용하려면 톰캣 10을 사용하면 됩니다. 자세한 지원 사항은 아파치 톰캣 버전 정보를 참조해 주세요.

파일 종류

다운로드할 수 있는 파일 종류에는 zip 파일과 installer 버전이 있습니다. zip 파일은 개발 환경에 적합합니다. zip 파일은 설치하지 않아도, 압축을 풀면 톰캣의 모든 파일이 있습니다. 그래서 톰캣의 전체 구성 및 라이브러리를 개발자가 원하는 대로 맞춤 설정할 수 있습니다. 반면, installer 버전은 실제 서비스 환경에 더 적합합니다. installer 버전은 컴퓨터를 껐다 켰을 때 톰캣이 자동으로 서비스 목록에 등록됩니다. 그래서 서버가 항상 작동해야 하는 서비스 환경에 알맞습니다. 또한, installer 버전은 설치할 때 포트 번호 및 관리자 로그인 정보를 지정할 수 있습니다. 그럼 실제로 아파치 톰캣을 다운로드해보겠습니다.

다운로드하기

다운로드를 하기 위해 아파치 톰캣 공식 홈페이지에 들어갑니다. 버전은 사용하고 계신 운영체제에 맞는 것을 선택하시면 됩니다. 여기서는 윈도우(Windows)의 톰캣 9 버전의 zip 파일을 다운로드하겠습니다.

아파치 톰캣 공식 홈페이지 다운로드
아파치 톰캣 공식 홈페이지 다운로드  - Snug Archive

다운로드한 폴더의 압축을 풀어줍니다. 압축 해제 시에는 톰캣의 경로가 모두 영문이 되도록 만들어 줍니다. 경로에 한글이 들어가면 오류가 발생할 수 있습니다. 압축을 풀면 다음과 같은 파일 목록이 나타납니다.

다운로드한 톰캣 파일 목록
다운로드한 톰캣 파일 목록  - Snug Archive

톰캣의 기본 폴더 구조와 각 폴더의 역할은 다음과 같습니다.

  • bin: 톰캣 서버를 시작하고 중지하는 데 사용하는 실행 관련 배치/스크립트 파일
  • conf: 톰캣 서버의 전반적인 설정을 담당하는 server.xml 파일과 각종 설정 파일
  • lib: 톰캣 서버가 실행되는 데 필요한 자바 라이브러리 파일
  • logs: 톰캣 서버의 실행 및 애플리케이션 로그를 기록하는 로그 파일
  • temp: 톰캣 서버가 실행되는 동안 생성되는 임시 파일
  • webapps: 톰캣 서버에서 실행되는 웹 애플리케이션들의 WAR 파일이나 압축을 푼 웹 애플리케이션 디렉토리
  • work: JSP 파일을 자바 서블릿 소스로 컴파일한 클래스 파일

다음으로는 톰캣을 사용하기 위해 환경설정을 하겠습니다.

환경설정하기

환경변수 설정하기

톰캣을 사용하려면 톰캣이 사용할 JDK의 경로를 톰캣에 알려주어야 합니다. 톰캣은 자바 코드를 실행하기 위해 JDK를 사용합니다. JDK를 사용하는 프로그램들은 JAVA_HOME이라는 환경변수에 JDK 폴더 위치를 지정합니다. JDK가 필요한 프로그램을 사용하려면 시스템 변수나 사용자 변수에 JAVA_HOME이라는 이름으로 C:\Program Files\Java\JDK-11 등과 같이 JDK의 폴더 경로를 지정해 주어야 합니다.

JAVA_HOME이라는 환경변수에 JDK 경로 지정하기
JAVA_HOME이라는 환경변수에 JDK 경로 지정하기  - Snug Archive

시스템의 환경변수는 [제어판] - [시스템 환경 변수 편집] - [환경 변수] (Windows)에서 할 수 있습니다. 자세한 환경변수 등록 방법은 JDK 다운로드 및 환경변수 설정 방법(JDK 1.8, JDK 11)를 참조해 주세요. 환경변수를 설정했다면 실제로 톰캣 서버가 잘 구동되는지 테스트해 보겠습니다.

서버 테스트하기

배치 파일 실행하기

다운로드한 톰캣의 bin 폴더에는 startup.bat 파일이 있습니다. startup.bat 파일을 실행하면 톰캣 서버를 구동할 수 있습니다.

톰캣 bin 폴더의 startup.bat 파일
톰캣 bin 폴더의 startup.bat 파일  - Snug Archive

배치 파일을 실행하면 ...org.apache.catalina.startup.Catalina.start?... 와 같은 로그 내용이 출력됩니다.

batch
21-Aug-2023 21:28:51.127 ?뚜빱 [main] org.apache.catalina.startup.Catalina.start ?퀺쯧媛 [8302] 諛由ъ큹 ?띵왓 ?씁딻?뽋쌻?큷톱??

톰캣 서버의 로그 내용이 위와 같이 깨져서 나타날 수 있습니다. 한글이 깨져서 보이는 이유는 윈도우의 콘솔 인코딩과 톰캣 콘솔의 인코딩이 서로 달라서 나타나는 현상입니다. 한글판 윈도우의 명령 프롬프트(cmd)는 기본적으로 CP949로 설정되어 있습니다. 한글 인코딩은 EUC-KRUTF-8로 나뉘는데, CP949EUC-KR의 확장 버전입니다. 반면, 톰캣 콘솔의 기본 인코딩은 UTF-8입니다. 웹 서버나 데이터베이스, php 등은 윈도우와 해당 프로그램의 콘솔 인코딩 방식을 동일하게 만들어줘야 정상적으로 문자가 출력됩니다.

cmd 또는 IDE의 내장 콘솔에서 한글이 깨지지 않게 하는 가장 안전한 방법은 톰캣 콘솔의 인코딩 방식을 UTF-8에서 EUC-KR로 변경하는 것입니다. 톰캣의 콘솔 인코딩을 변경하는 방법은 다음과 같습니다.

톰캣 콘솔 인코딩 변경하기
    1. 톰캣 디렉토리에서 conf 폴더의 logging.properties 파일을 연다.
    1. java.util.logging.ConsoleHandler.encoding의 값을 EUC-KR로 변경한다. (별다른 설정이 없었다면, UTF-8이 기본으로 설정되어 있음)

이밖에도 윈도우 콘솔의 인코딩 방식을 변경하는 방법도 있습니다. 윈도우 콘솔의 인코딩을 변경하는 방법은 다음과 같습니다.

윈도우 콘솔 인코딩 변경하기
일시 적용

cmd에서 사용하는 기본 콘솔 출력 인코딩을 확인하는 명령어는 chcp입니다. 여기서 콘솔 출력 인코딩을 UTF-8로 변경하려면 chcp 65001로 변경하면 됩니다. 다만, 이 방법은 cmd를 다시 껐다 재시작하면 이전 상태로 돌아갑니다. 레지스트리를 이용하면 cmd의 로그 출력 인코딩을 영구적으로 바꿀 수 있습니다.

전역 적용

레지스트리를 이용하면 윈도우 콘솔의 전체에 적용되는 인코딩 방식을 지정할 수 있습니다. 레지스트리를 이용해서 윈도우 콘솔의 인코딩 방식을 변경하는 방법은 다음과 같습니다.

  • 레지스트리(registry)의 HKEY_CURRENT_USER\Console에 키를 생성한다.
  • 생성된 키 폴더명을 Tomcat으로 변경한다.
  • cmd에서 REG ADD HKCU\Console\Tomcat /v CodePage /t REG_DWORD /d 65001을 실행한다.

위 과정을 거치면 윈도우 콘솔의 인코딩 방식이 EUC-KR에서 UTF-8로 변경됩니다.

로컬 호스트에서 확인하기

톰캣의 기본 포트 번호는 8080입니다. 다만, HTTP 리스너 포트(listener port)로 8080을 사용하는 오라클(Oracle) 데이터베이스와 톰캣을 함께 사용하는 경우, 프로그램이 서로 충돌할 수 있습니다. 그래서 톰캣의 포트 번호를 8081이나 8090 등 다른 번호로 지정하기도 합니다. 톰캣의 포트 번호를 변경하는 방법은 아래 '톰캣 포트 번호 변경하기'를 참조해 주세요. 여기서는 8080 포트로 확인해 보겠습니다.

startup.bat 파일을 실행한 후 http://localhost:8080에 들어가면 아래와 같이 톰캣의 메인 화면이 나타납니다.

'http://localhost:8080'의 톰캣 메인 화면
'http://localhost:8080'의 톰캣 메인 화면  - Snug Archive

로컬 호스트의 기본 주소인 https://127.0.0.1:8080 또는 http://[Ipv4 주소]:8080 등을 이용하셔도 됩니다.

IDE에 톰캣 서버 정보 등록하기

개발 시 톰캣 서버는 통합 개발 환경(Integrated Development Environments, IDEs)에서 사용합니다. 이번에는 이클립스 IDE 또는 STS(Spring Suite Tools)에 톰캣 서버 정보를 등록해 보겠습니다. STS는 이클립스(Eclipse)에 스프링 프레임워크 플러그인이 합쳐진 IDE입니다. STS 설치 및 환경설정 방법은 STS 다운로드 및 환경 설정하기(STS 3, STS 4)을 참조해 주세요.

톰캣 서버를 등록하기 위해 이클립스 하단에 있는 Servers 뷰에서 파란색 링크를 클릭해 주세요.

Servers 탭에서 서버 생성 링크 클릭하기
Servers 탭에서 서버 생성 링크 클릭하기  - Snug Archive

그러면 다음과 같이 서버를 등록하는 창이 나타납니다. 여기서 설치한 서버 버전을 지정하고 Finish 버튼을 눌러주세요.

톰캣 서버 등록하기
톰캣 서버 등록하기  - Snug Archive

Server 뷰에 다음과 같은 결과가 나타나면 서버가 잘 등록된 것입니다.

등록된 톰캣 서버
등록된 톰캣 서버  - Snug Archive

여기서 주황색 선으로 표시된 시작 버튼(초록색 재생 버튼 모양)을 클릭하면 서버가 구동됩니다. 버튼을 클릭한 후 Console 뷰에서 다음과 같은 서버 로그가 출력되면 서버가 정상적으로 작동하는 것입니다.

콘솔에 출력된 톰캣 서버 로그
콘솔에 출력된 톰캣 서버 로그  - Snug Archive

톰캣 서버 정보는 위 방법 외에도 다음 경로에서 등록할 수 있습니다.

  • [Window] - [Preferences] - [Server] - [Runtime Environments]
Window Preferences에서 톰캣 서버 정보 등록하기1
Window Preferences에서 톰캣 서버 정보 등록하기1  - Snug Archive
Window Preferences에서 톰캣 서버 정보 등록하기2
Window Preferences에서 톰캣 서버 정보 등록하기2  - Snug Archive
Window Preferences에서 톰캣 서버 정보 등록하기3
Window Preferences에서 톰캣 서버 정보 등록하기3  - Snug Archive

톰캣 서버 포트 번호 변경하기

톰캣 서버의 포트 번호를 변경하는 방법은 이클립스와 server.xml 파일에서 바꾸는 방법이 있습니다.

이클립스에서 톰캣 포트 번호 변경하기

    1. 이클립스에서 Servers 항목을 더블 클릭하여 Overview 화면을 연다.
    1. Overview 화면에서 오른쪽에 보이는 포트명(port name)별 포트 번호(port number)를 재설정한다.
이클립스에서 톰캣 포트 번호 변경하기
이클립스에서 톰캣 포트 번호 변경하기  - Snug Archive

server.xml에서 톰캣 포트 번호 변경하기

    1. Tomcat 설치 디렉토리로 이동합니다(예: C:/Program Files/Java/Apache...)
    1. conf 폴더로 이동한 후 server.xml 파일을 텍스트 편집기로 엽니다.
    1. 파일 내에서 다음과 같은 줄을 찾습니다.
xml
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
    1. port="8080" 부분의 포트 번호를 원하는 번호로 변경합니다.
    1. 파일을 저장하고 Tomcat 서버를 재시작합니다.

이렇게 하면 톰캣 서버의 포트 번호가 사용자가 지정한 포트 번호로 변경됩니다.

참고 문헌

...

©2023 Snug Archive. All rights reserved.

Contact me at snugarchive@gmail.com.