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

강의

  • 리뷰
  • 회사 소개
시작
학습 시작
Start learning now
  • 진행 상황
  • 코스
  • 퀘스트 맵
  • 레슨
  • IO 성능 문제: 병목 현상

    JAVA 25 SELF
    레벨 41,레슨 0
    이 강의는 IO에서의 “병목”이 무엇이며, 그것을 어떻게 찾고 제거하는지에 관한 것입니다. 디스크와 네트워크 작업이 RAM보다 훨씬 느린 이유, 자주 보이는 안티 패턴들(한 번에 1바이트씩 read()로 읽기, 동기 로그 등), 버퍼( BufferedInputStream, BufferedReader), 프로파일러( VisualVM, JProfiler) 그리고 System. currentTimeMillis ()로 시간을 측정하는 방법이 어떻게 도움이 되는지 살펴봅니다. 또한 "bigfile.txt" 파일을 읽는 실험을 진행해 버퍼 사용 여부에 따른 속도를 비교하고, SSD/HDD와 네트워크의 영향, 그리고 흔한 실수들을 정리합니다.
    사용 가능
  • NIO 채널과 ByteBuffer

    JAVA 25 SELF
    레벨 41,레슨 1
    Java NIO의 논블로킹 입출력에 대한 실무 입문: 채널 Channel과 버퍼 ByteBuffer가 스트림 InputStream/ OutputStream과 어떻게 다른지, FileChannel로 읽고 쓰는 방법, position()/ truncate()로 위치를 지정하는 방법, 버퍼 파라미터( capacity, limit, position, mark)로 작업하는 법, 그리고 allocate()와 allocateDirect() 중 무엇을 선택할지 다룹니다. 또한 zero-copy 연산 transferTo()/ transferFrom()과, flip() 호출을 잊거나 버퍼 모드를 잘못 설정하는 등의 전형적인 실수도 보여줍니다.
    사용 가능
  • 대용량 파일: 청킹(chunking) 패턴

    JAVA 25 SELF
    레벨 41,레슨 2
    OutOfMemoryError 없이 수십 기가바이트 파일을 효율적으로 처리하는 방법: 청크(chunks)로 나누고, RandomAccessFile과 FileChannel로 위치 기반 읽기를 수행하며, ExecutorService/ ForkJoinPool로 작업을 병렬화하고, 단순 복사는 transferTo/ transferFrom을 통한 zero-copy를 사용합니다. 청크 크기 선택, 줄 경계, 결과 동기화 및 흔한 실수를 함께 다룹니다.
    사용 가능
  • 대용량 파일 처리: chunking, memory mapping

    JAVA 25 SELF
    레벨 41,레슨 3
    Java에서 거대한 파일을 안전하고 빠르게 처리하는 방법: 스트림과 버퍼로 조각(chunking) 단위로 읽고, 성능을 위해 버퍼 크기를 조정하며, 초고속 임의 접근을 위해 MappedByteBuffer와 FileChannel을 이용해 파일을 메모리에 매핑합니다. memory mapping의 장단점, 리소스와 병렬성에 대한 권장 사항, 그리고 흔한 실수(예: OutOfMemoryError, 닫지 않은 디스크립터, 검색 시 청크 오버랩)를 다룹니다.
    사용 가능
  • 아카이브/압축: java.util.zip

    JAVA 25 SELF
    레벨 41,레슨 4
    Java에서 아카이브와 압축을 다루는 실전 강의: 패키지 java.util.zip, 스트림 ZipInputStream/ ZipOutputStream 및 랜덤 액세스 클래스 ZipFile을 살펴보고, Deflater를 통해 압축 수준( 0… 9, DEFAULT_COMPRESSION)을 제어하며, 단일 파일에는 GZIPInputStream/ GZIPOutputStream을 사용합니다. 또한 Files.walk와 PathMatcher ( "glob:**/*.txt")로 디렉터리를 압축/해제합니다. 보안도 다룹니다: 경로 정규화를 통한 Zip Slip 방지와 zip bomb 대비 용량 제한, 그리고 마스크를 지원하는 미니 CLI “zip/unzip”도 만들어 봅니다.
    사용 가능
  • 객체 직렬화 입문: 왜 필요한가

    JAVA 25 SELF
    레벨 42,레슨 0
    Java에서 객체를 왜 그리고 어떻게 “포장(직렬화)”하는가: ObjectOutputStream/ ObjectInputStream으로 바이트 스트림으로 바꾸고 다시 되돌리며, 실행 간 상태를 저장하고, 네트워크로 전송하고, 결과를 캐시합니다. 인터페이스 Serializable의 역할, 키워드 transient의 미묘한 점과 "save.dat" 같은 문자열, 보안 위험과 버전 호환성을 논의합니다. 실습: 게임의 미니 저장, 클라이언트↔서버 메시지 전송, 계산 결과 캐싱.
    사용 가능
  • Serializable 인터페이스: 기본 원칙

    JAVA 25 SELF
    레벨 42,레슨 1
    Java에서의 직렬화 기초를 살펴봅니다: 마커 인터페이스 java.io.Serializable, implements Serializable로 클래스를 표시하는 방법, 필드 요구사항( static, transient), ObjectOutputStream/ ObjectInputStream으로 객체를 쓰고 읽는 단계별 예시, writeObject/ readObject 호출 시 “내부적으로” 무엇이 일어나는지, 그리고 전형적인 실수들(직렬화 불가능한 필드, 내부 클래스, static 필드의 동작, serialVersionUID를 통한 클래스 버전 관리).
    사용 가능
  • 표준 직렬화 형식: 바이너리, 텍스트

    JAVA 25 SELF
    레벨 42,레슨 2
    이 강의에서는 Java의 바이너리 직렬화를 ObjectOutputStream 및 ObjectInputStream 클래스로, 텍스트 형식( JSON, XML)과 비교합니다: 동작 원리, 속도와 크기 효율, 버전 호환성과 보안. 장점과 한계를 정리하고, Jackson( Maven 의존성 포함)으로 실습을 보여주며, 언제 무엇을 선택할지에 대한 조언과 흔한 실수도 다룹니다.
    사용 가능
  • ObjectOutputStream, ObjectInputStream: 스트림 작업

    JAVA 25 SELF
    레벨 42,레슨 3
    이 강의에서는 Java에서 짝을 이루는 스트림 ObjectOutputStream과 ObjectInputStream을 사용해 객체를 직렬화/역직렬화하는 방법을 다룹니다. 마커 인터페이스 java.io.Serializable이 무엇인지, writeObject()와 readObject() 메서드가 어떻게 동작하는지, 왜 static 및 transient 필드는 스트림에 포함되지 않는지, 어떤 예외가 발생하는지( NotSerializableException, InvalidClassException), 그리고 serialVersionUID가 무엇에 영향을 주는지를 설명합니다. 실습으로 단일 객체와 객체 목록을 파일에 직렬화하고, 흔한 오류를 분석합니다.
    사용 가능
  • 컬렉션 직렬화: List, Map, Set

    JAVA 25 SELF
    레벨 42,레슨 4
    Java에서 컬렉션을 직렬화하는 실무 가이드: ObjectOutputStream/ ObjectInputStream으로 List, Map, Set을 저장하고 복원하는 방법; 왜 대부분의 컬렉션이 이미 Serializable을 구현하는지; 요소에 대한 요구사항; HashSet/ HashMap에서의 순서 동작; 중첩 및 빈 컬렉션 처리; 함정( InvalidClassException, serialVersionUID, transient/ static). 마지막에는 “가상 도서관”의 완전한 예제로 마무리합니다.
    사용 가능
  • 직렬화 프로세스 제어: writeObject, readObject

    JAVA 25 SELF
    레벨 43,레슨 0
    표준 직렬화를 가로채고 프로세스를 직접 제어하는 방법: 엄격한 시그니처를 가진 프라이빗 메서드 writeObject/ readObject를 사용하고 ( private void writeObject( ObjectOutputStream out) throws IOException), defaultWriteObject()/ defaultReadObject()를 호출하며, transient로 필드를 제외하고, 체크섬과 로그를 추가하며, serialVersionUID와 버전 호환성도 잊지 않습니다. ObjectOutputStream/ ObjectInputStream 사용과 대표적인 오류, 실용적인 예제를 다룹니다.
    사용 가능
  • transient 필드, serialVersionUID

    JAVA 25 SELF
    레벨 43,레슨 1
    Java에서의 직렬화 실무 가이드: 필드를 스트림에서 제외하기 위해 transient를 언제 어떻게 사용할지, 역직렬화 시 무엇이 일어나는지(기본값), 메서드 readObject에서 상태를 어떻게 복원할지; serialVersionUID가 무엇이며, 이를 어떻게 선언하는지( private static final long serialVersionUID = 1L), 언제 변경해야 하는지와 왜 명시적으로 지정하는 편이 더 좋은지. 동작하는 예제, 위험한 시나리오, 그리고 흔한 실수를 함께 다룹니다.
    사용 가능
  • 1
  • ...
  • 18
  • 19
  • 20
  • 21
  • 22
  • ...
  • 30
학습
  • 등록
  • 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