CodeGym
AI Academy
CodeGym University
학습
강좌
과제
설문 & 퀴즈
게임
도움말
일정
커뮤니티
사용자
포럼
채팅
아티클
성공 사례
활동
후기
구독
라이트 테마

강의

  • 리뷰
  • 회사 소개
시작
학습 시작
Start learning now
  • 진행 상황
  • 코스
  • 퀘스트 맵
  • 레슨
  • 이진 직렬화의 문제: 보안과 호환성

    JAVA 25 SELF
    레벨 45,레슨 0
    이 강의에서는 Java의 이진 직렬화가 가지는 위험을 다룹니다. 신뢰할 수 없는 소스에서의 역직렬화가 왜 위험한지(“가젯 체인”, RCE), readObject 및 readResolve 같은 특수 메서드가 어떤 문제를 일으킬 수 있는지, 그리고 어떻게 방어할지(허용 목록(whitelisting), JSON/ XML로의 전환, Jackson 같은 안전한 라이브러리) 등을 설명합니다. 또한 클래스 버전 호환성과 serialVersionUID의 역할, InvalidClassException 발생 시 동작, transient/ static의 제약, 성능, 모범 사례와 흔한 실수까지 자세히 살펴봅니다.
    사용 가능
  • 제네릭 컬렉션 직렬화: 특징

    JAVA 25 SELF
    레벨 45,레슨 1
    타입 소거( type erasure)가 제네릭 컬렉션의 직렬화에 어떻게 영향을 미치는지 살펴봅니다: 왜 런타임에 List<String>과 List<Integer>가 동일한 ArrayList인지, ObjectOutputStream/ ObjectInputStream으로 정확히 무엇이 기록되고 읽히는지, ClassCastException과 unchecked 캐스트 경고가 어디서 비롯되는지. 중첩 컬렉션, Map/ Set 예시를 보여 주고, Gson/ Jackson을 언급하며, 안전한 역직렬화 모범 사례를 정리합니다.
    사용 가능
  • 직렬화 시 호환성과 역호환성(backward compatibility)

    JAVA 25 SELF
    레벨 45,레슨 2
    직렬화 가능한 클래스를 어떻게 발전시키면서 데이터를 망가뜨리지 않는지 설명합니다: 왜 serialVersionUID를 고정해야 하는지, JVM이 호환성을 어떻게 검사하는지, 어떤 변경이 안전한지(필드 추가/삭제), 어떤 변경이 치명적인지(타입 변경, 클래스를 다른 패키지로 이동). 또한 transient/ static의 역할, writeObject/ readObject를 통한 커스텀 직렬화 기법, 이진 직렬화와 XML/JSON의 차이, 호환성 보장 전략과 흔한 오류(예: InvalidClassException)를 보여줍니다.
    사용 가능
  • 직렬화된 데이터의 마이그레이션과 버전 관리

    JAVA 25 SELF
    레벨 45,레슨 3
    프로덕션 환경에서 Serializable 클래스를 안전하게 진화시키는 방법: 필드와 타입을 변경하면 무엇이 일어나는지, 클래스 버전이 serialVersionUID로 어떻게 동작하는지, 언제 값을 변경하고 언제 그대로 두어야 하는지, readObject/ readFields를 이용한 “지연” 마이그레이션과 “in-place” 변환을 어떻게 적용하는지, 그리고 ObjectInputStream.readClassDescriptor() 같은 고급 기법은 무엇이 있는지. 두 가지 클래스 버전과 전형적인 실수를 포함한 전체 실전 시나리오를 살펴보며, InvalidClassException의 함정도 짚어봅니다.
    사용 가능
  • 직렬화의 압축과 프로파일링

    JAVA 25 SELF
    레벨 45,레슨 4
    Java에서 객체 직렬화의 크기를 줄이고 속도를 높이는 방법: transient로 불필요한 필드를 제외하고, Externalizable로 완전한 제어를 하며, 스트리밍 압축( GZIPOutputStream, ZipOutputStream)을 적용하고, I/O 버퍼링( BufferedOutputStream, BufferedInputStream)과 FileChannel. transferTo를 통한 빠른 복사로 가속합니다. 성능 평가는 System. nanoTime()을 이용한 빠른 측정과 JMH 기반의 신뢰할 수 있는 마이크로벤치마크를 모두 사용합니다. 마지막에는 미니 실험과 흔한 실수 분석으로 마무리합니다.
    사용 가능
학습
  • 등록
  • Java 과정
  • 과제 도움
  • 요금
  • 게임 프로젝트
  • Java 문법
커뮤니티
  • 사용자
  • 아티클
  • 포럼
  • 채팅
  • 성공 사례
  • 활동
  • 제휴 프로그램
회사
  • 회사 소개
  • 연락처
  • 후기
  • 보도자료실
  • CodeGym for EDU
  • FAQ
  • 지원
CodeGymCodeGym 은(는) 처음부터 Java 프로그래밍을 배우기 위한 온라인 코스입니다. 이 과정은 초보자가 Java를 마스터하기에 완벽한 방법입니다. 즉시 검증 기능이 포함된 1200개 이상의 과제와 Java 기초 이론의 필수 범위를 제공합니다. 학습 성공을 돕기 위해 퀴즈, 코딩 프로젝트, 효율적인 학습법 관련 콘텐츠, Java 개발자 경력 관련 자료 등 동기 부여 기능들을 구현했습니다.
팔로우하기
인터페이스 언어
English Deutsch Español हिन्दी Français Português Polski বাংলা 简体中文 मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語
한국어
Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
"Programmers Are Made, Not Born" © 2026 CodeGym
MastercardVisa
"Programmers Are Made, Not Born" © 2026 CodeGym