0Pricing
Java Academy · 강의

가상 스레드란 무엇인가

Java 21의 경량 스레드를 알아봅니다

가상 스레드란 무엇인가은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

가상 스레드에 오신 것을 환영합니다

가상 스레드는 Java 21에서 최종 기능으로 추가되었습니다(JEP 444). 가상 스레드는 운영 체제가 아니라 JVM이 관리하는 경량 스레드입니다.

목표는 간단합니다. 수백만 개의 동시 작업으로 확장하면서도 요청마다 스레드를 사용하는 직관적인 코드를 작성할 수 있게 하는 것입니다.

기존 방식의 문제

기존의 플랫폼 스레드는 OS 스레드 하나와 일대일로 대응합니다. 각 스레드는 약 1메가바이트의 스택을 사용하며 생성 비용도 큽니다.

따라서 한 번에 실행할 수 있는 스레드는 수천 개 정도뿐입니다. 차단된 입출력은 대기하는 동안 OS 스레드 전체를 점유합니다.

가상 스레드가 다른 점

가상 스레드는 OS 스레드를 소유하지 않습니다. 많은 가상 스레드가 소수의 운반자 플랫폼 스레드 풀에 다중화됩니다.

  • 생성 비용이 저렴함(밀리초당 수천 개)
  • 메모리 사용량이 매우 적음
  • 차단되면 가상 스레드가 대기 상태가 되어 운반자 스레드를 해제함

탑재와 해제

가상 스레드가 실행될 때는 운반자 스레드에 탑재됩니다. 차단 작업에 도달하면 해제되어 운반자 스레드를 놓아주므로 다른 작업을 진행할 수 있습니다.

이러한 대기와 재개는 자동으로 이루어집니다. 코드는 일반적인 차단 방식의 코드처럼 작성하면 됩니다.

첫 번째 가상 스레드

다음은 가능한 가장 간단한 예제입니다. Thread.ofVirtual().start(...)는 가상 스레드를 시작하고, join()은 해당 스레드가 끝날 때까지 기다립니다.

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual().start(() ->
            System.out.println("Hello from a virtual thread!"));
        vt.join();
        System.out.println("Main is done.");
    }
}

가상 스레드인지 확인하기

모든 Thread는 isVirtual()을 제공합니다. 이를 사용하면 코드가 어떤 종류의 스레드에서 실행 중인지 확인할 수 있습니다.

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual().start(() -> {
            System.out.println("isVirtual: " + Thread.currentThread().isVirtual());
        });
        vt.join();
    }
}

많은 작업으로 확장하기

가상 스레드는 생성 비용이 저렴하므로 수만 개를 시작해도 전혀 이상하지 않습니다. 여기서는 가상 스레드 10,000개를 시작합니다.

import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        AtomicInteger counter = new AtomicInteger();
        Thread[] threads = new Thread[10_000];
        for (int i = 0; i < threads.length; i++) {
            threads[i] = Thread.ofVirtual().start(counter::incrementAndGet);
        }
        for (Thread t : threads) t.join();
        System.out.println("Completed: " + counter.get());
    }
}

가상 스레드 이름 지정하기

시작하기 전에 빌더를 사용하여 가상 스레드에 이름을 지정하면 디버깅이 더 쉬워집니다.

public class Main {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual()
                .name("worker-1")
                .start(() ->
                    System.out.println("Running on: " + Thread.currentThread().getName()));
        vt.join();
    }
}

같은 API, 새로운 엔진

가상 스레드는 이미 알고 있는 것과 정확히 같은 Thread API를 구현합니다. 여전히 start, join, sleep, interrupt를 사용합니다.

따라서 Thread와 Runnable을 기반으로 만든 기존 라이브러리도 변경 없이 작동합니다.

가상 스레드를 사용할 때

가상 스레드는 웹 서버, 데이터베이스 호출, 원격 서비스 요청처럼 입출력 중심인 작업에서 큰 강점을 발휘합니다.

CPU 작업 중심의 숫자 계산을 더 빠르게 처리하지는 않습니다. 이러한 작업은 여전히 코어 수에 제한됩니다.

풀링하지 않기

중요한 관점의 전환이 필요합니다. 가상 스레드는 풀링하지 않습니다. 작업마다 새 스레드를 만들고 작업이 끝나면 종료되도록 하세요.

풀링은 비용이 큰 리소스를 재사용하기 위해 존재합니다. 가상 스레드는 저렴하므로 이를 풀링하는 것은 피해야 할 패턴입니다.

빠른 확인

가상 스레드에 대한 이해도를 확인해 보세요.

정리

가상 스레드가 무엇이며 왜 중요한지 배웠습니다.

  • 가볍고 JVM이 관리하며 Java 21에서 완성되었습니다
  • 마운트와 마운트 해제를 통해 캐리어 스레드에 다중화됩니다
  • 높은 동시성이 필요한 입출력 중심 작업에 적합합니다
  • 동일한 Thread 인터페이스를 사용하지만 풀링하지 않고 작업마다 생성합니다

다음에는 가상 스레드를 생성하는 여러 방법을 배웁니다.

자주 묻는 질문

“가상 스레드란 무엇인가” 강의는 무료인가요?

네 — “가상 스레드란 무엇인가” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“가상 스레드란 무엇인가”에서 뭘 배우나요?

Java 21의 경량 스레드를 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“가상 스레드란 무엇인가” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 가상 스레드란 무엇인가
  2. 가상 스레드 생성
  3. 플랫폼 스레드와 가상 스레드
  4. 함정: 고정과 ThreadLocals
← Java Academy(으)로 돌아가기