톰캣 2개 설치 후 세션 정보 (JSESSIONID) 가 꼬이는(?) 문제

Posted by taeho Tae-Ho
2012.04.18 15:48 Web/DB/Dev

윈도 서버의 IIS와는 달리 Java 가상머신 위에서 구동되는 톰캣은 하나의 머신에 여러개가 설치되어 각각 구동될 수 있다. 특히 윈도서버에 설치되는 이런 저런 솔루션들은 톰캣과 JDK를 내장하고 웹서비스를 제공하는 경우가 있다. 이런 경우 JDK와 톰캣이 2개 이상 동시에 구동된다.

톰캣은 기본적으로 TCP/8080 포트로 웹서비스를 제공한다. 두개를 설치하였다면 둘중 하나의 서비스 포트를 8080 이외의 다른 포트번호로 변경하여 주면 두개의 톰캣이 각기 다른 JDK를 이용해 구동되는 것이 가능하다.

하지만 여기에서 문제가 발생하는 경우가 있다. 각각 다른 웹서비스인 두개의 톰캣은 사용자 로그인(웹 서비스 로그인) 세션관리를 위해 JSESSIONID라는 세션쿠키(?)를 사용한다. 그런데 서로 다른 JDK에서 구동되는 두개의 톰캣이 이 JSESSIONID라는 세션쿠키를 공유한다라는 조금은 이해가 안되는 문제가 발생한다. (지금도 왜 이렇게 만들었는지 이해가 안감... -.-)

즉, A와 B 두개의 톰캣이 설치되어 있을 때 C라는 PC에서 웹서비스 A와 B에 각각 다른 사용자 계정으로 로그인하면 먼저 로그인한 A라는 톰캣의 웹서비스에 로그인한 세션이 풀려 다시 로그인 페이지로 연결되는 문제가 발생하는 것이다.

톰캣에 대한 지식이 부족한 나에게 이 문제는 조금은 커다란 벽(?)처럼 느껴졌다. 한회사에서 만든 두 제품이 각기 다른 버전의 JDK를 사용해야만 하도록 한 것이나, 두개의 전혀 다른 성격의 제품을 하나의 서버에 설치하지 않기로 했다(누구 맘대로???)는 개발팀 스스로의 결정(?)을 보며 참 답답함을 금치 않을 수가 없었다.

결국... 스스로 문제의 해결책을 찾아야 했다..(목마른 자가 우물을 파는 법~~)

방법은 톰캣의 환경설정에서 그리 어렵지 않게 찾을 수 있었다. 톰캣에서 사용하는 JSESSIONID의 이름을 바꿔주면 된다는 아주 단순하고 쉬운 방법이었는데, 톰캣 왕초보인 필자는 도대체 어디에서 어떤 방법으로 설정을 바꿔줘야하는지를 찾는데 시간이 좀 걸렸다.

그 방법을 간단히 소개하고 포스트를 마무리 한다.


1. 톰캣 실행파일 (tomcat6w.exe)를 찾아 실행한다.

톰캣이 설치된 경로의 bin 폴더에 가면 아래와 같이 tomcat6w.exe라는 실행파일을 찾을 수 있다. 이 파일을 찾아 실행한다.

2. Apache Tomcat 6 Properties 창이 실행되면 java 탭으로 이동하여  Java Options: 부분에 아래 적색 박스의 내용을 입력한다. 이때 JSESSIONID 의 이름을 적색박스의 내용 처럼 다른 이름으로 지정해 주면 된다. (오타 주의!!!!)

즉, SESSION_COOKIE_NAME과 SESSION_PARAMETER_NAME의 기본값이 JSESSIONID를 다른 이름으로 변경해주면 된다는 결론에 도달하게 된다. 두개의 톰캣을 운영중이라면 서비스에 등록된 톰캣의 설정을 변경해주는 것이 편하다 하겠다.


다음에는 두개의 톰캣을 서비스관리자에 등록하는 방법을 찾아야 할 듯 하다.



신고
이 댓글을 비밀 댓글로
    • 초보웹개발자
    • 2013.11.28 13:21 신고
    안녕하세요?
    JAVA기반 초보 웹 개발자입니다.
    현재 저희 회사에서도 JSESSIONID때문에 논의가 이어졌는데요,
    다름이 아니라, 솔루션에서 필요한 쿠키를 자체 생성하기 때문에 그 외의 쿠키인 JSESSIONID 쿠키를 삭제하란 지침이 내려왔습니다.
    혹시, 톰캣에서 말고, JSP에서 JSESSIONID가 생성 안되게 할 수 있는 방법은 없나요?
    알아본 바로는 저것을 없애면 session기능을 아예 못쓰게 된다는 말도 있는데, 검색을해도 당췌 나오질 않습니다. 관련 포스팅이나, 책자가 있다면 가르침 청해도 될런지요?
    • 에구..전 개발자는 아니고 취미삼아 조금씩 코딩하는 수준의 사람입니다.
      세션과 쿠키는 모두 웹페이지와 서버가 정보를 공유하고 서로에게 전달하기 위해 사용되는 것인데..
      한번 참고해보세요.
      https://groups.google.com/forum/#!topic/ksug/7Cn16nBjlrU