문제는 다음과 같았다.

사용자가 로그인 화면에서 로그인을 요청하게 되면 사용자 인증을 한 후 사용자 정보를 Request 객체의 Session 영역에 넣어 놓고, 이후 다시 초기 페이지 요청시 사용자 정보가 있으면 바로 본 화면으로 넘어가는 방식으로 코드를 구현하였다.

하지만 로그인 이후 자동으로 본 화면 이동시 사용자 정보를 읽지 못하는 현상을 보였다.

문제는 iBATIS에서 얻어진 결과 객체를 바로 Session에 집어 넣는 실수로 인한 것으로 보여졌다. 아마도 iBATIS의 결과 객체의 레퍼런스를 잡고 있다가 일정 시간 이후에 메모리에서 지우는 이유 때문일 것이다.

그리하여 다음과 같이 기존 코드를 변경하였다.

기존
request.getSession().setAttribute("user", user);

변경
request.getSession().setAttribute("user", new HashMap(user));

iBATIS 결과 객체의 Life Cycle이 어떤 식으로 동작하는지 찾아봐야 할 것 같다.