직렬화와 역직렬화란 무엇일까?
직렬화란, 데이터를 전송 가능한 포맷(Binary 등)으로 변환하는 작업을 말하고, 역직렬화는 반대로 전송 가능한 포맷의 데이터를 사용할 수 있는 데이터로 변환하는 작업으로 말할 수 있다.
Spring에서 직렬화란, 객체 데이터를 전송 가능한 포맷 (Json 등) 으로 변환하는 작업을 말하고 역직렬화는 전송 포맷의 데이터를 객체 데이터로 변환하는 작업이라고 할 수 있겠다.
그렇다면 객체 데이터를 직렬화 하는 과정이 왜 필요할까? 데이터에는 integer, byte, long.. 등등 기본형 타입이 있고, String 과 같이 참조형 타입의 데이터가 있다. 기본형 타입의 데이터는 스택에 직접 적재되어 있는 그대로의 데이터이기 때문에 전송할 때의 문제가 없지만, 참조형 데이터 타입은 데이터에 저장된 값이 메모리 상의 주소 값이다. 주소 값을 전송하게 되면 전송받은 메모리 상의 주소 값을 참조하기에, 전혀 쓸데없는 값이 되어버린다. 따라서 이런 데이터들을 value 를 가지는 데이터 포맷으로 변환하여 전송해야 하는데, 대표적인 예로 Spring 에서 클라이언트와 통신할 때 객체를 Json 포맷으로 직렬화 하고, Json 포맷의 데이터를 객체로 역직렬화 하는 것을 들 수 있다.
Java 에서 직렬화는 데이터를 메모리에 저장하거나 네트워크를 통해 전송 할 수 있도록 객체를 바이트 스트림으로 변환하는 작업을 뜻한다. 직렬화된 데이터는 나중에 다시 객체로 역직렬화 되어 원래 상태와 동일하게 동작한다. Java 의 직렬화는 Java 고유의 기술로, 자바 언어에 종속적인 데이터들(컬렉션, 커스텀 타입)도 파싱 없이 메모리에 영속시키거나 프로세스 간 통신에 사용할 수 있도록 변환해주는 자바 최적화된 기술이다. 근래에는 범용적인 Json 이 대안으 점점 많이 사용되는 추세이기 때문에, Java 직렬화는 사용하는 상황에 맞게 적절히 사용해야 한다.
'Study' 카테고리의 다른 글
스레드(Thread) (0) | 2024.05.01 |
---|---|
계산기 (0) | 2024.04.28 |
트랜잭션 격리 수준(Isolation Level)과 동시성 제어 (2) | 2024.04.26 |
트랜잭션의 개념과 사용 (0) | 2024.04.11 |
Spring PSA (0) | 2024.02.29 |