Spring IOException: EOFException 해결



Tomcat 실행 시 "IOException while loading persisted sessions: java.io.EOFException" 오류가 발생할 때 해결 방법입니다.



오류 메시지


SEVERE: IOException while loading persisted sessions: java.io.EOFException
SEVERE: Exception loading sessions from persistent storage


원인


Tomcat이 이전 세션을 직렬화하여 저장한 파일(SESSIONS.ser)이 손상되었거나, 불완전하게 저장되어 발생합니다.



해결 방법 1: 이클립스에서 Work Directory 정리



  1. Servers 뷰에서 해당 Tomcat 서버 우클릭

  2. "Clean Tomcat Work Directory..." 선택

  3. 서버 재시작



해결 방법 2: 수동으로 파일 삭제


# 이클립스 워크스페이스에서
[workspace]/.metadata/.plugins/org.eclipse.wst.server.core/tmp[N]/work/

# 또는 Tomcat 설치 경로에서
[TOMCAT_HOME]/work/Catalina/localhost/[프로젝트명]/


해결 방법 3: SESSIONS.ser 파일만 삭제


# 세션 파일 찾기
find . -name "SESSIONS.ser" -type f

# 삭제
find . -name "SESSIONS.ser" -type f -delete


영구적 해결: 세션 저장 비활성화


context.xml에 다음 설정 추가:


<!-- 세션을 파일로 저장하지 않음 -->
<Manager pathname="" />


context.xml 위치



  • Tomcat 전역: [TOMCAT_HOME]/conf/context.xml

  • 애플리케이션별: [프로젝트]/META-INF/context.xml

  • 이클립스: Servers 프로젝트 내 context.xml



관련 설정 옵션


<Context>
<!-- 세션 저장 완전 비활성화 -->
<Manager pathname="" />

<!-- 또는 커스텀 설정 -->
<Manager className="org.apache.catalina.session.StandardManager"
pathname=""
maxActiveSessions="100" />
</Context>


이클립스 추가 정리 방법



  1. Project → Clean 실행

  2. 서버 더블클릭 → Publishing 탭 → "Automatically publish when resources change" 확인

  3. 서버 우클릭 → Clean 실행



예방 방법



  • 개발 환경에서는 세션 저장 비활성화 권장

  • 서버 종료 시 정상 종료(Stop) 사용

  • 세션에 직렬화 불가능한 객체 저장 주의