설문 조사 폼을 만들이 있어서 작업 중에 설문 조사의 질문과 선택 옵션의 수는 가변적이므로 Parameter 컬렉션을 사용했다. 작업을 마무리 한 후 정상적으로 동작하는 지 테스트를 한 후 서버에 배포했다.


그런데.


이른바 "내 컴퓨터에서는 잘 되는데요?" 문제가 발생했다.


그렇다. 테스트를 할 때는 아무리 많은 질문과 옵션을 추가해도 잘 동작하던 것이, 서버에스는 IndexOutOfBound 예외를 내면서 설문이 제대로 처리되지 않는 문제가 발생했다.


설문 조사를 올리시는 분께서는 "음.. 7개가 넘어가면 설문 내용이 없어져요."라고 했고, 나는 "그럴리가 없다! 그 부분에 있어서 내 로직이 틀릴 리가 없다!" 라고 했다.

무지하면 용감하다더니, 어찌도 그리 당당할 수 있었을까? 다시 생각하니 부끄럽다.


서버에 배포된 설문 조사 폼을 확인해 보니, 정말 7개 이상으로 질문을 추가하면 죽는 것이 아닌가? 똑같은 설문 내용으로 내 컴퓨터(개발 컴퓨터)에서 테스트를 하니 "내 컴퓨터에서는 잘 된다."..


이 때까지는 자바스크립트로 설문 내용을 추가하는 부분에 이상이 있을 것으로 예상했다. 그런데 역시 이때까지는 Integer의 범위를 벗어나는 것도 아니고, 왜 하필 7개일까? 라며 이상하게만 생각하고는 자바스크립트 부분을 확인해 봤지만, 역시 이상은 없었다.


그러다 문득 톰캣 이 자식이 방해 공작을 하는 것이 아닐까 하는 생각에

"tomcat post form input limit length"를 키워드로 검색하니 한 블로그 글이 검색됐다.

그리고 그 글에는 내 문제의 원인이 무엇인지 명확하게 나와있었다. 그렇다. 파라미터의 수를 제한하는 설정이 있었던 것이다.


테스트 서버의 톰캣 설정은 그 파라미터 갯수 제한이 무한대라서 파라미터 갯수의 제한이 있다는 걸 모르는 상태에서는 그런 문제가 발생할 지 전혀 예측할 수 없었고,

실서버에서는 maxParameterCount="50" 으로 50개의 제한이 있었다.


질문 하나를 구성하는 속성은 제목, 질문 타입, 옵션 5개로 7개였으니, 톰캣이 수용할 수 있는 최대 질문의 수는 7개가 되는 것이고, 그 수 이상이 되면 서버가 빵~ 예외를 터뜨린다. 여태까지 파일 업로드 크기의 제한이 있는 줄은 알았지만, 파라미터의 수에 제한이 있을 줄은 몰랐다. 폼 파라미터의 갯수 및 크기 제한을 하는 설정은 아래와 같다.


server.xml 파일


maxParamterCount 속성은 폼 파라미터의 최대 수이고, maxPostSize는 폼의 최대 전송 용량(byte)이다. 값을 -1로 하는 경우 제한을 두지 않도록 한다.



"내 컴퓨터에서는 잘 되는데요?"

"님 컴퓨터에서도 잘 돌아가요"가 될 수 있도록 내가 사용하는 것들을 잘 알고 써야겠다.

  1. moonsun_ 2014.05.24 23:17 신고

    그리고나서도 하루 정도를 더 고생시켰던.. 설문조사..

  2. 익명 2018.01.23 17:35

    비밀댓글입니다

Apache Commons HttpClient 라이브러리를 찾을 수가 없다!

자바 표준 라이브러리의 Http관련 클래스를 쓰려고 찾다보니 예제 소스가 아파치 프로젝트의 HttpClient를 사용하는게 대부분이었다.

패키지는 org.apache.commons. httpclient

그런데 아무리 찾아봐도 아파치 프로젝트 홈페이지에서는 저 패키지의 라이브러리를 찾을 수가 없다 -_ - 이곳저곳, 말도 안되는 라이브러리 받아서 내용 보고.. 한참을 돌아다니다가 HttpComponents 라이브러리 소개 내용을 보다가 눈에 걸리적 거리는게 있었는데...

HttpComponents Client is a successor of and replacement for Commons HttpClient 3.x. Users of Commons HttpClient are strongly encouraged to upgrade.


"HttpComponents Client는 Commons HttpClient 3.x 의 대체입니다. Commons HttpClient 유저들은 업그레이드 할 것을 강력히 추천합니다." 

네 그렇습니다. commons의 HttpClientHttpComponents
대체 되었습니다.

근데 왜 HttpComponents 홈페이지의 예제 코드는 아직도 commons를 사용하고 있냐고... 괜히 이것 때문이 더 헷갈렸다.


혹시나 HttpClient 라이브러리를 아파치 홈페이지에서 찾고 계신 분은
Http Components 라이브러리를 받으시면 되겠습니다.
그리고 commons를 찾고 계시는 분들을 위해 링크를 걸어둡니다.

'마음이 뛰다' 카테고리의 다른 글

인생은 재밌다.  (0) 2011.09.10
막막 룰루랄라.  (0) 2011.08.26
롬업 후 APN 설정  (0) 2011.08.23
DHD LeeDroid 롬업, 커널업 완료  (0) 2011.08.22
왜 대체 NullPointerException이 뜨는거야!  (0) 2011.08.22
아빡치 에잇퉤퉤페 Apache Http Client  (0) 2011.08.18

+ Recent posts