1. Redis의 데이터 저장 방식

Redis는 메모리 기반의 Key-Value 저장소이며, 내부적으로는 Byte 배열(Binary 데이터) 형태로 데이터를 저장합니다.

따라서 자바 객체, 파이썬 객체, JSON 같은 언어/프레임워크의 데이터 구조를 그대로 Redis에 넣을 수 없습니다.
→ 이를 직렬화(Serialization) 해서 바이트 스트림으로 변환해야 합니다.



---

2. 직렬화가 필요한 이유

1. 데이터 호환성

애플리케이션 메모리에 존재하는 객체는 JVM이나 특정 언어 런타임 내부 구조에 종속적입니다.

Redis는 언어에 상관없이 데이터를 저장해야 하므로 언어에 독립적인 형태(바이트 배열) 로 변환해야 저장·조회가 가능합니다.



2. 데이터 전송 가능성

Redis와 애플리케이션은 네트워크를 통해 통신합니다.

네트워크 전송은 문자열/바이트 단위로만 이루어지므로, 객체를 그대로 보낼 수 없고 직렬화 후 전송해야 합니다.



3. 데이터 일관성

직렬화를 통해 동일한 규격으로 데이터를 저장해야, 다른 서버/클라이언트에서 역직렬화를 했을 때 동일한 객체 구조를 복원할 수 있습니다.

예: Jackson(JSON), Kryo, Protobuf, JDK 직렬화 등 표준 포맷 사용.





---

3. 역직렬화가 필요한 이유

Redis에서 꺼내오는 데이터는 결국 바이트 배열입니다.

이 데이터를 그대로 사용하면 무의미하므로, 애플리케이션에서 필요한 객체 형태(예: Java DTO, Python dict) 로 변환해야 합니다.
→ 이를 역직렬화(Deserialization) 라고 합니다.



---

4. 직렬화/역직렬화 시 고려할 점

성능: JDK 기본 직렬화는 느리고 무겁기 때문에, 보통 JSON, Protobuf, Kryo 등을 많이 사용합니다.

호환성: JSON은 가독성과 언어 간 호환성이 좋지만 용량이 큼, Protobuf는 용량이 작고 빠르지만 스키마 관리 필요.

일관성: 동일한 직렬화/역직렬화 방식을 클라이언트 전역에서 사용해야 데이터 깨짐 방지.



---

✅ 정리 한 줄 답변
Redis는 내부적으로 데이터를 바이트 배열로 저장·전송하기 때문에, 애플리케이션의 객체를 Redis에 넣거나 가져올 때 직렬화(객체 → 바이트) 와 역직렬화(바이트 → 객체) 과정이 반드시 필요합니다.

LIST

+ Recent posts