본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
오늘은 어제 생겼던 문제를 해결할 수 있는 방법인
Executor와 Callback Group을 배웠다.
[오늘의 수강 영상]
[오늘의 필기]
Executor란?
노드의 Callback을 실행하는 메일 루프 역할을 하며
노드의 모든 Callback(토픽 구독,서비스,액션,타이머 등)를
실행하고 스케줄링하는 역할을 하는 것
노드에서 발생하는 다양한 유형의 Callback을
순차적 혹은 병렬로 처리하여
자원 활용을 최적화하고자 할 때 주로 사용한다.
다음으로 Executor의 종류를 살펴보면
Single-Threaded Executor와
Multi-Threaded Executor가 있다.
Single-Threaded Executor란?
단일 스레드에서 모든 Callback을 순차적으로 처리하는 것이다.
이는, 가장 단순하고 예측 가능한 실행 방식으로
개발과 디버깅에 유리하고
동시성이 필요 없는 간단한 노드에 적합하다.
하지만 긴 시간 동안 실행되는 Callback이 있을 경우,
다른 Callback의 처리가 지연될 수 있다.(병목현상)
만약에, 하나의 Callback이 0.5초마다 돌고
다른 하나의 Callback이 0.3초마다 돌아야할 때
Single-Threaded Executor를 사용하면
0.5초 Callback을 기다리느라
0.3초 Callback이 정박에 맞춰 못 돌 수 있다.
그래서 이를 제대로 처리하기 위해
Multi-Threaded Executor가 있다.
Multi-Threaded Executor란?
여러 스레드를 사용하여 Callback을 병렬로 처리하는 것이다.
이는, 높은 처리량이 필요한 경우 유용하고
복잡한 시스템에서 성능을 향상시킬 수 있다.
하지만, 멀티스레드 환경에서는 스레드 간 충돌이나
경쟁 상태가 발생할 수 있어,
올바른 동기화 메커니즘을 사용하는 것이 중요하게 여겨진다.
예를 들어, 두 개의 Callback에서
하나의 변수 동시에 사용하는데
Multi-Treaded Executor를 사용하고 있다면
변수 내에 저장된 값이 충돌이 날 수 있어
주의해야한다.
그럼 여기서 계속 나오고 있는
Thread는 무엇을 뜻일까 알아보니
실행중인 프로그램 내부에서
실행되는 작업단위라는 걸 알게 되었다.
다음으로 Callback Group에 대해 알아보기 전에
Callback이 무엇인지 먼저 알아보면
Callback이란?
특정 이벤트가 발생했을 때 실행되도록 미리 정해놓는 함수이다.
Callback은 주로 어떤 조건이 만족될 때
시스템이나 프레임워크에 의해 자동으로 호출되게된다.
예시로는 subscriber callback,timer callback,service callback이 있다.
여기서 subscriber callback은 topic이 트리거이고
timer callback은 시간이 트리거이고
service callback은 request가 트리거 있다.
그럼 이제 Callback Group에 대해서 알아보겠다.
Callback Group이란?
Callback들의 실행 방식을 관리하고 제어하는 메커니즘이다.
이는, Callback의 실행 방식을 세분화하여
Executor가 효과적으로 Callback을
관리할 수 있도록 돕는 기능을 가지고 있다.
또한, Callback의 실행 순서와 동시성을 관리하여,
다중 스레드 환경에서 안정적으로 노드를 운영할 수 있다.
Callback Group의 종류에는
Reentrant Callback Group와
Mutually Exclusive Callback Group가 있다.
Reentrant Callback Group이란?
그룹으로 묶인 모든 Callback을 동시에 실행할 수 있도록 하는 것이다.
이로 인해, 주기적인 센서 데이터 처리나 비동기 처리를
효율적으로 할 수 있다.
조금 부족한 그림이지만....
이 그림처럼 하나의 Group에 3개의 Callback이 있을 때
이 3개의 Callback을 동시에 실행할 수 있게 하는 것이
Reentrant Callback Group이다.
이걸 사용하면 어제 발생했던 문제인
나머지 Callback을 차단하는걸
해결할 수 있다.
Mutually Exclusive Callback Group이란?
같은 그룹에 속한 Callback은
동시에 실행되지 않도록 보장해주는 것이다.
이로 인해, 이 그룹으로 묶인 Callback들은
한 번에 하나의 Callback만 실행되며
특정 리소스를 보호하거나,
일부 작업이 연속적으로 실행되기를 원할 때
유용하게 사용할 수 있다.
특히, 데이터의 무결성을 보장해야 할 때 유용하며,
아까 Multi-Threaded Executor에서 발생할 수 있었던
예기치 않은 동시 접근에 의한 충돌을 방지할 수 있다.
이 문장에 나오는 무결성이라는 단어의 뜻을
명확히 알고 싶어서 찾아보니
데이터의 정보가 변경되거나
오염되지 않도록 하는 원칙이라고 한다!!
이것처럼 Group1에 두 개의 Callback이 있고
Thread가 두 개 있더라도
Group 안에 있는 Callback은
딱 하나만 실행된다고 이해하면 된다.
다음으로 Executor와 Callback Group의
역할 차이에 대해서 알아보면
다음 그림을 보면된다.
다음 그림에서 작업자를 Executor라고 생각하고
컨베이어 벨트를 Callback Group,
작업물은 Callback이라고 생각해보고
다음 그림들을 보면
이 경우, 한명의 작업자가 3개의 컨베이어 밸트에 있는 작업물을
해결해야하는 상황이라고 볼 수 있다.
그럼 이건 Single-Threaded Executor에
4개의 Callback 종류가 3개의 Callback Group으로
묶여 있는 걸 볼 수 있다.
이렇게 되면 작업자 혼자 이것들을
해결할 수 없으므로 잘못된 할당이라고 할 수 있다.
다음 사진을 보면
세 명의 작업자가 1개의 컨베이어 벨트에 있는 작업물을
해결해야하는 상황이며
이는 Multi-Threaded Executor에
4개의 Callback 종류가 1개의 Callback Group으로
묶여 있는 걸 볼 수 있다.
이렇게 되면 Thread를 서로 바꿔가며
하나의 Callback Group을 수행할 수는 있겠지만
굳이...?라는 생각이 든다.
마지막으로 다음 사진을 보면
세 명의 작업자가 3개의 컨베이어 벨트에 있는 작업물을
해결해야하는 상황이며
이는 Multi-Threaded Executor에
4개의 Callback 종류가 3개의 Callback Group으로
묶여 있는 걸 볼 수 있다.
이렇게 되면 딱 알맞게 숫자의 Executor와
해결가능한 Callback Group이 됐기 때문에
딱 적당한 할당이라고 볼 수 있다.
이와 같이 적절한 Executor와 Callback Group을
잘 선택하는 것도 개발자의 역량이라고 생각하며
이거에 대한 자세한 내용을 공부하려면
운영체계를 공부해야하므로
바로 딥하게 알 수는 없겠지만
나중에는 이런 것들도 알아가고 싶다.
이런 것들도 함께 알게되면 개발자로써의
능력치도 많이 업그레이드 시킬 수 있을 것이라고
생각하기 때문이다.
내일은 일정이 있어서
바로 실습을 진행하지못하고
그 다음 강의인 디버깅에 대한걸 먼저 보겠지만
토요일에 이어서 이거에 대한
실습을 해보며 직접 적용해보도록 하겠다.
#패스트캠퍼스 #직장인자기계발 #직장인공부 #환급챌린지 #패스트캠퍼스후기 #오공완
🔥누적 수강 9백만 시간 돌파 기념 100% 페이백 (03.22 - 03.27) | 패스트캠퍼스
단 6일 한정! 지금 수강 시작하면 수강료 100% 돌려드려요!
fastcampus.co.kr