EHCache를 사용하면 서버간에 instance를 replication해서 동일하게 유지하는 경우가 있다.
이럴 경우 걱정되는게 클래스가 변경될 때.
모든 서버를 동시에 배포할 수는 없다. 분명 일시적으로 어떤 서버는 새로운코드를, 어떤 서버는 기존코드를 사용하고 있을 것이다.
이렇게 되면 순간적으로 동일 Class의 definition이 달라질 수 있다!!
이름은 같으나 property가 다른 두 class간에 serDes가 가능할까???
결론은 가능하긴 한 것 같다.
다만 주의할 필요가 있을 뿐...
자세한 내용은 여기 링크에서 : http://moi.vonos.net/java/serialization/
요약하자면,
Java의 SerDes는 property명을 저장해놓은 뒤에 property명이 같은 애들을 복사해주는 방식으로 동작한다.
단, 값만 복사한다! 즉 초기화 시점의 추가작업은 알아서 해야한다!
serialize할 때 있던 속성이 deserialize할 때 사라졌다?
ㄴ 무시한다.
serialize할 때 없던 속성이 deserialize 할 때 생겼다?
ㄴ 무시한다. 애초에 serialize할 때 값을 지정안해둔 속성들은 저장도 안되며 당연히 deserialize 시점에 값이 없는 속성과 serialize 시점에 존재하지 않았던 속성은 동일하게 무시된다.
꽤 그럴듯하다... 어차피 동일해야 하는 클래스가 일시적으로 틀어지는 경우에는 말이다...
다만 클래스를 버전관리하면서 deserialize할 때 버전에 따른 이런저런 처리를 하고 싶으면...
클래스 이름을 버저닝해라!!
흠...근데 이게 틀린 정보면 어떻게하지? ㄷㄷㄷ... Java spec상의 Serialization/Deserialization 정의를 보면 좋겠는데...못찾겠다.
..아... 여기 링크(http://docs.oracle.com/javase/6/docs/platform/serialization/spec/serialTOC.html)에 있다... 근데 너무 길다 ㅠ.ㅠ
'SW-PRODUCT > 개발' 카테고리의 다른 글
[링크] NoSQL: Past, Present, Future (CAP, Eric Brewer) (0) | 2014.06.13 |
---|---|
[링크] LINE 소셜 네트워크 서비스의 아키텍쳐 (0) | 2014.06.13 |
쿠키런 서버 사례: NoSQL + AWS AutoScale (0) | 2014.06.05 |
멀티쓰래드 Lock-free, C++, CAS from NDC (0) | 2014.06.02 |
Executors.newFixedThreadPool(nSize) (0) | 2014.01.09 |