hola 개발

외부 톰캣 war 파일 실행 시 자바스크립트의 한글, 특수 문자 등이 깨질 때 본문

회고록/문제 해결

외부 톰캣 war 파일 실행 시 자바스크립트의 한글, 특수 문자 등이 깨질 때

hola. 2025. 7. 16. 18:00

작업이 끝나서 war 파일 서버에 배포할 일만 남았었습니다.

현재 제가 쓰는 IDE의 이클립스에 등록한 외부 톰캣을 등록해놨고, 서버에도 같은 버전의 톰캣이 설치되어 있었습니다.

이제 war만 서버에 배포하면 되겠다 싶지만, 혹시나 해서 로컬에 있는 다른 톰캣에서 war 파일을 실행해봤습니다.

역시!! 문제가 생겼습니다.

특정 자바스크립트 파일의 특정 문자들이 깨져  브라우져에서 화면이 제대로 보이지 않는다는 것입니다.

 

[ 문제의 원인과 해결 방법 ] 

- 문제

엇..? 이클립스에서 실행할 때는 문제가 없었는데 말입니다.. 

그래서 브라우져의 콘솔 창을 보니 특정 파일을 전송 받지 못하고 있음을 파악했습니다.

link 태그로 전송이 되어야 하는데 전송이 안되는데 확인해보니 전송할 URL에 특수문자가 포함되어 있었습니다. 

찾아보니 HTTP URL의 쿼리 문자열(?key=value)에는 RFC 7230 등의 규약상 사용할 수 없는 문자가 있습니다.

톰캣은 기본적으로 이러한 "위험하거나 표준에 위배된 문자"를 차단하고 400 오류를 발생시킨다고 합니다.

 

- 해결 방법

relaxedQueryChars 를 사용해서 해결 했습니다.

relaxedQueryChars란 톰캣이 기본적으로 허용하지 않는 특수 문자 중에서, 개발자가 특정 문자를 예외적으로 허용하도록 지정 할 수 있는 설정입니다. 

 

저의 경우 톰캣 config/server.xml에서 <Connector> 태그에  relaxedQueryChars="[]{}|^|&quot;" 추가하였습니다.

주의할 점은 톰캣 8.5.31 이상, 9.x 이상에서 적용 가능하며 너무 많은 문자를 허용하면 보안 취약점에 노출 위험이 있다는 것입니다.

 

- 문제

sever.xml을 수정 후 다시 실행해보니 URL문제는 해결되었으나, 여전히 한글 등 특수 문자가 깨져 있었습니다...

그래서 흠... 인코딩의 문제인 것 같아서 찾아보니 

, Windows CMD에서 톰캣을 실행하면 JVM의 기본 인코딩이 MS949 또는 EUC-KR일 수 있고, 이 상태에서 UTF-8로 저장된 JS 파일을 읽으면 한글이나 특수문자가 깨져 보인다고 합니다.

 

- 해결 방법

bin에 새로운 텍스트 파일을 생성합니다. 

생성한 텍스트 파일에 아래의  내용을 작성 후 저장합니다. 

 

@echo off
set JAVA_OPTS=-Dfile.encoding=UTF-8

 

저장된 텍스트 파일을 setenv.bat 으로 변경합니다. (확장자까지 변경 하면 됩니다)

 

이렇게 하고 톰캣을 재시작하니 이제 정상적으로 작동하게 되었습니다. 

 

[ 정리 ]

오늘 느낀 점은 원인을 파악하고 역추적하는 방법이 중요함을 느꼈습니다. console 창에서 나타나는 문제를 파악하고 그 문제로부터 원인을 곰곰히 생각하고 하나씩 풀어나가는 방법을 배웠습니다.