홈 › 웹 서버 › 02 / 8

Tomcat server.xml 설정

섹션 7진행 0 / 8

5. 자주 하는 실수 (Tip)

❌ 실수 1: 고치고 재시작을 안 한다

server.xml 은 핫 리로드되지 않습니다. 저장만 하고 반영됐다고 착각하는 경우가 많습니다. 반드시 재시작 후 접속 확인까지 합니다.

❌ 실수 2: AJP 커넥터를 그대로 둔다

쓰지 않는 AJP 포트를 열어 두면 Ghostcat 류 취약점에 그대로 노출됩니다. 사용하지 않으면 지우고, 꼭 필요하면 로컬 전용으로 좁힙니다.

❌ 실수 3: appBase 를 상대경로로 둔다

상대경로는 Tomcat 을 어느 위치에서 기동하느냐에 따라 배포 폴더가 달라집니다. $BASE 기준 절대경로로 고정해야 업그레이드 후에도 앱이 그대로 보입니다.

❌ 실수 4: 종료 포트를 외부에 연다

방화벽에서 종료 포트를 막지 않으면 문자열 하나로 서비스를 내릴 수 있습니다. 04 레슨의 포트 차단·비밀 명령 설정과 함께 적용합니다.

❌ 실수 5: maxPostSize 를 무제한에 가깝게 키운다

업로드 편의를 위해 값을 과도하게 키우면 큰 요청 여러 개로 메모리를 소진시키는 공격에 취약해집니다. 실제 업무에 필요한 최대 크기만 허용합니다.

❌ 실수 6: URIEncoding 을 안 맞춘다

URIEncoding 을 빠뜨리면 한글 쿼리 파라미터가 서버마다 다르게 깨질 수 있습니다. URIEncoding="UTF-8" 을 항상 명시합니다.

❌ 실수 7: RemoteIpValve 없이 nginx 뒤에 둔다

RemoteIpValve 가 없으면 접근 로그의 IP 가 전부 nginx 주소로 찍혀 장애·침해 조사가 불가능해집니다. 리버스 프록시를 쓰는 순간 필수로 넣습니다.

❌ 실수 8: internalProxies 를 너무 넓게 잡는다

정규식을 .* 처럼 느슨하게 두면 외부 요청자가 X-Forwarded-For 를 위조해 IP 를 속일 수 있습니다. nginx 가 실제로 위치한 대역만 허용합니다.

❌ 실수 9: 검증 없이 바로 배포한다

XML 태그 하나만 안 닫혀도 Tomcat 은 기동을 거부합니다. sed 로 고친 뒤에는 항상 문법 검증이나 시험 기동을 먼저 거칩니다.

❌ 실수 10: AccessLogValve directory 를 상대경로로 둔다

상대경로로 두면 로그가 생각지 못한 위치에 쌓여 모니터링·백업(압축·삭제) 대상에서 빠질 수 있습니다. $BASE/logs 처럼 절대경로로 고정합니다.