간간히 네트워크 관련해서 포스팅을 진행했다. 가장 재밌게 했던 글을 썼던건 아마 loadBancler였다. 항상 뭔가 주먹구구식 외우기 공부였다면, 사실 로드밸런싱을 공부를 하면서 꼬리에 꼬리를 무는 질문들을 많이했던거 같다.
2023.12.28 - [Computer Science/Network] - [Network] Load Balancer(부하 분산 장치)
2023.09.14 - [Computer Science/Network] - [Network] OSI 7 Layer(OSI 7 계층)
사실 네트워크는 뭔가 꾸준히 발전하고 있어서 따라가기가 힘들고 생각보다 계산하는 과정이 많아서 복잡한데 꼭 한번씩 실습을 할때마다 OS마냥 나의 발목을 잡곤 한다.
이번에는 살짝 어려운 이론중 하나인 비동기 , 동기에 대해서 알아보도록하겠다.
# Sync ? Async? 왜?
우리가 OS를 하면서 동기화를 이야기한 적이 있다. 어디서 였는지 한번 기억해보자.....!
바로 뮤텍스와 세마포어 였다. 우리가 그때 왜 동기화를 했을까?
바로 공유하는 공간속에서 데이터간 일관성을 유지하기 위한 방법이였다. 어떤식으로 했냐면, 한쪽에 lock을 걸고 다른쪽에서는 데이터를 보냈다.
네트워크의 동기도, 뮤텍스의 동기도 공통점은 순차적인 접근을 강조하며 한 작업이 완료되기 전까지 다음 작업을 시작하지 않는다는 것이다. 그게 바로 Sync이다.
쉽게 설명하자면, 식당을 생각해보자.
음식을 나르는 서버가 음식을 주문 받고 주문이 완료되어 음식이 나올때까지 기다린 후에 내 옆테이블로 가는 것이다. 알다시피 이 장점은 서버가 음식을 헷갈릴 일이 없다. 단순하기 때문에. 단점은 옆테이블이 기다려야한다는 것이다.
동기는 너무나도 이해하기가 쉽다. 끝날때까지 걍 기다림. 끝나는거 보고 다음일 할게~! 가 된다. 숫자 2를 찾는 Task를 하고 있다. 그리고 난 다음 숫자 3을 찾는 Task를 넣었을때, 동기 방식은 숫자 2찾고 나서 다음 차례에 숫자 3을 찾게 된다.
Sync & Async는 동시성으로 판단된다. A하면서 B도 하냐, A하고 나서 B를 하냐 그 차이이다.
# Blocking ? Non-Blocking? VS. Syn & Async
공부를 진행하다보니 Blocking과 Non-Blocking이 따라온다. Sync와 Async와 비슷해보일 수도 있지만 조금 다른이야기 이긴하다. 동기, 비동기는 "순서"와 관련이 있다. 하지만, 내가 생각하기에 Blocking과 Non-Blocking은 함수의 제어권에 관한 것이다. 이런 것들을 헷갈린 이유는 종종 JS를 하다보면 JS가 비동기로 동작하기 때문에 Callback을 받아서 동작하게된다. 그 지점에서 우리는 Async와 Non-Blocking을 혼용하면서 사용하곤 한다. 그래서 헷갈린다.(나도 헷갈렸다. JS를 그렇게 깊게 파보지 않아도 함수 몇개만 호출해도 아주 지 맘대로 호출되는 것을 볼 수 있다.)
찾아보면서 알게되었는데 Block 개념과 Sync개념이 다른것처럼 Non-Block과 Async도 다른 개념이다. Blocking이 개념이 뭘까? 농구나 배구를 하다보면 Blocking이라는 단어가 나온다.
이 단어는 상대방의 공이 나에게 못넘어오게 막는 것이다. 그렇다면 컴퓨팅에서 공을 함수 제어권이라고 생각해보자. 배구에서는 공이 넘어가면 공격권이 나에게 오는 것이다. 컴퓨팅에서도 마찬가지로 함수의 제어권을 갖고 있다는 것은 내가 다른 끝날때까지 나를 호출한 함수를 동작할 수 없게 한다는 것이다.
Non-Blocking은 그럼 뭘까? 나를 호출한 함수에게 제어권을 넘기는 것이다. 그렇게 되면 내가 처리를 다 끝냈는지 안끝냈는지 상관없이 나를 호출한 함수에게 제어권을 주는 것이다.
앞서 말한 내용을 다시 정리하면 Async와 Non-Blocking, Syn와 Blocking은 같은 내용이 아니다. Syn는 프로세스의 순서에 영향이고 Blocking은 프로세스의 함수 제어권에 따른 분류이다.
아래는 그 내용을 아주 잘 표현한 2x2그림이다.
'Computer Science > Network' 카테고리의 다른 글
[Network] Load Balancer(부하 분산 장치) (0) | 2023.12.28 |
---|---|
[Network] UDP 헤더 (0) | 2023.09.14 |
[Network] TCP 헤더 (0) | 2023.09.14 |
[Network] TCP/IP (Transmission Control Protocol/Internet Protocol) (0) | 2023.09.14 |
[Network] OSI 7 Layer(OSI 7 계층) (0) | 2023.09.14 |