WEBBOOK CHAPTER

WAR 배포, 밤에 깨지 않게: 9장 webapps 복사는 가장 단순하지만 원자적으로 한다

9장 webapps 복사는 가장 단순하지만 원자적으로 한다

Tomcat Host의 appBase가 기본 webapps이고 autoDeploy가 켜져 있으면 WAR가 들어왔을 때 배포될 수 있다. 큰 WAR를 네트워크에서 webapps/releaseportal.war로 직접 복사하면 Tomcat이 전송 중 파일을 관찰할 위험이 있다.


# 배포 서버의 staging 영역
install -m 0640 releaseportal.war /srv/tomcat/releaseportal/staging/releaseportal.war.tmp
sha256sum /srv/tomcat/releaseportal/staging/releaseportal.war.tmp
jar tf /srv/tomcat/releaseportal/staging/releaseportal.war.tmp >/dev/null

# 같은 파일 시스템 안에서 최종 이름으로 이동
mv /srv/tomcat/releaseportal/staging/releaseportal.war.tmp 
   /srv/tomcat/releaseportal/webapps/releaseportal.war

실제 소유자와 경로는 서버 정책에 맞춘다. mv의 원자성은 같은 파일 시스템에서 이름을 바꿀 때 기대할 수 있다. 다른 mount 사이 이동은 복사와 삭제가 될 수 있다. exploded directory가 이전 배포에서 남아 있으면 새 WAR와 어느 쪽이 정본인지 혼란이 생긴다. unpackWARs, autoDeploy, deployOnStartup 정책을 명시한다.

WAR 이름은 context path가 된다. releaseportal.war/releaseportal, ROOT.war/다. root 배포를 위해 애플리케이션 코드를 root path에 고정하지 말고 reverse proxy routing과 context 설정을 검토한다.