본문 바로가기

Programming/과거포스팅

XmlSerializer

XmlSerializer란? 얼핏봐서 xml 직렬화같은데..

직렬화가 무었인지 검색하다 보니 지식인에 좋은 글이 있더군요. 

http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040201&docId=147155720&qb=7ZSE66Gc6re4656Y67CNIOyngeugrO2ZlA==&enc=utf8&section=kin&rank=1&search_sort=0&spq=0&pid=RfVwmU5Y7uZssbwJXLwsssssssC-497407&sid=USswd3JvLDcAAFOw9IM 


직렬화를 하는 이유는 메모리에 일시적으로 객체를 보관하는게 아니라... 현재 메모리에 로드되어서 존재하는 특정 객체의 상태를 저장해서 잠깐 파일로 저장을 한다거나.. 아니면 네트워크로 전송하기 위해서 인스턴스(객체)를 일련의 바이트 스트림으로 변환하는 "규칙"이 필요한데, 이게 바로 직렬화입니다.

클라이언트 프로그램 쪽에서는 별로 쓸 일이 없지만 서버같은데에서는 많이 씁니다.

웹 서버같은 경우 사용자가 로그인하면 서버는 이 정보를 보관해두고 있다가 예를 들자면 30분이 지나도 클라이언트가 접속을 안하면 로그아웃 시키고 관련 정보를 삭제해버리죠... 

그런데 사용자가 굉장히 많이 들러붙을 경우에 일정 시간동안 접속을 안하는 사람들의 정보(로그인 상태를 저장한 인스턴스가 있겠죠)를 그대로 메모리에 올려두는 것 보다는 파일로 저장해 놓으면 그만큼 메모리를 더 확보할 수가 있겠죠.. (물론 그 사용자가 다시 로그인을 했으면 직렬화해서 파일 형태로 보관된 정보를 역직렬화해서 다시 메모리에 올려야 합니다.)

중요한 것은 어떤 "상태"를 나타내는 인스턴스가 메모리에 있고, 이걸 다른 형태로 변환해야 하는데 이 변환 과정을 자동화한게 바로 직렬화/역직렬화입니다. 이 기술이 없으면 개발자가 일일이 인스턴스의 필드들을 바이트 스트림으로 써넣고 또 바이트 스트림을 읽어도 객체를 초기화하고 값을 설정해주는 번거롭고 드러운 일을 해야 합니다...

하지만 직렬화/역직렬화를 언어 자체에서 지원해주니 손이 덜가는 셈입니다...

지금 분석중인 소스에 있어서 뭐하는 놈인가 싶었는데 메모리에 있는 놈들을 xml로 직렬화를 시켜주는 놈이겠군요..