java

세션 클러스터링을 통한 공유시 스프링 @SessionAttributes 세션 데이터 주의점

초이짬 2016. 8. 18. 15:46
728x90

세션 클러스터링을 통해서 여러 서버에서 세션을 공통으로 사용할때 일반적으로 세션에 태우면 Serializable 인터페이스를 구현한다

구현하면 private static final long serialVersionUID = 3447676620891264448L; 이런식으로 serialVersionUID 를 생성해서 사용하게 되는데

스프링의 SessionAttributes 를 이용해서 사용될 데이터의 경우 이렇게 하고 사용하니

Manager [localhost#]: Unable to receive message through TCP channel 아래와 같은 메세지가 떨어진다.

해당 메시지에 대해선 대충 tcp 메시지를 수신 할 수 없다인데 SessionAttributes 를 통해서 화면단에서 데이터를 받는데 문제가 있는것

같았다

자바에서 Serializable 구현 할때 3가지 방법이 있는데

1. 디폴트 생성
2. 새로운 생성
3. 생성 안함(jvm 이 구동시 자동 생성)

이중 3번의 경우는 jvm 이 생성 해줄때 알고리즘이 복잡하고 역직렬화 시킬때 오류 발생 확률이 존재한다고 한다.

즉 3번은 쓰지 말라는거다 1번과 2번의 차이가 재밌는데 2번의 경유 유니크 하게 사용하는 건데 이게 세션 클러스터링을 통하고

SessionAttributes 을 이용하면 tcp 수신 문제가 나오는것이다.

이럴경우엔 1번으로 생성 하니 문제 없이 넘어갔다.. 정확한 원인은 잘 모르겟지만 참고 해야 겟다

1번의 디폴트 생성은

private static final long serialVersionUID = 1L; 요렁게 된다.


728x90