Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- try-catch-finally
- closeable
- execution engine
- 람다표현식
- jetbrain
- webflux
- Class Loader
- intelij
- jvm
- try-with-resources
- tcp
- circuitbreaker
- 동작방식
- optional
- resilience4j
- Runtime data area
- try-catch
- springboot
- feign
- 코딩테스트
- AutoCloseable
- 4-way-handshake
- java
- 날짜쿼리
- zipWith
- wagon-ssh
- n+1
- Kotlin
- Hotspot VM
- GC
Archives
- Today
- Total
JuBin's personal study blog
[JAVA] 직렬화(Serialize)란? 본문
반응형
직렬화란?
직렬화(Serialize)
- 자바 시스템 내부에서 사용되는 Object 또는 Data를 외부의 자바 시스템에서도 사용할 수 있도록 byte 형태로 데이터를 변환하는 기술.
- JVM(Java Virtual Machine 이하 JVM)의 메모리에 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술
- java.io.Serializable 인터페이스를 상속받은 객체는 직렬화 할 수 있다.
- 직렬화 포맷은 여러 포맷이 존재한다 Ex) json, xml, csv
- 자바 직렬화는 상당히 타입의 엄격하다
역직렬화(Deserialize)
- byte로 변환된 Data를 원래대로 Object나 Data로 변환하는 기술을 역직렬화(Deserialize)라고 부릅니다.
- 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM으로 상주시키는 형태.
직렬화를 사용하는 이유?
- 복잡한 데이터 구조의 클래스의 객체라도 직렬화 기본 조건만 지키면 큰 작업 없이 바로 직렬화, 역직렬화가 가능합니다.
- 데이터 타입이 자동으로 맞춰지기 때문에 관련 부분을 큰 신경을 쓰지 않아도 됩니다.
어디에 사용되는가?
- Servlet Session ex) session을 DB에 저장할 경우 직렬화하여 저장
- Cache(Redis, Memcached 등 사용)
- Java RMI(Remote Method Invocation) 원격 시스템간 메세지 교환을 위해 사용
사용시 유의할점
- 외부 저장소로 저장되는 데이터는 짧은 만료시간의 데이터를 제외하고 자바 직렬화를 사용을 지양합니다.
- 역직렬화시 반드시 예외가 생긴다는 것을 생각하고 개발합니다.
- 자주 변경되는 비즈니스적인 데이터를 자바 직렬화을 사용하지 않습니다.
- 긴 만료 시간을 가지는 데이터는 JSON 등 다른 포맷을 사용하여 저장합니다.
반응형
'JAVA' 카테고리의 다른 글
[JAVA] JVM 메모리 구조 정리 - 2 (0) | 2021.03.23 |
---|---|
[JAVA] MapStruct 사용하기(Object Mapping Library) (0) | 2021.03.19 |
Maven Wrapper란(mvnw) (0) | 2021.01.05 |
[Java] ObjectMapper란 (0) | 2020.12.23 |
[JVM] JVM의 Memory영역 ( Stack & Heap&Static ) (0) | 2020.11.10 |