ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 마샬링 + 직렬화 + 코드베이스 + 캐시 개념
    Etc 2016. 11. 17. 13:42
    마샬링

     

    - 한 객체의 메모리에서의 표현방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정이다

     

    - 데이터를 컴퓨터 프로그램의 서로 다른 부분 간에 혹은 한 프로그램에서 다른 프로그램으로 이동해야 할 때도 사용된다.

     

     

    직렬화

    - 직렬화(스트림으로)란 객체를 데이터 스트림으로 만드는 것을 뜻한다. 즉, 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다.

     

    직렬화 적용 분야
    직렬화가 적용되는 분야는 구체적으로 다음과 같다.

    파일 저장소 (File storage) :  프로그램 실행 중에 생성된 데이터를 영구 저장소(파일 시스템) 등에 저장한 후, 이후에 프로그램이 다시 실행되었을 때 저장된 데이터를 메로리 상에 객체(혹은 구조체) 형태로 복구해 사용한다.

    네트워크 통신 (Network communication)네크워크 상에 떨어져 있는 프로그램 간에 데이터를 주고 받기 위해 데이터를 직렬화한 후, 패킷(packet)에 담아 전송한다.

    데이터베이스 (Database)복잡한 형태의 객체를 데이터베이스에 저장할 때 직렬화한 문자열 형태로 테이블의 컬럼에 저장하기도 한다.

    웹 환경 (Web environment) : 웹 서버에서 브라우저(클라이언트)로 구조화된 데이터를 전송할 때 직렬화 한 후 -JSON 형식 등- 전달하는 방식이 점차 많이 사용되고 있다.

    직렬화가 불가능한 경우
    1) 직렬화가 불가능한 객체를 포함한 경우
    2) 하위 클래스는 직렬화를 구혀녀했지만 상위 클래스에서는 직렬화가 구현되지 않은 상태에서 상위 클래스의 생성자에 매개변수가 있는 경우


    직렬화 불가능한 클래스들
    1) 이벤트 어댑터
    2) 이미지 필터
    3) AWT 클래스
    4) beans
    5) Socket
    6) URLConnection

     

     

    마샬링 직렬화 차이점

    - 자바에서는 다른 언어와 다르게 차이점이 있는데 그것은 바로 상태와 코드베이스를 기록하는다는것!!

     

     

     

    코드베이스? 검색해보았다...

     

    - 코드가 어디있는가에 대한 베이스 위치를 지정하기 위한 기록을 말한다.

    - CLASSID 에 해당하는 객체가 존재하지 않을 경우에 해당 위치에서 객체를 찾아준다.






    자바 직렬화는 언제(when) 어디서(where) 사용되나요?                 (출처: http://woowabros.github.io/experience/2017/10/17/java-serialize.html)

    JVM의 메모리에서만 상주되어있는 객체 데이터를 그대로 영속화(Persistence)가 필요할 때 사용됩니다. 시스템이 종료되더라도 없어지지 않는 장점을 가지며 영속화된 데이터이기 때문에 네트워크로 전송도 가능합니다. 
    그리고 필요할 때 직렬화된 객체 데이터를 가져와서 역직렬 화하여 객체를 바로 사용할 수 있게 됩니다. 
    그런 특성을 살린 자바 직렬화는 많은 곳에서 이용됩니다. 많이 사용하는 부분 몇 개만 이야기해보겠습니다.

    • 서블릿 세션 (Servlet Session)
      서블릿 기반의 WAS(톰캣, 웹로직 등)들은 대부분 세션의 자바 직렬화를 지원하고 있습니다.
      물론 단순히 세션을 서블릿 메모리 위에서 운용한다면 직렬화를 필요로 하지 않지만, 파일로 저장하거나 세션 클러스터링, DB를 저장하는 옵션 등을 선택하게 되면 세션 자체가 직렬화가 되어 저장되어 전달됩니다. 
      (그래서 세션에 필요한 객체는 java.io.Serializable 인터페이스를 구현(implements) 해두는 것을 추천합니다.) 
      참고로 위 내용은 서블릿 스펙에서는 직접 기술한 내용이 아니기 때문에 구현한 WAS 마다 동작은 달라질 수 있습니다.

    • 캐시 (Cache)
      자바 시스템에서 퍼포먼스를 위해 캐시(EhcacheRedisMemcached, …) 라이브러리를 시스템을 많이 이용하게 됩니다.
      자바 시스템을 개발하다 보면 상당수의 클래스가 만들어지게 됩니다. 예를 들면 DB를 조회한 후 가져온 데이터 객체 같은 경우 실시간 형태로 요구하는 데이터가 아니라면 메모리, 외부 저장소, 파일 등을 저장소를 이용해서 데이터 객체를 저장한 후 동일한 요청이 오면 DB를 다시 요청하는 것이 아니라 저장된 객체를 찾아서 응답하게 하는 형태를 보통 캐시를 사용한다고 합니다.
      캐시를 이용하면 DB에 대한 리소스를 절약할 수 있기 때문에 많은 시스템에서 자주 활용됩니다. (사실 이렇게 간단하진 않습니다만 간단하게 설명했습니다.) 
      이렇게 캐시 할 부분을 자바 직렬화된 데이터를 저장해서 사용됩니다. 물론 자바 직렬 화만 이용해서만 캐시를 저장하지 않지만 가장 간편하기 때문에 많이 사용됩니다.

     


    'Etc' 카테고리의 다른 글

    아파치 prefork, worker 란?  (0) 2017.01.04
    스프링 Responsebody 인코딩 변경  (0) 2016.11.22
    URL에 jsessionid 붙을때  (0) 2016.11.16
    스택 흐름도  (0) 2016.11.03
    기능별 분리시 (설계생각 패턴 바꾸기.  (0) 2016.09.25
Designed by Tistory.