ToDoCode | 객체 직렬화 이유

호떡·2023년 6월 23일
0

엔티티 생성하다가 객체 직렬화라는 것을 알게 되었다

@Entity
@Table(name = "member")
public class Member implements Serializable {
 	// PK
    @Id
    @GeneratedValue
    @Column(name = "member_id")
    private Long id;
    
    ...
}

직렬화란?

Java 직렬화는 객체를 바이트 스트림으로 변환하거나, 반대로 바이트 스트림을 객체로 변환하는 기술이다. 직렬화를 통해 객체를 파일에 저장하거나 네트워크를 통해 전송할 수 있다. Serializable 인터페이스를 구현한 클래스의 인스턴스는 직렬화 가능한 객체로 간주된다.


직렬화를 왜 하는거지

일반적으로 JPA(Entity) 클래스는 직렬화 가능해야 하는 경우가 많지는 않지만, 예를 들어 세션 클러스터링, 캐시 저장, 분산 시스템 등과 같은 상황에서 직렬화가 필요할 수 있다.


세션 클러스터링, 캐시 저장, 분산 시스템은 뭐지

세션 클러스터링, 캐시 저장, 분산 시스템은 대규모 트래픽 대응 시 유용하다. 이러한 상황에서는 데이터의 공유와 확장성이 중요하다.

Chat GPT
0. 객체의 전송
직렬화된 객체를 네트워크를 통해 다른 시스템으로 전송할 수 있습니다.
네트워크를 통해 객체를 전송하려면 객체를 직렬화하여 바이트 스트림으로 변환한 후,
수신 측에서는 해당 바이트 스트림을 역직렬화하여 객체로 복원할 수 있습니다.

1. 세션 클러스터링 
세션 클러스터링은 웹 애플리케이션의 세션 데이터를 여러 서버에 분산하여 저장하고 관리하는 방식입니다.
대규모 트래픽에서는 단일 서버에 세션 데이터를 저장하면 세션 서버의 부하가 증가하고,
장애 시에 세션 데이터의 손실이 발생할 수 있습니다.
세션 클러스터링은 이러한 문제를 해결하기 위해 여러 서버 간에 세션 데이터를 공유하고
분산 저장하여 성능과 가용성을 향상시킵니다.

2. 캐시 저장
직렬화된 객체는 메모리나 디스크에 저장될 수 있으므로,
동일한 객체를 반복적으로 생성할 필요 없이 저장된 직렬화된 객체를 사용하여 객체를 복원할 수 있습니다.
따라서 캐시는 데이터를 미리 저장하여 반복적인 요청에 대한 응답 시간을 줄이고,
시스템 부하를 감소시키는 데 사용됩니다.
대규모 트래픽에서는 반복적으로 동일한 데이터를 조회하는 경우가 많아서
데이터베이스에 매번 접근하지 않고 캐시에서 데이터를 가져오면 성능이 향상됩니다.
캐시 저장은 Redis와 같은 인메모리 데이터베이스를 사용하여 구현할 수 있으며,
Redis는 높은 성능과 확장성을 제공하여 대규모 트래픽에 효과적으로 대응할 수 있습니다.

3. 분산 시스템
분산 시스템은 여러 서버와 네트워크로 구성된 시스템으로,
대규모 트래픽을 처리하고 확장성을 갖추기 위해 사용됩니다.
객체를 직렬화하여 네트워크 상에서 다른 컴퓨터 노드로 전송하고 실행할 수 있습니다.
분산 시스템은 데이터를 여러 노드에 분산하여 저장하고 처리하는 방식으로 작동합니다.
이를 통해 부하 분산, 고가용성, 장애 허용성 등의 이점을 얻을 수 있습니다.
대규모 트래픽 대응 시에는 분산 시스템을 구축하여 서버의 부하를 분산시키고,
데이터의 고가용성을 확보하여 전체 시스템의 성능과 안정성을 향상시킬 수 있습니다.

0개의 댓글