[Udemy] Java 멀티스레딩, 병행성 및 성능 최적화 후기

주노·2024년 4월 13일
6

기술부채 알쓸신잡

목록 보기
16/21
post-thumbnail
post-custom-banner

서론

평소에 프로젝트를 하면서 동시에 라는 말을 굉장히 많이 들었다.
어떤 프로젝트나 서비스에서 동시에라는 사건은 당연하게 발생할 수 있는 일이고, 이를 처리하는 개발자 혹은 엔지니어는 이러한 동시성환경에 대응할 수 있어야한다.

나는 이런 동시에 라는 환경에 대해 다소 가볍게 생각하고 있었던 것 같다.
아직 대학교 2학년 과정을 마친 상태에서는 프로세스, 스레드에 대한 개념이 잘 잡혀있지 않았다. 3학년으로 올라오는 올 해에 이러한 개념들을 잡기 시작할텐데 때마침 이러한 멀티스레딩은 좋은 예습거리이자 챌린지가 될 것 같았다.

학업, 동아리와 병행하기에 쉽지않은 도전이겠지만 이 좋은 기회를 놓치고 싶지도 않아 강의를 수강했다.

강의 설명

강의는 총 12개의 섹션으로 개요부터 고성능 IO를 위한 스레딩 모델까지 약 5.5시간의 강의로 구성되어있다.

섹션 1 - 개요

섹션 1에서는 운영체제에 대한 기초 상식을 알려준다.
운영체제란 무엇인지, 스레드는 어떻게 구성되어있는지, Context Switching, 스레드와 프로세스 등에 대한 기본적인 지식들을 컴팩트하게 다룬다.

아주 깊은 내용까지는 아니지만 대략적으로 강의 내용을 이해하는데에는 문제없는 수준으로 알려준다.
다만 전반적으로 계속해서 사용되는 개념을 짧게 설명하는만큼 더 집중해서 봐야할 것 같다.

섹션 2, 3 - 스레딩 기초

Java에서의 Thread 뿐만 아니라 기본적으로 OS에서 사용되는 Thread에 대한 설명도 함께 해주어 기초를 탄탄하게 잡아주고간다는 느낌을 받았다.

스레드를 생성하고 관리하는 방법을 이론 뿐만 아니라 실제 코드를 함께 작성하면서 예시를 보여주어 이해하기가 수월했다.

섹션 4 - 성능 최적화

멀티 스레드 환경에서 몇개까지의 스레드를 생성해야 최적의 값이 나오는지 확인한다.
여기에서 Jmeter를 활용하여 TPS를 보면서 스레드 개수가 몇개까지 할당되어야 최적의 TPS가 나오는지 확인하고, 코어수와 스레드수의 상관관계를 이해할 수 있었다.

섹션 5, 6 - 스레드 간 데이터 공유 / 병행성 문제와 솔루션

하나의 프로세스에서 스레드가 자원을 공유하고 이 자원에 동시에 접근하게 될 시 어떤 문제가 발생하는지 확인해보고 이에 대한 솔루션을 몇가지 제시한다.
Atomic 연산, race condition, volatile, syncronized, Lock 등과 같은 키워드를 학습할 수 있었다.

섹션 7 - 락킹 심화

Reentrantlock을 활용하여 Java에서 Locking을 하는 방법을 학습한다.
tryLock, interruptLock, read/write Lock 등에 대해 학습할 수 있었다.

섹션 8 - 스레드간 통신

세마포어를 활용하여 Thread를 block/release하는 방식에 대해 설명한다.
솔직히 이 파트는 완벽하게 이해하지 못했다..ㅠ
Java 코드를 보고 어떤 맥락인지는 이해하겠으나 해당 개념 자체만 두고봤을때는 이해가 잘 안되었던 것 같다.
운영체제에 대해 학습을 보완한 뒤 다시 봐야겠다 🔥

섹션 9 - Lock Free 알고리즘, 데이터 구조 및 기술

해당 섹션에서는 Thread safe가 보장되지 않는 환경에 대해 이야기하고 최종적으로는 AtomicReference<T>, compareAndSet 연산을 알아보고 Thread safe한 구조를 구축해본다.

예시를 하나하나 들어주면서 잘 설명해주시기 때문에 개념적으로 이해하기 수월했다. 하지만 나는 이 부분을 한번만 듣고는 바로 이해하기 어려웠다 ㅠㅠ..
강의자분의 강의력은 훌륭했으나 너무 단기간에 많은 지식을 넣으려고 했던 나의 욕심이였다는것이 느껴졌다

섹션 10 - 고성능 IO를 위한 스레딩 모델

해당 섹션에서는 Blocking IO, Non Blocking IO 에 대해 설명한다.
ThreadPool을 활용하여 IO 작업 간 Blocking, Non Blocking 상황에서 어떻게 요청을 효율적으로 처리할 수 있는지 알아본다.

섹션 11 - 가상 스레드와 고성능 IO

자바 21부터 지원하기 시작한 Virtual Thread에 대해 설명한다.
CPU 자원을 사용하지 않는 IO 작업에 대해 Virtual Thread를 활용하여 처리 시간을 단축하는 방법에 대해 이야기한다.
Context Switching 비용보다 Virtual Thread의 Mount/unMount 비용이 훨씬 저렴하다는 말이 기억에 남는다.

후기

전문가.. 까지는 아직 모르겠지만 그래도 Java에서 스레드를 관리하는 방법에 대해서는 대략적인 감을 잡을 수 있었다.

컴공 대학교 3학년 과정을 마치고 다시한번 이 강의를 복습하면 그때는 아~! 하는 소리와 함께 진짜 전문가가 될 수 있을 것 같다.

개인적으로는 마지막에 짧게 설명된 Virtual Thread를 외부 API를 호출하는 과정에서 사용하면 I/O 처리간 불필요한 wating Time을 줄일 수 있을 것 같다는 생각이 들었다.

지금 하고있는 운영체제 공부를 마치고 다시금 복습해보고싶은 마음이 들었다. 🔥

해당 후기는 유데미로부터 강의 쿠폰을 제공받아 작성되었습니다.
강의 링크 - 【한글자막】 Java 멀티스레딩, 병행성 및 성능 최적화 - 전문가 되기

profile
안녕하세요 😆
post-custom-banner

4개의 댓글

comment-user-thumbnail
2024년 4월 15일

오 글또시군요 :) 활동 화이팅입니다!!

1개의 답글
comment-user-thumbnail
2024년 5월 2일

동시에 맨날 이거 공부해야되는데 어떻게 해야하는거지 했는데, 나도 이거 봐야겠따

1개의 답글