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

강의

  • 리뷰
  • 회사 소개
시작
학습 시작
Start learning now
  • 진행 상황
  • 코스
  • 퀘스트 맵
  • 레슨
  • CompletableFuture 결합: thenCombine, allOf, anyOf

    JAVA 25 SELF
    레벨 55,레슨 2
    CompletableFuture로 작업을 병렬화하고 결과를 결합하는 방법: thenCombine/ thenCombineAsync로 두 결과를 합치기, allOf로 여러 작업을 기다리기, anyOf로 가장 빠른 응답에 반응하기. supplyAsync를 사용한 실전 예제, 논블로킹 처리( thenAccept, thenRun), 그리고 오류와 그 처리( exceptionally, handle, whenComplete)의 시그니처와 핵심 포인트를 다룹니다. 마지막에는 메서드 비교를 위한 간단한 표를 제공합니다.
    사용 가능
  • 비동기 코드에서의 오류 처리: exceptionally, handle

    JAVA 25 SELF
    레벨 55,레슨 3
    체인의 CompletableFuture에서 예외를 안전하게 포착하고 처리하는 방법: exceptionally(오류 시 대체 값), handle(성공/실패 공용 처리기), whenComplete(결과를 바꾸지 않는 부수 동작)의 역할을 살펴봅니다. 왜 get()/ join()을 직접 호출하면 원인이 ExecutionException/ CompletionException으로 래핑되는지, 단계들을 어떻게 결합하는지( thenApply, thenAccept), 그리고 어떤 전형적인 실수를 피해야 하는지도 논의합니다.
    사용 가능
  • thenCompose + 커스텀 Executor + 타임아웃

    JAVA 25 SELF
    레벨 55,레슨 4
    Java의 CompletableFuture에서 thenCompose로 비동기 단계를 올바르게 “연결”하는 방법과 언제 thenApply로 충분한지, ExecutorService를 통해 자체 스레드 풀을 연결해야 하는 이유와 방법( ForkJoinPool.commonPool() 대신), 그리고 orTimeout, completeOnTimeout으로 체인을 “무한 대기”로부터 보호하는 방법을 다룹니다. 마지막에는 커스텀 Executor, thenCompose, 타임아웃을 함께 사용하는 실전 예제와 함께 흔한 실수와 해결책을 정리합니다.
    사용 가능
  • 비동기 IO: AsynchronousFileChannel (NIO2)

    JAVA 25 SELF
    레벨 56,레슨 0
    이 강의에서는 Java NIO.2의 비동기 입출력(AIO)을 다룹니다. 동기 IO와 무엇이 다른지, AsynchronousFileChannel을 어떻게 사용하는지, Future와 CompletionHandler로 읽기/쓰기 작업을 실행하는 방법, 그리고 스레드 풀인 ExecutorService 선택이 성능과 동작에 어떤 영향을 주는지 설명합니다. 실습으로는 open으로 채널을 여는 방법, read/ write 메서드, 상호작용 흐름, 그리고 자주 발생하는 실수를 살펴봅니다.
    사용 가능
  • Future, CompletionHandler: 작업 완료 처리

    JAVA 25 SELF
    레벨 56,레슨 1
    Java에서 NIO2 비동기 작업의 완료를 어떻게 처리할지: Future를 통한 “약속”과 CompletionHandler를 통한 콜백. AsynchronousFileChannel의 read/ write 시그니처, get()으로 결과를 블로킹 수신하는 방법과 isDone() 폴링, 그리고 completed()/ failed()에서의 논블로킹 처리까지 다룹니다. 읽기/쓰기 실전 예제와 접근 방식의 간단 비교도 보여줍니다.
    사용 가능
  • 텍스트 파일의 비동기 처리

    JAVA 25 SELF
    레벨 56,레슨 2
    Java에서 비동기 입출력을 연습합니다: AsynchronousFileChannel을 통해 큰 텍스트 파일을 ByteBuffer로 블록 단위로 읽고, CharsetDecoder로 바이트를 올바르게 문자로 변환하며, Future 또는 CompletionHandler를 사용해 데이터를 비동기로 다시 씁니다. 다바이트 문자(예: "UTF-8")가 블록 경계에서 “끊기는” 문제, 실시간 줄 수 계산, 인코딩 선택, 그리고 버퍼와 채널을 다룰 때의 전형적인 실수를 함께 살펴봅니다.
    사용 가능
  • 비동기 I/O에서 오류 처리, 작업 취소

    JAVA 25 SELF
    레벨 56,레슨 3
    Java 비동기 입출력에서 오류를 올바르게 포착하고 처리하는 방법: CompletionHandler 콜백의 completed/ failed 메서드, 로깅 및 알림. Future와 cancel( boolean)을 통한 작업 취소, get() 및 CancellationException에 미치는 영향, 그리고 실무 팁: try-with-resources, CountDownLatch/ CompletableFuture로 동기화 및 리소스 해제.
    사용 가능
  • 비동기 파일 작업 시 오류 분석

    JAVA 25 SELF
    레벨 56,레슨 4
    Java NIO에서 비동기 파일 I/O를 다룰 때의 함정에 대한 실전 분석: 버퍼 ByteBuffer의 올바른 관리( position/ limit 속성, flip(), clear(), compact() 호출), AsynchronousFileChannel의 병렬 작업 중 레이스, 리소스 종료( channel.close(), try-with-resources), CompletionHandler에서의 오류 처리(메서드 failed(...)), Future<Integer>로 작업 생명주기를 제어하고 CountDownLatch로 동기화하기, CharsetDecoder를 통한 올바른 인코딩 처리, 그리고 적절한 스레드 풀 ExecutorService 선택.
    사용 가능
  • 스레드 vs 가상 스레드: 차이점과 장점

    JAVA 25 SELF
    레벨 57,레슨 0
    플랫폼 스레드와 가상 스레드의 차이를 살펴봅니다: 모델 “ Platform Thread → OS”가 어떻게 동작하고 왜 무거운지, carrier threads 위의 가상 스레드( Virtual Thread)에서는 무엇이 달라지는지, 그리고 이것이 리액티브 “스파게티” 없이도 어떻게 확장성을 제공하는지. Thread.ofVirtual()로 실습을 보고, I/O‑bound와 CPU‑bound 작업의 동작을 비교하며, 호환성(예: InputStream.read, Socket.accept 같은 블로킹 호출)과 전형적인 실수(구식 동기화, “마법 같은 가속”을 기대하는 것)도 다룹니다.
    사용 가능
  • 가상 스레드 생성: Thread.ofVirtual().start()

    JAVA 25 SELF
    레벨 57,레슨 1
    Java 21 가상 스레드 실전: 플랫폼 스레드와의 차이, Thread.startVirtualThread(...)와 Thread.ofVirtual().start(...)로 실행하는 방법, 여전히 new Thread(...)나 Thread.ofPlatform()이 적절한 경우, 그리고 Executors.newVirtualThreadPerTaskExecutor()로 작업을 대량 실행하는 법. join()으로 종료를 기다리는 방법, Future와 ExecutionException으로 오류를 처리하는 법, Virtual Threads 사용 시 흔한 실수도 함께 살펴봅니다.
    사용 가능
  • Virtual Threads의 확장성과 성능

    JAVA 25 SELF
    레벨 57,레슨 2
    플랫폼 스레드 Thread와 Java 21의 가상 스레드를 실무적으로 비교합니다: JVM이 “ 캐리어 스레드”(carrier threads) 덕분에 최소한의 메모리로 수십만 개의 작업을 실행하는 방식, 가상 스레드가 빛나는 곳(I/O-bound)과 그렇지 않은 곳(CPU-bound)을 살펴봅니다. 제약 사항( synchronized, 네이티브 락), 모범 사례( Executors.newVirtualThreadPerTaskExecutor()), JVisualVM과 Java Flight Recorder를 통한 모니터링, 그리고 Virtual Threads로 전환할 때의 흔한 실수도 함께 정리합니다.
    사용 가능
  • 가상 스레드와 함께 Executor 사용하기

    JAVA 25 SELF
    레벨 57,레슨 3
    Executors.newVirtualThreadPerTaskExecutor() (Java 21)를 사용해 하나의 작업을 하나의 가상 스레드에서 실행하는 방법, 이것이 고전적인 풀( newFixedThreadPool, newCachedThreadPool)과 어떻게 다른지, shutdown()과 awaitTermination(...)으로 올바르게 종료하는 법, Future로 작업 결과를 받는 법, 그리고 가상 스레드가 최대 효과를 내는 곳(대량 I/O, 웹 서버, 부하 테스트)을 다룹니다. 마지막에는 — 흔한 실수와 유의점을 정리합니다.
    사용 가능
  • 1
  • ...
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 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