구조적 동시성 모델
관련 작업을 하나의 단위로 다룹니다
구조적 동시성 모델은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
구조적 동시성이란 무엇인가
구조적 동시성(JEP 453, 미리 보기 기능)은 서로 관련된 동시 작업 그룹을 하나의 작업 단위로 취급합니다.
부모 작업이 하위 작업으로 나뉘면 일반 코드의 블록 범위와 마찬가지로 부모 작업이 다음 단계로 넘어가기 전에 모든 하위 작업이 완료되어야 합니다.
해결하는 문제
일반 실행기를 사용하면 생성된 작업이 생성자보다 오래 실행되거나, 누수되거나, 잊힐 수 있습니다. 한 분기의 오류를 알아차리지 못한 채 다른 작업이 계속 실행될 수도 있습니다.
이로 인해 스레드 누수, 고아 작업, 혼란스러운 오류 처리가 발생합니다.
트리로 표현되는 작업
구조적 동시성은 부모와 자식의 관계를 강제합니다. 하위 작업은 자신을 시작한 작업을 루트로 하는 트리를 구성합니다.
- 하위 작업은 부모 범위보다 오래 실행될 수 없습니다
- 부모 작업은 모든 자식 작업이 끝날 때까지 기다립니다
- 취소는 트리를 따라 전파됩니다
순차 코드와 닮은 구조
핵심 아이디어는 동시성 코드도 순차 코드처럼 읽혀야 한다는 것입니다. 범위가 열리고, 작업이 분기되며, 모든 작업이 합류한 후에야 범위가 닫힙니다.
따라서 작업의 수명이 명확해지고 오류를 쉽게 파악할 수 있습니다.
기존의 비구조적 방식
다음은 일반 실행기를 사용하는 익숙하지만 비구조적인 방식입니다. 작동하기는 하지만 두 비동기 결과가 조정된 수명을 공유한다는 보장은 어디에도 없습니다.
import java.util.concurrent.*;
public class Main {
public static void main(String[] args) throws Exception {
try (ExecutorService exec = Executors.newVirtualThreadPerTaskExecutor()) {
Future<String> user = exec.submit(() -> "Ada");
Future<Integer> order = exec.submit(() -> 7);
System.out.println(user.get() + " has " + order.get() + " orders");
}
}
}조정이 중요한 이유
앞의 예에서 사용자 정보를 가져오는 작업이 실패하면 주문 작업은 쓸모없이 계속 실행됩니다. 주문 작업을 수동으로 취소하고 각 get()에서 발생하는 예외를 처리해야 합니다.
구조적 동시성은 이러한 조정을 자동화합니다.
미리 보기 기능 상태
구조적 동시성은 java.util.concurrent 패키지의 미리 보기 프로그래밍 인터페이스로 제공됩니다. 사용하려면 --enable-preview 옵션을 사용해 컴파일하고 실행해야 합니다.
핵심 클래스인 StructuredTaskScope는 다음 레슨에서 다룹니다.
수명 보장
구조화된 scope 안에서는 다음이 보장됩니다.
- scope가 종료되기 전에 모든 하위 작업이 완료되거나 실패하거나 취소됩니다
- 어떤 하위 작업도 백그라운드로 빠져나가지 않습니다
- 스레드 덤프의 호출 스택에 실제 작업 계층 구조가 반영됩니다
관찰 가능성의 이점
하위 작업 트리가 명시적이므로 JDK 도구에서 이를 표시할 수 있습니다. 스레드 덤프는 하위 작업을 상위 scope 아래에 그룹화하므로, 흩어져 있는 스레드 풀 스레드보다 진단이 훨씬 명확해집니다.
가상 스레드와 잘 어울림
구조화된 scope의 각 하위 작업은 기본적으로 자체 가상 스레드에서 실행됩니다. 가상 스레드의 생성 비용이 낮기 때문에 여러 하위 작업으로 확장하는 방식이 실용적입니다.
이 두 기능은 서로 긴밀하게 함께 작동하도록 설계되었습니다.
사고 모델
구조화된 scope를 동시성을 위한 리소스 자동 관리 블록이라고 생각해 보십시오. scope를 열고, 작업을 fork하고, join한 다음 닫습니다. 닫는 중괄호는 실행 중인 작업이 아무것도 남지 않았음을 보장합니다.
빠른 확인
핵심 원리를 얼마나 이해했는지 확인해 보십시오.
복습
구조적 동시성 모델을 살펴보았습니다.
- 서로 관련된 작업은 scope의 수명에 묶인 트리를 이룹니다
- 동시성 코드가 순차 코드처럼 읽힙니다
- 프리뷰 API이므로
--enable-preview가 필요합니다 - 가상 스레드와 자연스럽게 함께 사용할 수 있습니다
다음: StructuredTaskScope API 자체를 살펴봅니다.
자주 묻는 질문
“구조적 동시성 모델” 강의는 무료인가요?
네 — “구조적 동시성 모델” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“구조적 동시성 모델”에서 뭘 배우나요?
관련 작업을 하나의 단위로 다룹니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“구조적 동시성 모델” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 구조적 동시성 모델
- StructuredTaskScope
- 실패와 성공 시 종료
- 오류 처리와 취소