- 글또 9기에서 지원받은 Udemy 강의 리뷰입니다.
- 강의를 지원받는 대신! 리뷰를 작성하기로 했다는 점!
강의를 듣기 전에
- 자바의 기본적인 문법과 원리에 대해 이해하고 있어야 한다. 자바로 어플리케이션을 개발해본 경험이 있다면 강의를 들을 때 더 이해가 잘 것이다.
- 운영체제를 미리 공부해둬야 강의를 수월하게 이해할 수 있다. 개인적으로는 운영체제를 공부하지 않았다면 강의 내용을 이해하기 어려웠을 거라고 생각한다.
강의 구성
- 강의: 링크
- 강의는 먼저 이론을 설명한 뒤 실습에 들어가는 형식으로 진행되었다.
- 중간중간 이론 퀴즈와 실습 문제가 제공한다.
1. 스레드의 개념, Runnable과 Thread
강의를 시작하기 전 가장 많이 사용하게 될 Runnable과 Thread의 기본적인 사용 방법을 알려준다. 스택 및 힙 메모리 영역에 대해 공부하며 스레드 간의 조율을 위해 사용하는 데몬 스레드와 Join 등의 개념을 배운다.
2. 처리량과 지연시간 - 성능 최적화
처리량과 지연시간의 개념에 대해 알아본다. 이미지 프로세싱 예제를 통해 처리량 최적화 실습을 진행해 스레드를 통한 병렬 컴퓨팅을 공부한다.
3. 병렬 처리 문제
임계 영역와 동기화, 경쟁 상태에 대한 개념에 대해 배운다. 임계 영역을 동기화하기 위해 volatile과 synchronized 키워드를 사용하는 방법을 실습한다.
임계 영역 혹은 공유 변수 영역은 병렬 컴퓨팅에서 둘 이상의 스레드가 동시에 접근해서는 안되는 공유 자원을 접근하는 코드의 일부를 의미한다.
4. Locking
Locking과 Deadlock의 개념을 익히고, ReentrantLock 객체 사용법을 공부한다. 읽기/쓰기 락을 사용해 효율적으로 Locking하는 기법을 배울 수 있다.
JavaFx를 사용해 ReentrantLock을 실습하는 내용이 있는데, 설정 때문에 꽤나 애를 먹었던 기억이 남는다.
5. Thread 간의 정보 교환
세마포어와 조건변수에 대한 개념을 공부하고 wait(), notify(), notifyAll() 등의 메소드 사용법을 공부한다.
6. Blocking I/O와 Non-Blocking I/O
Blocking I/O에 대해 공부하고 Blocking이 일어날 때 운영체제와 자바의 플랫폼 스레드가 어떤 식으로 동작하는지 배울 수 있다. 또한 실습을 통해 직접 스레드를 작동시켜보고 문맥교환 비용이 얼마나 되는지 직접 눈으로 확인해볼 수 있다.
Java에서 Blocking I/O 처리 방식과 Non-Blocking I/O 처리 방식에 대한 비교를 통해 장단점을 파악할 수 있다.
7. Virtual Thread
Java21에 새롭게 추가된 경량스레드인 가상스레드의 개념에 대해 공부한다. 가상스레드에 대한 개념 설명이 꽤나 상세하다. 이전에 가상스레드를 따로 공부한 적이 있었는데 내가 잘못 이해하고 있던 내용을 강의를 통해 교정할 수 있었다.
JVM에서 Virtual Thread와 Carrier Thread가 어떻게 동작하는지에 대해 이해하고, 가상스레드와 연관된 여러 개념과 오해에 대해 배울 수 있다. (처리량과 지연시간, Blocking Call의 빈도에 따른 가상스레드 효율성 등)
강의 후기
Mooc에서 반효경 교수님의 강의를 통해 운영체제를 공부한 적이 있었는데 한 번 들으면서 정리한 것이 다였기 때문에 기억이 희미해졌었다. Java 멀티스레딩, 병행성 및 성능 최적화 강의 덕분에 희미했던 운영체제에 대한 지식을 복습할 수 있어서 좋았다.
회사에서 이미지 업로드 성능 개선을 위해 스레드를 통한 병렬 처리를 사용하면서 Java와 Spring의 스레드 구현체와 사용법에 대해 공부한 적이 있었다. 그 당시에는 사용법 정도만 알고 있었는데, 강의를 통해 동작 원리와 병행성 문제에 대한 대처 방법 등을 추가로 공부해볼 수 있었다. 개인 프로젝트나 회사에서 성능 개선을 위해 스레드를 사용해본 경험이 있는 개발자라면 해당 강의를 강력 추천하고 싶다.