👉 SpringBoot 실행 시, 정상 작동은 되는데 초반에 오류 로그가 종종 뜨면서 지나감
2023-07-26T14:53:41.427+09:00 ERROR 15140 --- [ restartedMain] o.a.catalina.session.StandardManager : Exception loading sessions from persistent storage
java.io.StreamCorruptedException: invalid type code: 00
➡️위와 같은 오류로, 프로그램 자체는 문제 없이 실행됨
👉 해당 오류에 대해 조사
java.io.StreamCorruptedException: invalid type code: 00
오류는 Java에서 객체를 직렬화하거나 역직렬화할 때 발생하는 문제
- 여기서 invalid type code: 00는 스트림이 손상되었거나 예상하지 못한 형태라는 것을 나타냄
- 이 문제는 Tomcat이 웹 애플리케이션의 세션 상태를 저장하고 불러오는 과정에서 일어남
- 웹 애플리케이션의 세션 데이터가 톰캣이 기대하는 형식과 다른 경우에 발생할 수 있음
- Tomcat의 SESSIONS.ser 파일이 손상되었거나 예상하지 못한 데이터로 채워졌을 때 이 오류가 발생
- 이 파일은 Tomcat이 애플리케이션 세션 상태를 저장하는데 사용
👉 Tomcat이란?
- Tomcat은 웹 애플리케이션 서버(Web Application Server) 중 하나
- 웹 애플리케이션 서버(WAS)는 Java 서버 페이지 기술을 실행하여 동적인 웹 페이지를 생성하고 관리하는 데 사용
- 동적인 웹 페이지는 사용자의 요청에 따라 서버 측에서 동적으로 생성되거나 변경되는 웹 페이지로, 사용자와 상호작용하며 내용이 동적으로 바뀜
- Tomcat은 Apache Software Foundation에서 개발하고 유지보수하는 오픈 소스 소프트웨어
- 이는 Java 서버 페이지를 지원하기 위한 서블릿 컨테이너를 구현하고 있음
- 서블릿 컨테이너는 웹 서버와 함께 동작하여 클라이언트로부터 요청이 오면 해당 요청을 처리하고 동적인 컨텐츠를 생성하는 역할을 담당
- Spring에서는 Tomcat을 직접 적용해야 했지만, SpringBoot에서는 내장 Tomcat을 제공
- SpringBoot 프로젝트 생성 시에 추가하는 의존성 중
implementation 'org.springframework.boot:spring-boot-starter-web
에 포함되어 있음
👉 오류 해결 방법
- Tomcat의 파일 지우기
- Tomcat 서버를 멈추고, work 디렉토리와 SESSIONS.ser 파일을 찾음
- 일반적으로 이 파일은 ${CATALINA_BASE}/work/Catalina/localhost/ 경로에 위치
- 이 디렉토리를 삭제하거나 SESSIONS.ser 파일을 삭제
- Tomcat 서버를 재시작
- ➡️Tomcat은 새 세션 저장소를 생성하고 SESSIONS.ser 파일도 새로 만들게 됨
- ➡️이 방법은 세션 정보를 잃게 되므로, 애플리케이션이 이전 세션 상태에 의존하지 않는 경우에만 사용해야 함
- Tomcat에서 세션 지속성 끄기
- Tomcat의 context.xml 파일에서
<Manager>
태그를 찾아 pathname 속성을 ""로 설정
<Manager pathname="" />
- ➡️Tomcat의 세션 지속성을 끄면, 애플리케이션 재시작 또는 서버 재시작시에 세션 상태가 유지되지 않음
- SpringBoot의 경우
- 내장된 Tomcat의 context.xml 파일을 직접 수정하는 것은 어렵기 때문에 설정 파일에서 수정
👉 세션 지속성이란?
- 세션 지속성(persistent session)은 웹 서버가 다운되거나 재시작될 때 사용자 세션 정보를 유지하는 기능
- 이를 통해 서버가 재시작된 후에도 사용자가 이전의 세션을 계속 사용할 수 있음
- 세션 지속성을 '끈다'는 것은 이러한 세션 정보의 유지를 비활성화하는 것을 의미
- 즉, 서버가 다운되거나 재시작되면 모든 사용자 세션 정보가 손실
- 이 기능은 개발 과정에서 테스트나 디버깅을 쉽게 하기 위해 사용되곤 함
- 그러나, 서비스의 안정성이나 사용자 경험을 위해서는 일반적으로 세션 지속성이 활성화되어 있는 것이 좋음