본문 바로가기
IT 공부/자바와 웹 애플리케이션

[인텔리제이] - 톰캣 실행과 설정 관리 및 프로젝트 배포 환경

by exdus3156 2024. 1. 1.

1. 인텔리제이 톰캣 실행

스프링부트처럼 웹 서버 로직이 내장된 프로젝트 빌드가 아닌 이상, 대부분의 자바 웹 애플리케이션은 웹 애플리케이션 서버(WAS) 프로그램에 의해 수행된다. 따라서 IDE 개발을 할 때도 톰캣과 같은 WAS를 단독으로 설치한 후에, 이를 인텔리제이나 이클립스와 같은 IDE가 빌려 사용할 수 있도록 설정해야 한다.

new 프로젝트 생성 시 로컬 컴퓨터에 설치한 tomcat server를 지정하면 위와 같이 설정 화면에서 설정을 조작할 수 있다.

사용하고 있는 WAS는 어떤 프로그램이며 어디에 설치된 프로그램을 사용하는지, 서버를 실행할 때 어떤 웹 브라우저를 디폴트로 사용할지, JVM(java.exe)을 실행할 때의 옵션 지정 등을 조정할 수 있다.

주의할 점은 이 설정 자체는 사실 톰캣 설치 파일의 [conf] 디렉토리에 있는 각종 xml 파일을 수정해서도 설정을 조정할 수 있다는 점인데, 그러나 인텔리제이나 이클립스의 IDE는 xml 파일을 수정하는 식으로 설정을 변경하는 것이 아니라, IDE 환경에서 단독으로 설정한다는 점이다.

따라서 위 설정대로 톰캣을 IDE에서 실행하는 것과, 실제 로컬의 bin 폴더 내 톰캣 파일을 실행하는 것은 완전히 다른 결과를 가져온다. 즉, 인텔리제이에서의 설정이 실제 톰캣에 그대로 적용되지 않는다. 완전히 별개다. 이클립스나 인텔리제이는 톰캣의 실행 프로그램만 빌려와 사용할 뿐이다.

 

 

2. 프로젝트 배포 환경

배포(deployment)란, 실제 운영 환경에 프로젝트를 올려 서비스가 가능하도록 만드는 것이다.

내가 코딩한 결과를 실제로 구동해보려면 배포되어야 한다. 특히 WAS 프로그램에 적재되어 실행되어야 하는 환경에서는 배포에 주의를 기울이는 것이 필수다. 실행 가능한 jar 파일과는 달리, 톰캣에 적재하는 과정을 거쳐야 하기 때문이다. 

자신이 사용하고 있는 빌드 툴이 있을 것이다. 보통 메이븐이나 그레이들이다. 이것으로 본인이 직접 콘솔에서 프로젝트를 빌드해도 된다. 하지만 만약 그렇게 빌드한다면 패키징 태스크가 war여야 하고, war 파일을 직접 톰캣이 설치된 디렉토리에 배치하거나, 톰캣의 설정 파일을 수정해 war 위치를 알려줘야 한다. 

솔직히 귀찮은 일이다. 당연히 인텔리제이 같은 IDE는 그 과정을 전부 직접 실행해준다. 

 

WAS(tomcat)의 배포(deployment) 설정 창을 보면 배포를 어떻게 할 것인지 설정할 수 있다.

최종 빌드 완료된 파일을 압축해서 만든 war 파일을 톰캣의 [webapps] 폴더에 위치시키면 톰캣 프로그램이 자동으로 압축을 풀고 서비스를 등록한다. 그래서 메이븐이나 그레이들이 빌드한 war 파일(demo-1.0-SNAPSHOT.war)을 톰캣 설치 폴더의 [webapps]에 자동으로 배치해준다. 이것이 위 그림의 두 번째 항목의 의미다.

그런데 이 방식은 성능적으로 꽤 번거로운 일이다. 수정이 생기면 매번 톰캣을 재실행해야 한다는 점 때문이다. 톰캣을 재실행해야 war 압축 파일을 감지(detect)하고 이를 압축 해제할 수 있기 때문이다. 굳이 문제가 되는 것은 아니지만... 좀 번거롭다.

차라리 war를 빌드할 때, war 파일로 배포하고 끝내는 것이 아니라, war 압축을 해체(unpack)해서 이를 톰캣이 바로 사용할 수 있도록 하는 것이 빠르다. 이것이 첫 번째 항목(exploded)의 의미다. 이렇게 설정하라.

이렇게 배포하면 톰캣을 계속 실행하고 있어도 변경이 즉시 적용될 수 있다. 어차피 톰캣이라는 서블릿 컨테이너는 사용자의 요청이 들어올 때, 그 요청 url경로에 매핑된 서블릿을 찾아서 실행하는 프로그램이다. 따라서 매번 재실행할 필요 없이, 파일을 수정하기만 해도 충분하다.

(exploded) 배포는 그레이들(혹은 메이븐)을 통해 프로젝트를 빌드하고 war 파일을 언팩(unpack)해서 배포해버린다. 이때 unpacked war 파일은 프로젝트의 [build] - [libs] - [exploded] 안에 있다. IDE의 톰캣은 이맇게 배포된 파일을 자동 감지한다.

물론 배포될 서블릿 코드는 반드시 컴파일된 코드여야 하지, 소스코드 상태로 배포해서는 안 될 것이다. 당연한 말 같지만, IDE와 같은 편의성이 높은 환경에서 작업하다보면 소스코드가 바로바로 실행되는 느낌을 주기 때문에 헷갈릴 수도 있다. 그러나 명심하자. 자바는 스크립팅 언어가 아니다. 컴파일해야 한다.

코드를 변경해도 그것은 어디까지나 소스 코드의 변경이다. 반드시 컴파일해야 한다. 단순히 소스코드를 수정하는 것으로는 안 된다. 소스코드 수정 후 그레이들을 통해 재빌드를 하고 재배포해야 한다.

 

Deploy All을 통해 톰캣이 실행되는 와중에도 재배포를 할 수 있다. 물론 이런 옵션이 가능한 이유는 배포 환경 자체를 exploded 로 설정한 덕분에, 빌드 후 war 패키지를 압축 해제해주기 때문이다.