인프런 영문 브랜드 로고
인프런 영문 브랜드 로고
BEST
개발 · 프로그래밍

/

백엔드

자바 동시성 프로그래밍 [리액티브 프로그래밍 Part.1]

자바의 동시성 메커니즘과 멀티스레딩 기법을 깊이 있게 다루고 실무에서 직면할 수 있는 다양한 병렬 처리 문제를 해결하는 데 필요한 지식과 기술을 익히게 됩니다. 기본적인 스레드 관리부터 시작하여, 고급 동기화 기술, 스레드 풀 사용 방법, 그리고 자바의 동시성 관련 클래스들을 심도있게 학습합니다

(5.0) 수강평 40개

수강생 1,166명

Thumbnail

초급자를 위해 준비한
[백엔드, 웹 개발] 강의입니다.

이런 걸
배워요!

  • 자바 동시성 이해

  • 다양한 멀티스레드 패턴 익히기

  • 동기화 기법과 종류 이해

  • 비동기 프로그래밍 이론과 실습

  • 리액티브 프로그래밍을 위한 기초 다지기

요즘 컴퓨팅 환경에서 꼭 필요한
동시성 프로그래밍!

멀티코어 프로세서의 보편화와 분산 컴퓨팅 환경의 발전으로, 동시성 프로그래밍의 중요성은 어느 때보다 높아졌습니다. 자바는 이러한 변화에 발맞추어 강력한 동시성 프로그래밍 기능을 제공합니다.
본 강좌는 현대 컴퓨팅 환경에서 필수적인 동시성 프로그래밍을 자바 언어로 깊이 있게 학습할 수 있습니다.


다양한 기능과 패턴 실습으로 배우는
자바 동시성 프로그래밍

자바 메모리모델의 이해부터 시작하여, 스레드(Thread)의 관리, 동기화(Synchronization) 기법, 데드락(Deadlock) 해결 전략, 병렬 스트림(Parallel Streams), 비동기 프로그래밍 기능인 CompletableFuture 등 고급 동시성 기능에 이르기까지 심도있는 지식을 얻을 수 있습니다.

또한 이론적인 지식 전달뿐만 아니라, 실제 코딩 예제와 여러 사례를 통해 이론을 실제 문제 해결에 적용하는 방법을 가르치고 있으며 volatile 키워드, synchronized 블록, ReentrantLocks, Condition 객체 등 자바의 동기화 메커니즘을 직접 경험하게 될 것입니다.

나아가 여러분은 Atomic 변수, CountDownLatch, CyclicBarrier, Semaphore와 같은 자바의 동시성 유틸리티를 사용하는 방법을 배울 것입니다. 또한, 병렬 처리와 성능 최적화 전략도 중요한 학습 주제입니다.

더 나아가 리액티브 프로그래밍을 위한 기초 및 기본 지식을 쌓는 초석의 역할을 할 것이며 자바의 차세대 스레드 모델인 Virtual Thread 를 준비하는 중요한 밑거름이 될 것이라 확신합니다.


입문자, 중·고급자 모두를 위한 강의

본 강좌는 자바 동시성을 처음 접하는 입문자부터 기초적인 지식이나 사용 경험은 있지만 좀 더 깊이 있는 지식 습득과 자바 동시성의 핵심 원리, 내부 구조, 동작 방식 등을 심도 있게 이해하고 이를 응용하고자 하는 중·고급자를 위해 제작하였습니다.

주요 학습 내용 💡

본 강의는 동시성 프로그래밍을 위한 핵심 주제로 크게 자바 스레드와 동기화, 동시성 프로그래밍, 비동기 프로그래밍의 세 가지 축을 중심으로 수업을 진행합니다.

1. 자바 스레드와 동기화 이해

자바에서 스레드는 프로세스 내의 경량 프로세스로, 프로그램의 동시 실행 흐름을 의미하며, Thread 클래스를 확장하거나 Runnable 인터페이스를 구현하여 생성됩니다; 이를 통해 개발자는 복수의 스레드를 동시에 실행시켜 효율성을 높일 수 있습니다. 스레드 생성 후, start() 메서드를 호출하여 스레드를 실행시키며, 스레드의 생명주기 관리는 join(), sleep(), interrupt()와 같은 기본 API를 통해 이루어집니다. 스레드 활용은 멀티태스킹 및 자원 공유 최적화에 중요한 역할을 하며, 여러 스레드가 동시에 실행될 때 데이터 일관성과 상태 관리를 위해 동기화가 필요합니다.



동기화는 멀티 스레딩 환경에서 중요한 개념으로, 공유 자원에 대한 동시 접근을 제어하여 데이터의 무결성을 보장합니다. 자바에서는 synchronized 키워드를 사용하여 메서드 또는 블록을 동기화할 수 있으며, 이를 통해 특정 시점에 단 하나의 스레드만이 동기화된 코드 영역에 접근할 수 있습니다. 또한, Lock 인터페이스와 구현 클래스들은 더 세밀한 동기화 제어를 가능하게 하며, ReentrantLock은 가장 대표적인 구현체로, 재진입 가능한 락 기능을 제공합니다.

자바는 다양한 동기화 도구를 제공하는데, CountDownLatch, CyclicBarrier, Semaphore 등은 스레드 간 협력을 위한 고급 동기화 메커니즘을 제공합니다. 이러한 도구들은 스레드의 실행 순서를 제어하거나, 특정 조건이 만족될 때까지 스레드를 대기시키는 등의 복잡한 동기화 작업을 단순화합니다. 이와 같은 자바의 스레드와 동기화 기능은 멀티 스레딩 애플리케이션 개발 시 필수적으로 이해하고 활용해야 하는 중요한 부분입니다.


그래서 먼저 자바 스레드의 전반적인 개념과 동시성의 문제 그리고 동기화 종류와 기법에 대해 살펴 봅니다.

2. 동시성 프로그래밍

동시성 프로그래밍에서 스레드 풀은 여러 스레드를 효율적으로 관리하고 재사용하는 방법으로, Executor 프레임워크를 통해 구현되며, 이는 ExecutorService, ScheduledExecutorService와 같은 인터페이스로 구성되어 있고, Callable과 Future 인터페이스를 활용하여 반환 값이 있는 작업을 처리하고 그 결과를 비동기적으로 받을 수 있습니다.



ExecutorService는 스레드 풀의 실행 및 관리를 담당하며, submit() 메서드를 사용하여 작업을 스레드 풀에 제출하고, shutdown() 또는 shutdownNow() 메서드를 통해 스레드 풀을 안전하게 중단 및 종료할 수 있습니다.

또한, Executors 클래스는 다양한 유형의 스레드 풀을 쉽게 생성할 수 있는 팩토리 메서드를 제공하며, ThreadPoolExecutor는 스레드 풀의 구체적인 실행 메커니즘을 제공하여, 다중 작업 처리 시 성능과 자원 활용을 최적화할 수 있게 해줍니다.

이러한 스레드 풀과 관련된 동시성 프로그래밍의 이해는 자바 기반의 멀티 스레딩 애플리케이션 개발에 있어 필수적인 요소이며, 효율적인 자원 관리와 높은 성능의 애플리케이션 구현을 위해 중요합니다.



해당 파트에서는 멀티 스레드 환경에서 동시성 프로그래밍을 쉽고 안전하게 구현하는 방법들을 학습합니다

3. 비동기 프로그래밍

비동기 프로그래밍은 복잡한 애플리케이션에서 필수적인 동시성 패러다임으로, 동기 및 비동기 방식과 그와 관련된 Blocking과 Non-Blocking 호출의 개념을 통해 작업의 실행 흐름을 구조화합니다.

이는 작업이 즉각적으로 완료되지 않을 때, 리소스가 낭비되지 않도록 하고, 프로그램이 다른 작업을 계속할 수 있게 하는 개요 및 구조를 제공합니다.


자바에서 CompletableFuture는 비동기 프로그래밍을 위한 API 구조를 제공하며, 비동기 작업의 시작, 실행, 그리고 결과 조작을 위한 다양한 메서드를 제공하고, 이는 단일 결과 조작부터 복수의 비동기 작업의 조합에 이르기까지 폭넓게 적용될 수 있습니다.

또한, 예외 처리를 위한 메커니즘을 포함하여, 작업의 완료 처리와 더불어 대기 및 취소 처리 기능을 통해 더욱 견고하고 유연한 비동기 프로그래밍을 가능하게 합니다.

이러한 방식으로 비동기 프로그래밍은 시스템의 반응성을 높이고, 리소스를 보다 효율적으로 활용하며, 애플리케이션의 성능을 최적화하는 데 큰 역할을 합니다.





해당 파트에서는 CompletableFuture 를 활용한 비동기 프로그래밍의 전반적인 내용을 살펴 봅니다.

강의 구성 및 상세 커리큘럼 🏃

섹션 1. 운영 체제 기본

  • 운영 체제의 기본 원리와 멀티태스킹, 프로세스와 스레드의 차이점을 학습합니다.

  • Parallel & Concurrent, Context Switch, CPU Bound & I/O Bound, 사용자 모드 & 커널 모드 등 핵심적인 운영 체제 개념을 통해 동시성 프로그래밍의 기초를 이해하고, 스케줄링의 기본 원칙을 배웁니다

섹션 2. Java Thread Fundamentals - 스레드 생성 및 실행 구조

  • 자바에서 스레드를 생성, 실행, 종료 방법을 자세히 배웁니다.

  • 스레드의 생명주기를 각 상태별로 시뮬레이션 하면서 각 상태마다 어떤 특징과 실행흐름으로 가지고 있는지 단계별로 학습합니다.

섹션 3. Java Thread Fundamentals - 스레드 기본 API

  • 자바의 스레드 관련 API에 대한 심층적인 개념과 구조를 설명합니다.

  • sleep, join, interrupt, priority 등 멀티스레드 구현에 있어 반드시 알아야 할 개념과 네이티브 메서드 실행에 의한 JVM 과 OS 간 연결 구조 및 흐름에 대해 심도 있게 학습합니다.

섹션 4. Java Thread Fundamentals - 스레드 활용

  • 실제 프로젝트에서 스레드를 효과적으로 사용하는 방법을 배웁니다.

  • 중단 및 복구 등의 주제를 다루며, 스레드 그룹과 스레드 로컬, 스레드 예외 처리 등에 대해 학습합니다.

섹션 5. Synchronization Fundamentals - 동기화 개념

  • 동기화의 기본 개념과 멀티스레딩 환경에서의 중요성을 깊이 있게 학습합니다.

  • 동기화와 CPU 와의 관계, Critical Seciton, 안저한 스레드 구성 등 동기화 기법을 이해하기 위한 기초적인 개념을 심도있게 학습합니다.

섹션 6. Synchronization Fundamentals - 동기화 기법

  • 동기화의 다양한 기법과 그 적용 방법을 심층적으로 다룹니다.

  • 동기화 기법인 뮤텍스, 세마포어, 모니터, Spin Lock 등 락의 개념과 동기화를 사용한 데이터 보호 및 일관성 유지 전략을 배웁니다.

섹션 7. Java Synchronization

  • 자바에서 제공하는 동기화 메커니즘을 심층적으로 학습합니다.

  • Synchronized 의 개념, 조건 변수, volatile, 교착상태 등을 포함하여 자바에서 제공하는 다양한 동기화 메커니즘을 다룹니다.

섹션 8. Java Locks

  • 자바의 락(Lock) 인터페이스와 다양한 형태의 클래스들을 알아보고 Lock 사용법 및 Lock 을 통한 동기화 문제를 해결하는 방법을 학습합니다.

  • 특히 쓰기락과 읽기락의 특징과 장단점 등을 살펴보고 락의 조건변수 활용법과 실무 예제를 통한 정확한 사용방법을 익힐 수 있도록 합니다.

섹션 9. Java 동기화 도구

  • 자바에서 제공하는 다양한 동기화 도구들을 학습합니다.

  • Atomic Variables (단일연산변수), Atomic * FieldUpdater(단일연산필드업데이트), 카운트다운 래치, 사이클릭 배리어 등의 도구를 사용한 실질적인 적용 방법을 학습합니다.

.섹션 10. 자바 동시성 프레임워크

  • 자바에서 제공하는 Executor, ExecutorService 및 Executors 클래스들의 개념과 특징을 이해하고 스레드 풀을 사용하여 멀티스레드 애플리케이션을 효율적으로 관리하고 최적화하는 방법을 배웁니다.

  • Future 인터페이스를 통해 비동기 작업의 결과를 어떻게 처리하고 관리하는지에 대한 실무적인 지식을 제공합니다.

  • 이러한 개념들을 실제 사례와 실습을 통해 적용함으로써, 복잡한 동시성 문제를 해결하고, 응답성과 성능이 우수한 자바 애플리케이션을 개발할 수 있게 됩니다.

섹션 11. ThreadPoolExecutor

  • ThreadPoolExecutor의 원리와 사용 방법을 자세히 배웁니다.

  • 스레드 풀의 생성, 관리, 최적화 방법을 다루며, 스레드 풀을 사용한 효율적인 리소스 관리와 예외 처리 관리 방법 등에 대해 학습하며 전체 아키텍처와 흐름도에 대해 살펴봅니다.

섹션 12: CompletableFuture

  • 자바의 비동기 프로그래밍 기능인 CompletableFuture에 대해 깊이 있게 다룹니다.

  • 자바 8에서 도입된 이 강력한 클래스를 통해, 비동기 프로그래밍의 기본 개념부터 시작하여, 실제 작업 흐름을 구성하고 관리하는 방법을 배울 수 있습니다.

  • 각 세션은 CompletableFuture의 다양한 메서드와 사용 사례를 상세히 설명하며, 예외 처리, 결과 조합, 그리고 비동기 작업 연쇄 등에 대한 실용적인 기법들을 학습합니다.

이 강의를 만든 
지식공유자를 소개합니다.

정수원(leaven)

  • 현직 자바 개발자

  • SI/SM/솔루션/Mobile/Front&Back-end 의 다양한 프로젝트 경험

  • Architect/PM/PL 로서 역할 수행

  • Github

이런 분들께
추천드려요!

학습 대상은
누구일까요?

  • 자바 동시성 프로그래밍 세계를 경험하고 싶은 분

  • 스레드의 전반적인 개념을 확실하게 정립하고자 하는 분

  • 멀티 스레드 환경에서 어플리케이션을 개발하고자 하는 분

  • 동기화 기법과 종류에 대한 확실한 개념을 알고 싶은 분

  • 자바 비동기 프로그래밍에 대해 알고자 하는 분

선수 지식,
필요할까요?

  • 자바 기초

  • 자바 함수형 프로그래밍 및 람다 사용법

안녕하세요
정수원입니다.

수강생 수

8,487

수강평 수

233

강의 평점

4.8

강의 수

4

다양한 프로젝트에서 웹/모바일/솔루션 제품 개발과 관련된 업무를 진행해 오고 있으며 분석/설계/개발 Role 을 맡아 오고 있습니다.

공공기간, 교육프로그램, 기업 프로젝트, 쇼핑몰 등의 웹 개발 및 솔루션 프로그램, 프레임워크, 오픈소스 연동 등의 아키텍처 설계 및 구조적 고도화 개선 등을 해 오고 있으며 개발, PL 등의 역할을 맡았습니다.

다양한 Open Source 와 여러 기술적인 경험들을 통해 웹의 전반적인 기술 흐름들을 익혔으며 개발 경험이 거듭될 수록 요구사항의 기능 구현에만 거치지 않고 좀 더 OOP 적인 구조의 소프트웨어로서 안전성과 성능을 고려한 아키텍처링과 튜닝의 기술들을 접목시켜 지속적으로 더 훌륭한 소프트웨어를 완성하기 위한 연구와 개발 실무를 책임감 있게 맡아 오고 있습니다.

 

커리큘럼

전체

103개 ∙ (44시간 9분)

수업 자료

가 제공되는 강의입니다.

강의 게시일: 
마지막 업데이트일: 

수강평

아직 충분한 평가를 받지 못한 강의입니다.
모두에게 도움이 되는 수강평의 주인공이 되어주세요!