직렬화된 인스턴스 대신 직렬화 프록시 사용을 검토하라 Serializable 인터페이스를 구현하는 순간 생성자와는 별개로 readObject 메서드로 인해 바이트 스트림을 매개변수로 받는 또 하나의 생성자가 생긴다고 하였습니다. 이러한 방법으로 인해 버그와 보안 문제가 발생할 수 있습니다. 하지만 직렬화 프록시 패턴을 사용하여 어느정도 위험을 해소할 수 있습니다. 💡 직렬화 프록시 패턴 바깥 클래스의 논리적 상태를 정밀하게 표현하는 중첩 클래스를 설계해 private static 으로 선언하는 중접 클래스를 만드는데 이 클래스가 바깥 클래스의 직렬화 프록시를 수행합니다. 특징 중첩 클래스의 생성자는 단 하나여야 합니다. 생성자는 바깥 클래스를 매개변수로 받아야 합니다. 생성자의 역할은 단순히 인수로 넘어..
readObject 메서드는 방어적으로 작성하라 readObject 메서드는 실질적으로 또 다른 public 생성자로 볼 수 있습니다. 따라서 readObject 메서드에도 충분한 주의를 기울여야 합니다. 그렇지 않으면 불변식을 깨트릴 수 있습니다. 그렇기 때문에 readObject 메서드 또한 하나의 생성자라 생각하고 방어적으로 작성해야 합니다. readObject 메서드는 매개변수로 바이트 스트림을 받는 생성자라 할 수 있는데 보통의 경우 바이트 스트림은 정상적으로 생성된 인스턴스를 직렬화해 만들어집니다. 하지만 불변식을 깨트릴 목적으로 생성한 바이트 스트림을 건낸 경우 문제가 발생합니다. 💡 불변식을 깨트릴 수 잇는 코드 아래 코드는 Serializable 인터페이스를 선언하고 생성자에서 방어적 복..
Serialization을 구현할지는 신중히 결정하라 어떤 객체를 직렬화하기 위해서는 클래스 선언부에 implements Serializble만 덧붙이면 됩니다. 너무 쉽게 적용할 수 있지만 사실 큰 책임이 따릅니다. 💡 Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵습니다. 직렬화를 하게되면 직렬화된 바이트 스트림 형태도 하나의 공개 API가 됩니다. 그래서 이 직렬화된 클래스가 널리 퍼진다면 그 바이트 스트림도 영원히 지원해야 하는 것입니다. 커스텀 직렬화 형태를 설계하지 않고 자바의 기본 방식을 사용한다면 직렬화 형태는 기존 구현 방식에 영원히 묶여버립니다. 이렇게 된다면 기본 직렬화 형태에서는 클래스의 private, package-private 인스턴스 필드들마저 API로 공개되..
자바 직렬화의 대안을 찾으라 💡직렬화(Serialization)란? 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미합니다. 자바의 I/O 처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체 또는 데이터를 외부 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술을 직렬화라고 부릅니다. 시스템적으로는 JVM 메모리에 상주하고 있는(힙 또는 스택) 객체 데이터를 바이트 형태로 변환하는 기술입니다. 직렬화에서는 java.io.ObjectOutputStream 패키지가 사용되며, 스트림에 객체를 출력하는 역할을 하며 ObjectOutputStream 객체의 writeObject 메서드는 객체를 직렬화한 후에 스트림으로 보내는 기능을 합니다. 💡역직렬화(Deseri..
- Total
- Today
- Yesterday
- spring boot excel download paging
- redis 대기열 구현
- transactional outbox pattern spring boot
- spring boot 엑셀 다운로드
- microkernel architecture
- pipeline architecture
- 레이어드 아키텍처란
- polling publisher spring boot
- @ControllerAdvice
- pipe and filter architecture
- JDK Dynamic Proxy와 CGLIB의 차이
- 공간 기반 아키텍처
- spring boot redis 대기열 구현
- spring boot redisson destributed lock
- 서비스 기반 아키텍처
- java ThreadLocal
- space based architecture
- transactional outbox pattern
- spring boot excel download oom
- java userThread와 DaemonThread
- spring boot redisson 분산락 구현
- spring boot redisson sorted set
- service based architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- 람다 표현식
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- 자바 백엔드 개발자 추천 도서
- redis sorted set으로 대기열 구현
- redis sorted set
- spring boot poi excel download
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |