직렬화 , 역직렬화

J-USER·2021년 8월 22일
0

JAVA

목록 보기
1/5
post-thumbnail

직렬화 , 역직렬화 이게 뭐람?

  • 직렬화
    시스템 내부에서 사용되는 객체(Object) 또는 데이터(Data)를
    외부의 시스템에서도 사용할 수 있도록 바이트(Byte) 형태로 데이터 변환하는 기술

    JVM(Java Virtual Machine)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환

  • 역직렬화
    바이트로 변환된 데이터를 다시 객체로 변환하는 기술을 이야기한다.

    직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태

왜 사용할까?

👍 장점

  • 자바 직렬화 형태의 데이터 교환은 자바 시스템 간의 데이터 교환을 위해서 존재하며 복잡한 데이터 구조의 클래스의 객체라도 직렬화 기본 조건만 지키면 큰 작업 없이 바로 직렬화, 역직렬화가 가능

  • 데이터 타입이 자동으로 맞춰지기 때문에 관련 부분을 큰 신경을 쓰지 않아도 됨.

👎 단점

  • 역직렬화 시 클래스 구조 변경 문제가 발생하여 java.io.InvalidClassException을 발생

  • 해결 방법으로는 SUID(serialVersionUID)를 사용하여 모델의 버전 간의 호환성을 유지해야 한다.

🙋 아니 그러면 자바 쓰는 모든 곳에서 사용하는건가요?
🤖 서블릿세션, 캐시, RMI 에서만 씀
🤯 그게 뭔데...?
🤖 To be....continue...

어디에서? 서블릿 세션,캐시, 자바 RMI

  • 서블릿 세션 (Servlet Session)
    세션을 서블릿 메모리 위에서 운용한다면 직렬화를 필요로 하지 않지만, 파일로 저장하거나 세션 클러스터링, DB를 저장하는 옵션 등을 선택하게 되면 세션 자체가 직렬화가 되어 저장되어 전달됩니다.

  • 캐시 (Cache)
    Ehcache, Redis, Memcached 라이브러리 시스템을 많이 사용됩니다.

  • 자바 RMI(Remote Method Invocation)
    원격 시스템 간의 메시지 교환을 위해서 사용하는 자바에서 지원하는 기술.

언제?!

주로 JVM의 메모리에만 상주돼있는 객체 데이터를 그대로 영속화(영구저장, 전송)가 필요할때 사용됩니다.
이는 시스템이 종료 되더라도 없어지지 않는 장점을 가질 수 있고, 네트워크로 전송또한 가능해지기 때문입니다.

예시

  • 직렬화.
    (조건)

(방법)

  • 역직렬화.
    (조건)
    - 직렬화 대상이 된 객체의 클래스가 클래스 패스에 존재해야 하며 import 되어 있어야 한다.
    - 중요한 점은 직렬화와 역직렬화를 진행하는 시스템이 서로 다를 수 있다는 것을 반드시 고려해야 한다.
    - 자바 직렬화 대상 객체는 동일한 serialVersionUID를 가지고 있어야 한다.

(방법)

profile
호기심많은 개발자

0개의 댓글