Tomcat·nginx 배포·재기동
6. 연습 문제
문제 1. 배포 순서
Tomcat 에 shop.war 를 /shop 경로로 배포할 때 실행할 명령을 순서대로 쓰세요. 백업과 캐시 정리를 포함합니다.
cp webapps/shop.war backup/shop.war.$(date +%Y%m%d_%H%M%S)
bin/shutdown.sh && sleep 5
rm -rf webapps/shop webapps/shop.war work/Catalina/localhost/shop
cp /tmp/shop.war webapps/shop.war
bin/startup.sh
tail -f logs/catalina.out | grep -m1 'Server startup in'마지막 줄의 grep -m1 은 첫 일치에서 종료해 기동 완료를 기다리는 용도입니다.
문제 2. reload 와 restart
nginx 설정에서 proxy_read_timeout 만 바꿨습니다. reload 와 restart 중 무엇을 쓰고 왜 그런지 설명하세요.
reload 입니다. 설정 값 변경은 마스터가 다시 읽고 워커를 교체하는 것으로 충분하며, 진행 중인 연결이 끊기지 않습니다. restart 는 모든 연결을 끊고 프로세스를 새로 띄우므로 바이너리 교체 같은 경우에만 씁니다.
문제 3. 502 원인 찾기
사용자가 502 를 본다고 합니다. 확인 명령 세 가지를 쓰세요.
systemctl is-active tomcat
ss -ltnp | grep 8080
tail -n 20 /var/log/nginx/myapp.error.logTomcat 이 내려갔거나 8080 을 안 듣고 있으면 502 입니다. 에러 로그의 Connection refused 가 그 증거입니다. 07 네트워크 레슨에서 ss 를 더 다룹니다.
문제 4. 인스턴스 하나 빼기
8080·8081 두 인스턴스 중 8081 을 배포하려 합니다. nginx 설정에서 8081 을 잠시 제외하고 반영하는 명령을 쓰세요.
sed -i 's/server 127.0.0.1:8081;/server 127.0.0.1:8081 down;/' /etc/nginx/conf.d/myapp.conf
nginx -t && systemctl reload nginx배포 후 down 을 제거하고 다시 reload 합니다. 02 레슨의 sed 가 설정 파일 편집에 그대로 쓰입니다.
문제 5. 스크립트 안전장치
tomcat_deploy.sh 에서 DRY_RUN, have_systemd, wait_health 세 가지가 각각 어떤 사고를 막는지 한 줄씩 쓰세요.
DRY_RUN 은 실행 전 경로와 순서를 눈으로 확인해 엉뚱한 폴더를 지우는 사고를 막습니다. have_systemd 는 systemctl 과 catalina.sh 를 섞어 써서 재시작 루프에 빠지는 사고를 막습니다. wait_health 는 프로세스만 뜨고 앱이 안 뜬 상태를 배포 완료로 착각하는 사고를 막습니다.