안녕하세요. SaaS 전환지원센터입니다.

무중단 배포를 적용하더라도 로그인 세션이 끊기는 원인은 크게 두 가지입니다. 

첫째는 세션 정보가 개별 애플리케이션 서버의 로컬 메모리(In-Memory)에 저장되어 있어 서버가 재기동될 때 휘발되는 경우이고, 둘째는 배포 전후로 프론트엔드 정적 파일(JS, CSS)의 경로가 변경되어 사용자가 페이지 내에서 요청을 보낼 때 404 에러가 발생하기 때문입니다.


이를 해결하기 위해 개발 및 운영팀이 조치해야 할 실무적인 단계는 다음과 같습니다.

가장 먼저 데이터베이스나 외부 캐시 서버를 활용한 '세션 저장소의 분리(Stateless 아키텍처)'가 구현되어 있는지 확인해야 합니다. 

로그인 세션이나 사용자 인증 토큰(JWT 등) 정보를 개별 WAS 서버의 메모리에 저장하지 않고, 별도의 외부 Redis나 Memcached 같은 메모리 기반 저장소로 이관해야 합니다. 

이렇게 세션 저장소를 공용으로 구성해 두면, 배포 과정에서 특정 서버 인스턴스가 꺼지고 새 버전의 서버가 켜지더라도 로그인 상태가 끊김 없이 그대로 유지됩니다.


둘째로, 배포 전환 시점에 프론트엔드 에셋의 '하위 호환성 및 이중 배포(Double Deploy)' 정책을 준수해야 합니다. 

구버전의 웹 화면을 띄워놓고 작업 중이던 사용자는 배포가 완료되는 순간 신버전 서버로 API 요청을 보내게 됩니다. 

이때 프론트엔드의 빌드 파일명(예: main.abcdef.js 등 해시값 포함)이 달라져 간헐적인 에셋 로딩 오류가 발생할 수 있습니다. 

따라서 배포 파이프라인(CI/CD) 구성 시, 기존 구버전 정적 파일들을 오브젝트 스토리지(S3 등)에서 최소 수일간은 삭제하지 않고 유지하여, 

구버전 화면을 보던 사용자도 에러 없이 작업을 마칠 수 있도록 지원해야 합니다.


마지막으로 배포 당일 실무 체크리스트로서 '그레이스풀 셧다운(Graceful Shutdown) 설정'을 검토해야 합니다. 

무중단 배포 시 구버전 서버를 끌 때, 진행 중인 데이터 처리(예: 보고서 생성, 대용량 파일 업로드 등)가 갑자기 중단되면 안 됩니다. 

서버 종료 신호(SIGTERM)를 받았을 때 최소 30초~1분 동안은 새로운 연결 요청만 차단하고,

 이미 처리 중이던 기존 사용자들의 요청은 안전하게 끝마친 뒤 프로세스가 완전히 종료되도록 톰캣(Tomcat)이나 Node.js 등 엔진 설정을 반드시 확인하고 배포를 진행하시기 바랍니다.


추가로 궁금하신 사항이나 더 자세한 안내가 필요하실 경우, 

언제든 문의해 주시기 바랍니다. 

감사합니다.