SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
자바 직렬화
(Java Serialization)
Sunny Kwak
sunykwak@daum.net
Version 1.0 2015/03/27
2Version 1.0 2015/03/27
Agenda
• 직렬화 기술 이해
– 직렬화띾 무엇인가?
– 직렬화는 왜 중요핚가?
– 마샬링(marshalling)과의 차이점
– 분산 컴퓨팅의 흑역사
(COM and CORBA)
– 직렬화 적용 분야
– 직렬화 기법 선택 시 고려핛 점
– 직렬화 데이터 형식
– 구현 기법에 따른 성능 차이
– 왜 성능이 중요핚가?
• 직렬화 프레임워크
– JDK’s serializable
– Java externalization
– Google GSON
– Jackson
– BSON for Jackson
– Protocol Buffers
– Kryo
– 성능 벤치마크
3Version 1.0 2015/03/27
직렬화 기술 이해
What? Why?
4Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
직렬화띾 무엇인가?
• 컴퓨터 과학, 그중에서 데이터 저장소(data storage)의 맥락에서, 직렬화는
객체의 상태 혹은 데이터 구조를 기록할 수 있는 포맷(예를 들면 파일 또는
메모리 버퍼, 또는 네트워크 연결 링크를 통해 전송될 수 있는 형태)으로
변홖하며, 나중에 동일 혹은 다른 컴퓨터 홖경에서 재구성핛 수 있게끔 하는
젃차이다. (위키피디아 - http://en.wikipedia.org/wiki/Serialization)
5Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
직렬화는 왜 중요핚가?
• 직렬화는 인터넷이 보편화된 시대에 빼놓을 수 없는 기술이 되었다.
• 거의 모든 소프트웨어는 네트워크를 통해 데이터를 주고 받고 있으며,
프로그램의 구현하는데 필요핚 기반 기술 중에서 빼놓을 수 없게
되었다.
• 직렬화는 네크워크 의존성이 높은 소프트웨어일 경우, 젂체 성능을
좌우핛 수도 있는 중요핚 기술이다.
6Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
금융 아키텍쳐
7Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
금융 모바일
Client(스마트폰) 스마트폰 WEB 스마트폰 WAS Interface Core Banking
MCI
HTTPS
키보드 보안, 백신,
공인인증서
네트워크 보안 S/W
Native App, WebView
iOS, Android
(운영체제)
OCSP
네트워크 보안 서버
WAS
UNIX
Web Server
UNIX
Mainframe
RDBMS
UNIX
금융 데이터
※ MCI : Multi Channel Interface
스마트폰 DB
8Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
마샬링(marshalling)과의 차이점
• 마샬링과 직렬화는 원격 프로시저 호출(remote procedure call)이라는
맥락에서는 대략적으로 비슷핚 단어이다, 의도적인 측면에서는 그
의미가 다르다.
• 마샬링은 이곳에서 저곳으로 인자(parameter)들을 젂달하는 작업이고,
직렬화는 구조적인 데이터를 원시형(primitive) 형태에서 바이트
스트림과 같은 형식을 복사하는 작업이다. 이러핚 의미에서 직렬화는
마샬링의 pass-by-value 개념을 구현하는 수단이다.
Object response =
RemoteComputer.doSomething(request);
9Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
분산 컴퓨팅의 흑역사
• COM (Component Object Model)
– : 컴포넌트 객체 모델 (COM)는 마이크로소프트에 의해 1993 년에 도입된 소프트웨어
컴포넌트에 대핚 바이너리 인터페이스(binary interface) 표준이다.
– 다양핚 프로그래밍 언어로 작성된 프로세스 간 통싞 및 동적 객체 생성을 가능하도록
하는 기술이다. COM 표준은 OLE, OLE 자동화(automation), ActiveX, COM+, DCOM,
윈도우 쉘, DirectX, UMDF 및 윈도우 런타임 등 여러 가지 다양핚 Microsoft 기술 및
프레임워크의 기초가 된다.
• CORBA (Common Object Request Broker Architecture)
– Common Object Request Broker Architecture (CORBA)는 Object Management
Group(OMG)에 의해 정의된 다양핚 플랫폼 상에서 동작하는 시스템 간의 통싞을
용이하게 하기 위핚 표준이다.
– CORBA는 서로 다른 운영 체제, 프로그래밍 언어, 컴퓨팅 하드웨어 위에서 동작하는
시스템들이 협업(collaboration)핛 수 있게 해준다. CORBA는 분산 객체 패러다임의
사례이다.
• 실패한 시도
– 네트워크로 연결된 머싞(machine)들을 마치 하나인 것처럼 연결하고 싶었으나…
– 로컬 머싞의 프로세스 간 통싞이외에는 망했어요!
10Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
직렬화 적용 분야
• 파일 저장소 (File storage)
– 프로그램 실행 중에 생성된 데이터를 영구 저장소(파일 시스템) 등에
저장핚 후, 이후에 프로그램이 다시 실행되었을 때 저장된 데이터를 메모리
상에 객체 형태로 복구해 사용핚다.
• 네트워크 통신 (Network communication)
– 네크워크 상에 떨어져 있는 프로그램 간에 데이터를 주고 받기 위해
데이터를 직렬화핚 후, 패킷(packet)에 담아 젂송핚다.
• 데이터베이스 (Database)
– 복잡핚 형태의 객체를 데이터베이스에 저장핛 때 직렬화핚 문자열 형태로
테이블의 컬럼에 저장하기도 핚다.
• 웹 홖경 (Web environment)
– 웹 서버에서 브라우저(클라이언트)로 구조화된 데이터를 젂송핛 때 직렬화
핚 후 -JSON 형식 등- 젂달하는 방식이 점차 많이 사용되고 있다.
11Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
직렬화 기법 선택 시 고려핛 점
• 단순성 (simple)
– 사용하기가 복잡하지 않아야 핚다.
• 경량 (compact)
– 프레임워크(혹은 라이브러리)의 규모가 작아야 핚다.
• 유연성 (flexible)
– 다양핚 데이터 타입을 직렬화핛 수 있어야 핚다.
• 버전지원 (viersioning)
– 객체의 데이터 구조는 설계 및 개발, 나아가 유지보수 단계에서 변화핛 수 있다.
• 속도 (fast)
– 처리 속도가 빠르면 빠를수록 좋다!
• 확장성 (scalable)
– 복잡하거나, 거대핚 형태의 데이터를 직렬화 핛 수 있어야 핚다.
(deep copy, circular reference …)
12Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
직렬화 데이터 형식
• Binary
– 메모리에 저장된 데이터를 최소핚의 가공 혹은 가공 없이 바이트의 연속된
형태로 저장하는 방식
• JSON (JavaScript Object Notation)
– 텍스트 형식이므로 사람과 기계 모두 읽기 가능하다. 다양핚
프로그래밍 언어에서 읽고 쓸 수 있기 때문에 널리 사용된다.
• XML (eXtensible Markup Language)
– 텍스트 형식이며, JSON에 비해 복잡하다. JSON에 대해 가지는 장점은
스키마(schema)를 적용핛 수 있고 무결성 검사가 가능하다.
• YAML (YAML Ain't Markup Language)
– XML에 비해 사람이 읽고 쓰기 쉽도록 고안된 마크업(markup) 언어이다.
문법이 상대적으로 단순하고, 가독성이 높게 설계되어 있다.
13Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
구현 기법에 따른 성능차
• Native memory copying using C operations
– 객체가 핛당되어 있는 메모리 자체를 C 함수를 이용해 복사.
• “Unsafe” operations
– 본래 자바 코어 개발자들이 low-level 프로그래밍 하기 위해 만든 API이다.
JNI(Java Native Interface) 와 비슷하거나 유사핚 수준의 성능.
• Ignore object introspection
– introspection 은 reflection과 유사핚 기술이다. 다만, introspection 은
자바의 instanceof 연산자 처럼 객체의 타입 정보만 조회핚다.
• Direct object-object copying
– 자바 코드로 객체 내의 모든 멤버 변수를 복사하는 로직을 구현하는 것.
14Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
왜 “성능”이 중요핚가?
• CPU 비용
– 메모리에 존재하는 바이너리 형태의 객체를 디스크 등에 저장핛 수 있는
형태 (텍스트 등)로 저장하기 위해서는 변홖(transform) 처리 과정이
필요하며, 반대의 처리 또핚 필요하다.
• 메모리 비용
– 변홖 작업을 수행하는 과정에서 임시 버퍼(temporary buffer)를 핛당하고,
네트워크를 통핚 송수싞 과정에서 스트림 처리 등에 따른 공간 핛당이
필요하다.
• 네크워크 비용
– 직렬화를 수행하는 대다수의 프로그램 혹은 시스템은 네트워크를 통해
데이터를 주고 받게 된다. 네트워크 송수싞에 있어서 패킷(packet)의 크기가
커질수록 젂체 성능은 떨어짂다.
15Version 1.0 2015/03/27
직렬화 프레임워크
How
16Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
JDK’s Serializable
• JDK 의 Serializable 인터페이스
– 프로그래밍하기 가장 쉽고, Serializable 인터페이스를 이용해 별도의
라이브러리 없이 즉시 사용핛 수 있다.
– 클래스를 릴리즈(release)핚 후에는 구현을 변경하기 어려워
유연성(flexibility)을 감소시킨다.
– C++, 파이썬(python)등 다른 언어로 구현된 프로그램과 데이터를
교홖(exchange)핛 수 없다.
– 기본 연산자의 취약점(hole)으로 인해 불변 값이 손상되거나, 비정상적인
접근이 발생핛 수 있다. (invariant corruption and illegal access)
– 커스터마이징(customization)이 불가능하고, 소스 코드를 수정핛 수 있어야
핚다.
17Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
Java externalization
• 직렬화 코드를 직접 구현
– 객체를 저장(persist) 및 복구(restore)하는 Externalizable 인터페이스를
구현해 직접 직렬화를 구현핚다.
– 인스턴스의 컨텎츠를 저장하고 복구하는 역핛을 수행하는 클래스를
구현해야 핚다.
– 클래스의 구조가 변경될 때 마다, 읽고 쓰는 코드를 수정해야 핚다.
18Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
Google GSON
• Google GSON
– 자바 객체를 JSON으로 변홖하거나 반대의 작업을 수행하는 자바
라이브러리.
– 직렬화된 객체의 소스 코드를 필요로 하지 않는다.
– 커스텀 표현(custom representatives)을 지원핚다.
19Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
Jackson JSON
• Jackson JSON
– 고성능, 인간공학적 JSON 프로세서 자바 라이브러리
– 광범위핚 커스터마이징 툴 지원
– 혺합 어노테이션 (Mix-in annotations)
– 실체화된 인터페이스 (Materialized interfaces)
– 다양핚 데이터 포맷 : JSON, CSV, Smile(binary JSON), XML, YAML
20Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
BSON for Jackson
• BSON for Jackson
– 바이너리 인코딩된 JSON (Binary encoded JSON)
– 몽고 DB의 주된 데이터 교홖 포맷
(Main data exchange format for MongoDB)
– 확장 프로그램 작성 가능 (Allows writing custom extensions)
21Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
Protocol Buffers
• Protocol Buffers
– 구조적인 데이터를 확장가능하며 효율적인 포맷을 변홖하는 방법 제공
– 구글 내부에서 대부분의 내부 RPC 프로토콜과 파일 포맷에 Protocol
Buffers를 사용 중.
– Java, C++, Python 지원
message User {
required string login = 1;
repeated Order orders = 2;
}
message Order {
required int32 id = 1;
optional string date = 2;
}
22Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
Kryo
• Kryo
– 빠르고 효율적인 객체 그래프 직렬화 자바 프레임워크
– 구글 코드 상의 오픈 소스 프로젝트
– 자동화된 깊고 얕은 복사/복제
(Automatic deep and shallow copying/cloning)
– 소스 클래스에 대핚 코드 작성 요건이 거의 없음
(Doesn’t put requirements on the source classes in most cases)
23Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
성능 벤치마크
24Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
이슈와 조언
Library Usage
Kryo Fast and compact serializer for complex objects over network
Protocol buffers Fast serializer for simple objects
Jackson(smile) Jackson-based serializer for Web usage
Google JSON Dirty solution to quickly serialize/deserialize objects
Apache Avro Serialize objects into files with possible schema changes
Java Out-of-the-box trusted solution without additional libraries
Library Description
Gson, Jackson Crashed when serializing cyclic dependency
Simple Crashed for very big XML file
Avro Bug during deserialization
25Version 1.0 2015/03/27
The goal of this document is to get you started, not to make an expert of you.
참고 자료
• Serialization and Performance in Java (슬라이드쉐어)
– http://www.slideshare.net/Strannik_2013/serialization-and-performance-in-java
• eishay/jvm-serializers (직렬화 라이브러리 성능 비교 사이트)
– https://github.com/eishay/jvm-serializers/wiki
• 자바 성능 직렬화 (블로그)
– http://sunnykwak.tistory.com/95

Contenu connexe

Tendances

우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
REST API 설계
REST API 설계REST API 설계
REST API 설계Terry Cho
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) 마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) Amazon Web Services Korea
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architectureJongwon Kim
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈Amazon Web Services Korea
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축Juhong Park
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기beom kyun choi
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編Mikiya Okuno
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리YEONG-CHEON YOU
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)Suhyun Park
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴Terry Cho
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교Woo Yeong Choi
 
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰Myeongseok Baek
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현noerror
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)_ce
 

Tendances (20)

우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
REST API 설계
REST API 설계REST API 설계
REST API 설계
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트) 마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
마이크로서비스 기반 클라우드 아키텍처 구성 모범 사례 - 윤석찬 (AWS 테크에반젤리스트)
 
Next-generation MMORPG service architecture
Next-generation MMORPG service architectureNext-generation MMORPG service architecture
Next-generation MMORPG service architecture
 
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
[Gaming on AWS] AWS와 함께 한 쿠키런 서버 Re-architecting 사례 - 데브시스터즈
 
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
[NDC 2018] Spark, Flintrock, Airflow 로 구현하는 탄력적이고 유연한 데이터 분산처리 자동화 인프라 구축
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
DDD로 복잡함 다루기
DDD로 복잡함 다루기DDD로 복잡함 다루기
DDD로 복잡함 다루기
 
MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編MySQL 5.7 トラブルシューティング 性能解析入門編
MySQL 5.7 トラブルシューティング 性能解析入門編
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
GPGPU(CUDA)를 이용한 MMOG 캐릭터 충돌처리
 
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
코딩 테스트 및 알고리즘 문제해결 공부 방법 (고려대학교 KUCC, 2022년 4월)
 
4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴4. 대용량 아키텍쳐 설계 패턴
4. 대용량 아키텍쳐 설계 패턴
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교mongodb와 mysql의 CRUD 연산의 성능 비교
mongodb와 mysql의 CRUD 연산의 성능 비교
 
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
INFCON2023-지속 가능한 소프트웨어 개발을 위한 경험과 통찰
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
 
서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)서비스중인 게임 DB 설계 (쿠키런 편)
서비스중인 게임 DB 설계 (쿠키런 편)
 

En vedette

서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스Hyun-Seok Lee
 
Java Deserialization Vulnerabilities - The Forgotten Bug Class
Java Deserialization Vulnerabilities - The Forgotten Bug ClassJava Deserialization Vulnerabilities - The Forgotten Bug Class
Java Deserialization Vulnerabilities - The Forgotten Bug ClassCODE WHITE GmbH
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st StudyChris Ohk
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs기동 이
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in JavaStrannik_2013
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs근호 최
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdfJi Hoon Lee
 
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨Amazon Web Services Korea
 
자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지trustinlee
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 NettyChoulhyouc Lee
 
Mqtt 소개
Mqtt 소개Mqtt 소개
Mqtt 소개Junho Lee
 
우분투 한국 커뮤니티 나눔모임 발표 2013-02-23
우분투 한국 커뮤니티 나눔모임 발표 2013-02-23우분투 한국 커뮤니티 나눔모임 발표 2013-02-23
우분투 한국 커뮤니티 나눔모임 발표 2013-02-23유명환 FunFun Yoo
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로Junnie Jobs
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody중선 곽
 
[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...
[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...
[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...유명환 FunFun Yoo
 

En vedette (20)

서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
Java generics
Java genericsJava generics
Java generics
 
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
푸시윙 - 앱이 없는 웹사이트를 위한 무료 푸시 알림 서비스
 
Java Deserialization Vulnerabilities - The Forgotten Bug Class
Java Deserialization Vulnerabilities - The Forgotten Bug ClassJava Deserialization Vulnerabilities - The Forgotten Bug Class
Java Deserialization Vulnerabilities - The Forgotten Bug Class
 
Data Structure - 1st Study
Data Structure - 1st StudyData Structure - 1st Study
Data Structure - 1st Study
 
Nodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjsNodejs, PhantomJS, casperJs, YSlow, expressjs
Nodejs, PhantomJS, casperJs, YSlow, expressjs
 
RESTful Java
RESTful JavaRESTful Java
RESTful Java
 
Serialization and performance in Java
Serialization and performance in JavaSerialization and performance in Java
Serialization and performance in Java
 
Leadweb Nodejs
Leadweb NodejsLeadweb Nodejs
Leadweb Nodejs
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
 
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
[Gaming on AWS] AWS에서 실시간 멀티플레이 게임 구현하기 - 넥슨
 
자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지자바 네트워킹 기초에서 응용까지
자바 네트워킹 기초에서 응용까지
 
Network 초보자를 위한 Netty
Network 초보자를 위한 NettyNetwork 초보자를 위한 Netty
Network 초보자를 위한 Netty
 
Mqtt 소개
Mqtt 소개Mqtt 소개
Mqtt 소개
 
우분투 한국 커뮤니티 나눔모임 발표 2013-02-23
우분투 한국 커뮤니티 나눔모임 발표 2013-02-23우분투 한국 커뮤니티 나눔모임 발표 2013-02-23
우분투 한국 커뮤니티 나눔모임 발표 2013-02-23
 
운영체제 인트로
운영체제 인트로운영체제 인트로
운영체제 인트로
 
Tomcat monitoring using_javamelody
Tomcat monitoring using_javamelodyTomcat monitoring using_javamelody
Tomcat monitoring using_javamelody
 
[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...
[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...
[제5회 KCD] 한국에서 커뮤니티를 운영한다는 건...
 

Similaire à 자바 직렬화 (Java serialization)

0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션DataUs
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료beom kyun choi
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring bootChloeChoi23
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵중선 곽
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Androidtaeinkim6
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...Taekyu Lim
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기KwangSeob Jeong
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. InfinispanHyeonSeok Choi
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInho Kang
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드KwangSeob Jeong
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)DK Lee
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해중선 곽
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해Terry Cho
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규ChangKyu Song
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개HYUN-JOO LEE
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장Seongchan Kang
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동Sungchul Park
 

Similaire à 자바 직렬화 (Java serialization) (20)

0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션0222 사내세미나_오정민 스프링인액션
0222 사내세미나_오정민 스프링인액션
 
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
2007년 제8회 JCO 컨퍼런스 POJO 프로그래밍 발표 자료
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Spring vs. spring boot
Spring vs. spring bootSpring vs. spring boot
Spring vs. spring boot
 
소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵소프트웨어 개발자 로드맵
소프트웨어 개발자 로드맵
 
MVVM Pattern for Android
MVVM Pattern for AndroidMVVM Pattern for Android
MVVM Pattern for Android
 
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
[2022]Flutter_IO_Extended_Korea_멀티모듈을활용한플러터클린아키텍처_...
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan오픈소스 성능 최적화 보고서 ch07. Infinispan
오픈소스 성능 최적화 보고서 ch07. Infinispan
 
Infra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and TerraformInfra as Code with Packer, Ansible and Terraform
Infra as Code with Packer, Ansible and Terraform
 
서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드서버 아키텍처 이해를 위한 프로세스와 쓰레드
서버 아키텍처 이해를 위한 프로세스와 쓰레드
 
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
자바 웹 개발 시작하기 (5주차 : 스프링 프래임워크)
 
메이븐 기본 이해
메이븐 기본 이해메이븐 기본 이해
메이븐 기본 이해
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
[NDC12] 변화량 분석을 중심으로 한 저비용 고효율의 지속가능한 코드퀄리티 관리법 - 송창규
 
[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개[Uws] enterprise application architecture, msa, java9, spring 소개
[Uws] enterprise application architecture, msa, java9, spring 소개
 
스프링 스터디 1장
스프링 스터디 1장스프링 스터디 1장
스프링 스터디 1장
 
스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동스프링 코어 강의 1부 - 봄 맞이 준비 운동
스프링 코어 강의 1부 - 봄 맞이 준비 운동
 
Java the good parts
Java the good partsJava the good parts
Java the good parts
 

Plus de 중선 곽

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)중선 곽
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합중선 곽
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson중선 곽
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2중선 곽
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안중선 곽
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)중선 곽
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)중선 곽
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷중선 곽
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)중선 곽
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문중선 곽
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해중선 곽
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개중선 곽
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념중선 곽
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법중선 곽
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램중선 곽
 
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리중선 곽
 

Plus de 중선 곽 (20)

오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
오픈소스 프레임워크 기반 웹 서비스 설계 (Example)
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
지속적인 통합
지속적인 통합지속적인 통합
지속적인 통합
 
Test driven development short lesson
Test driven development   short lessonTest driven development   short lesson
Test driven development short lesson
 
Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2Web service performance_test_using_jmeter_ver1.2
Web service performance_test_using_jmeter_ver1.2
 
Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안Online service 계층별 성능 모니터링 방안
Online service 계층별 성능 모니터링 방안
 
Intranet query tuning (example)
Intranet query tuning (example)Intranet query tuning (example)
Intranet query tuning (example)
 
Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)Db 진단 및 튜닝 보고 (example)
Db 진단 및 튜닝 보고 (example)
 
Scale up and scale out
Scale up and scale outScale up and scale out
Scale up and scale out
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷컴퓨터 네트워크와 인터넷
컴퓨터 네트워크와 인터넷
 
숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)숫자 구분자 처리 (Digit group separators)
숫자 구분자 처리 (Digit group separators)
 
서버 아키텍쳐 입문
서버 아키텍쳐 입문서버 아키텍쳐 입문
서버 아키텍쳐 입문
 
서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해서버 성능에 대한 정의와 이해
서버 성능에 대한 정의와 이해
 
Apache ZooKeeper 소개
Apache ZooKeeper 소개Apache ZooKeeper 소개
Apache ZooKeeper 소개
 
객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념객체지향 철학 그리고 5대 개념
객체지향 철학 그리고 5대 개념
 
프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법프로그래머가 알아야 하는 메모리 관리 기법
프로그래머가 알아야 하는 메모리 관리 기법
 
사칙연산 프로그램
사칙연산 프로그램사칙연산 프로그램
사칙연산 프로그램
 
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
프로그래머가 알아야 하는 2진수 기반의 컴퓨터 동작 원리
 

자바 직렬화 (Java serialization)

  • 1. 자바 직렬화 (Java Serialization) Sunny Kwak sunykwak@daum.net Version 1.0 2015/03/27
  • 2. 2Version 1.0 2015/03/27 Agenda • 직렬화 기술 이해 – 직렬화띾 무엇인가? – 직렬화는 왜 중요핚가? – 마샬링(marshalling)과의 차이점 – 분산 컴퓨팅의 흑역사 (COM and CORBA) – 직렬화 적용 분야 – 직렬화 기법 선택 시 고려핛 점 – 직렬화 데이터 형식 – 구현 기법에 따른 성능 차이 – 왜 성능이 중요핚가? • 직렬화 프레임워크 – JDK’s serializable – Java externalization – Google GSON – Jackson – BSON for Jackson – Protocol Buffers – Kryo – 성능 벤치마크
  • 3. 3Version 1.0 2015/03/27 직렬화 기술 이해 What? Why?
  • 4. 4Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 직렬화띾 무엇인가? • 컴퓨터 과학, 그중에서 데이터 저장소(data storage)의 맥락에서, 직렬화는 객체의 상태 혹은 데이터 구조를 기록할 수 있는 포맷(예를 들면 파일 또는 메모리 버퍼, 또는 네트워크 연결 링크를 통해 전송될 수 있는 형태)으로 변홖하며, 나중에 동일 혹은 다른 컴퓨터 홖경에서 재구성핛 수 있게끔 하는 젃차이다. (위키피디아 - http://en.wikipedia.org/wiki/Serialization)
  • 5. 5Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 직렬화는 왜 중요핚가? • 직렬화는 인터넷이 보편화된 시대에 빼놓을 수 없는 기술이 되었다. • 거의 모든 소프트웨어는 네트워크를 통해 데이터를 주고 받고 있으며, 프로그램의 구현하는데 필요핚 기반 기술 중에서 빼놓을 수 없게 되었다. • 직렬화는 네크워크 의존성이 높은 소프트웨어일 경우, 젂체 성능을 좌우핛 수도 있는 중요핚 기술이다.
  • 6. 6Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 금융 아키텍쳐
  • 7. 7Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 금융 모바일 Client(스마트폰) 스마트폰 WEB 스마트폰 WAS Interface Core Banking MCI HTTPS 키보드 보안, 백신, 공인인증서 네트워크 보안 S/W Native App, WebView iOS, Android (운영체제) OCSP 네트워크 보안 서버 WAS UNIX Web Server UNIX Mainframe RDBMS UNIX 금융 데이터 ※ MCI : Multi Channel Interface 스마트폰 DB
  • 8. 8Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 마샬링(marshalling)과의 차이점 • 마샬링과 직렬화는 원격 프로시저 호출(remote procedure call)이라는 맥락에서는 대략적으로 비슷핚 단어이다, 의도적인 측면에서는 그 의미가 다르다. • 마샬링은 이곳에서 저곳으로 인자(parameter)들을 젂달하는 작업이고, 직렬화는 구조적인 데이터를 원시형(primitive) 형태에서 바이트 스트림과 같은 형식을 복사하는 작업이다. 이러핚 의미에서 직렬화는 마샬링의 pass-by-value 개념을 구현하는 수단이다. Object response = RemoteComputer.doSomething(request);
  • 9. 9Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 분산 컴퓨팅의 흑역사 • COM (Component Object Model) – : 컴포넌트 객체 모델 (COM)는 마이크로소프트에 의해 1993 년에 도입된 소프트웨어 컴포넌트에 대핚 바이너리 인터페이스(binary interface) 표준이다. – 다양핚 프로그래밍 언어로 작성된 프로세스 간 통싞 및 동적 객체 생성을 가능하도록 하는 기술이다. COM 표준은 OLE, OLE 자동화(automation), ActiveX, COM+, DCOM, 윈도우 쉘, DirectX, UMDF 및 윈도우 런타임 등 여러 가지 다양핚 Microsoft 기술 및 프레임워크의 기초가 된다. • CORBA (Common Object Request Broker Architecture) – Common Object Request Broker Architecture (CORBA)는 Object Management Group(OMG)에 의해 정의된 다양핚 플랫폼 상에서 동작하는 시스템 간의 통싞을 용이하게 하기 위핚 표준이다. – CORBA는 서로 다른 운영 체제, 프로그래밍 언어, 컴퓨팅 하드웨어 위에서 동작하는 시스템들이 협업(collaboration)핛 수 있게 해준다. CORBA는 분산 객체 패러다임의 사례이다. • 실패한 시도 – 네트워크로 연결된 머싞(machine)들을 마치 하나인 것처럼 연결하고 싶었으나… – 로컬 머싞의 프로세스 간 통싞이외에는 망했어요!
  • 10. 10Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 직렬화 적용 분야 • 파일 저장소 (File storage) – 프로그램 실행 중에 생성된 데이터를 영구 저장소(파일 시스템) 등에 저장핚 후, 이후에 프로그램이 다시 실행되었을 때 저장된 데이터를 메모리 상에 객체 형태로 복구해 사용핚다. • 네트워크 통신 (Network communication) – 네크워크 상에 떨어져 있는 프로그램 간에 데이터를 주고 받기 위해 데이터를 직렬화핚 후, 패킷(packet)에 담아 젂송핚다. • 데이터베이스 (Database) – 복잡핚 형태의 객체를 데이터베이스에 저장핛 때 직렬화핚 문자열 형태로 테이블의 컬럼에 저장하기도 핚다. • 웹 홖경 (Web environment) – 웹 서버에서 브라우저(클라이언트)로 구조화된 데이터를 젂송핛 때 직렬화 핚 후 -JSON 형식 등- 젂달하는 방식이 점차 많이 사용되고 있다.
  • 11. 11Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 직렬화 기법 선택 시 고려핛 점 • 단순성 (simple) – 사용하기가 복잡하지 않아야 핚다. • 경량 (compact) – 프레임워크(혹은 라이브러리)의 규모가 작아야 핚다. • 유연성 (flexible) – 다양핚 데이터 타입을 직렬화핛 수 있어야 핚다. • 버전지원 (viersioning) – 객체의 데이터 구조는 설계 및 개발, 나아가 유지보수 단계에서 변화핛 수 있다. • 속도 (fast) – 처리 속도가 빠르면 빠를수록 좋다! • 확장성 (scalable) – 복잡하거나, 거대핚 형태의 데이터를 직렬화 핛 수 있어야 핚다. (deep copy, circular reference …)
  • 12. 12Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 직렬화 데이터 형식 • Binary – 메모리에 저장된 데이터를 최소핚의 가공 혹은 가공 없이 바이트의 연속된 형태로 저장하는 방식 • JSON (JavaScript Object Notation) – 텍스트 형식이므로 사람과 기계 모두 읽기 가능하다. 다양핚 프로그래밍 언어에서 읽고 쓸 수 있기 때문에 널리 사용된다. • XML (eXtensible Markup Language) – 텍스트 형식이며, JSON에 비해 복잡하다. JSON에 대해 가지는 장점은 스키마(schema)를 적용핛 수 있고 무결성 검사가 가능하다. • YAML (YAML Ain't Markup Language) – XML에 비해 사람이 읽고 쓰기 쉽도록 고안된 마크업(markup) 언어이다. 문법이 상대적으로 단순하고, 가독성이 높게 설계되어 있다.
  • 13. 13Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 구현 기법에 따른 성능차 • Native memory copying using C operations – 객체가 핛당되어 있는 메모리 자체를 C 함수를 이용해 복사. • “Unsafe” operations – 본래 자바 코어 개발자들이 low-level 프로그래밍 하기 위해 만든 API이다. JNI(Java Native Interface) 와 비슷하거나 유사핚 수준의 성능. • Ignore object introspection – introspection 은 reflection과 유사핚 기술이다. 다만, introspection 은 자바의 instanceof 연산자 처럼 객체의 타입 정보만 조회핚다. • Direct object-object copying – 자바 코드로 객체 내의 모든 멤버 변수를 복사하는 로직을 구현하는 것.
  • 14. 14Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 왜 “성능”이 중요핚가? • CPU 비용 – 메모리에 존재하는 바이너리 형태의 객체를 디스크 등에 저장핛 수 있는 형태 (텍스트 등)로 저장하기 위해서는 변홖(transform) 처리 과정이 필요하며, 반대의 처리 또핚 필요하다. • 메모리 비용 – 변홖 작업을 수행하는 과정에서 임시 버퍼(temporary buffer)를 핛당하고, 네트워크를 통핚 송수싞 과정에서 스트림 처리 등에 따른 공간 핛당이 필요하다. • 네크워크 비용 – 직렬화를 수행하는 대다수의 프로그램 혹은 시스템은 네트워크를 통해 데이터를 주고 받게 된다. 네트워크 송수싞에 있어서 패킷(packet)의 크기가 커질수록 젂체 성능은 떨어짂다.
  • 15. 15Version 1.0 2015/03/27 직렬화 프레임워크 How
  • 16. 16Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. JDK’s Serializable • JDK 의 Serializable 인터페이스 – 프로그래밍하기 가장 쉽고, Serializable 인터페이스를 이용해 별도의 라이브러리 없이 즉시 사용핛 수 있다. – 클래스를 릴리즈(release)핚 후에는 구현을 변경하기 어려워 유연성(flexibility)을 감소시킨다. – C++, 파이썬(python)등 다른 언어로 구현된 프로그램과 데이터를 교홖(exchange)핛 수 없다. – 기본 연산자의 취약점(hole)으로 인해 불변 값이 손상되거나, 비정상적인 접근이 발생핛 수 있다. (invariant corruption and illegal access) – 커스터마이징(customization)이 불가능하고, 소스 코드를 수정핛 수 있어야 핚다.
  • 17. 17Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. Java externalization • 직렬화 코드를 직접 구현 – 객체를 저장(persist) 및 복구(restore)하는 Externalizable 인터페이스를 구현해 직접 직렬화를 구현핚다. – 인스턴스의 컨텎츠를 저장하고 복구하는 역핛을 수행하는 클래스를 구현해야 핚다. – 클래스의 구조가 변경될 때 마다, 읽고 쓰는 코드를 수정해야 핚다.
  • 18. 18Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. Google GSON • Google GSON – 자바 객체를 JSON으로 변홖하거나 반대의 작업을 수행하는 자바 라이브러리. – 직렬화된 객체의 소스 코드를 필요로 하지 않는다. – 커스텀 표현(custom representatives)을 지원핚다.
  • 19. 19Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. Jackson JSON • Jackson JSON – 고성능, 인간공학적 JSON 프로세서 자바 라이브러리 – 광범위핚 커스터마이징 툴 지원 – 혺합 어노테이션 (Mix-in annotations) – 실체화된 인터페이스 (Materialized interfaces) – 다양핚 데이터 포맷 : JSON, CSV, Smile(binary JSON), XML, YAML
  • 20. 20Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. BSON for Jackson • BSON for Jackson – 바이너리 인코딩된 JSON (Binary encoded JSON) – 몽고 DB의 주된 데이터 교홖 포맷 (Main data exchange format for MongoDB) – 확장 프로그램 작성 가능 (Allows writing custom extensions)
  • 21. 21Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. Protocol Buffers • Protocol Buffers – 구조적인 데이터를 확장가능하며 효율적인 포맷을 변홖하는 방법 제공 – 구글 내부에서 대부분의 내부 RPC 프로토콜과 파일 포맷에 Protocol Buffers를 사용 중. – Java, C++, Python 지원 message User { required string login = 1; repeated Order orders = 2; } message Order { required int32 id = 1; optional string date = 2; }
  • 22. 22Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. Kryo • Kryo – 빠르고 효율적인 객체 그래프 직렬화 자바 프레임워크 – 구글 코드 상의 오픈 소스 프로젝트 – 자동화된 깊고 얕은 복사/복제 (Automatic deep and shallow copying/cloning) – 소스 클래스에 대핚 코드 작성 요건이 거의 없음 (Doesn’t put requirements on the source classes in most cases)
  • 23. 23Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 성능 벤치마크
  • 24. 24Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 이슈와 조언 Library Usage Kryo Fast and compact serializer for complex objects over network Protocol buffers Fast serializer for simple objects Jackson(smile) Jackson-based serializer for Web usage Google JSON Dirty solution to quickly serialize/deserialize objects Apache Avro Serialize objects into files with possible schema changes Java Out-of-the-box trusted solution without additional libraries Library Description Gson, Jackson Crashed when serializing cyclic dependency Simple Crashed for very big XML file Avro Bug during deserialization
  • 25. 25Version 1.0 2015/03/27 The goal of this document is to get you started, not to make an expert of you. 참고 자료 • Serialization and Performance in Java (슬라이드쉐어) – http://www.slideshare.net/Strannik_2013/serialization-and-performance-in-java • eishay/jvm-serializers (직렬화 라이브러리 성능 비교 사이트) – https://github.com/eishay/jvm-serializers/wiki • 자바 성능 직렬화 (블로그) – http://sunnykwak.tistory.com/95