👋
안녕하세요~ 평비입니다!
오늘은 많이 혼동하시는 동기/비동기와 블로킹/논블로킹 개념에 대해서 나름(?) 자세하게 준비한 포스팅을 준비해봤습니다!
쉽게 표현하자면 내가 일을 시키는 입장이라고 해볼게요.
- 블로킹/논블로킹은 내 일이 중단되는지
- 동기/비동기는 시킨 일의 상황을 신경쓰는지
1. 블로킹/논블로킹
위의 도식으로 설명드리겠습니다. 왼쪽 동작은 송금, 오른쪽 동작은 비밀번호 찾기 상황입니다.
송금 프로세스는 내부적으로 잔고 확인과 이체 로직이 있습니다. 이 로직들은 블로킹 로직입니다. 송금 프로세스 입장에서, 잔고 확인을 하는 동안 다음 동작이 중단되고, 이체를 하는 동안 다음 동작이 중단됩니다. '송금 프로세스 내부에 블로킹 로직이 있다'고 표현할 수 있습니다.
비밀번호 찾기 프로세스에서 인증 번호 전송 로직은 논블로킹 로직입니다. 인증 번호를 전송한다고 비밀번호 찾기 프로세스의 다음 동작이 중단되지 않기 때문입니다. 이에 따라, 비밀번호 찾기 프로세스의 다음 동작과 인증 번호 전송 동작은 병렬로 처리됩니다.
2. 동기/비동기
위의 도식으로 설명드리겠습니다. 위쪽 동작은 파일 다운로드(스트리밍), 아래쪽 동작은 비밀번호 찾기 상황입니다.
파일 스트리밍 프로세스 내부에는 전체 파일이 청크로 나눠져서 병렬로 처리되는 동기 로직이 있습니다. 메인 프로세스가 각 청크의 다운로드 완료 여부를 계속해서 확인합니다. 호출 흐름 또한 청크1, 청크2 순서대로 순차적으로 진행됩니다. 다만, 완료 여부는 반드시 순차적이지 않습니다. 파일 스트리밍의 내부 로직이 논블로킹이기 때문입니다. 청크의 크기에 따라 완료 순서는 달라질 수 있습니다.
비밀번호 찾기 프로세스는 위 논블로킹 예시에서 사용된 동일한 예시입니다.
인증 번호 전송 로직을 나눠서 보면, 메인 프로세스인 비밀번호 찾기 프로세스가 전송 요청 시, 바로 전송 요청 완료 응답을 받습니다. 이후 메인 프로세스는 전송 완료 여부를 신경쓰지 않는 비동기 로직입니다.
이에 따라, 비동기 로직은 성공/실패를 알 수 없다는 문제가 있습니다. 사례에 적혀 있는 전송 완료 상황을 알리는 것 또한 따로 콜백 함수나 이벤트 등으로 구현을 해야 하는 것입니다.
✋ 잠깐!
보통의 경우, 동기와 비동기를 아래 그림으로 설명합니다. 하지만, 아래 그림으로 설명을 하면 동기 + 논블로킹 사례 설명이 불가능합니다. 그래서, 위와 같은 동기 + 논블로킹 사례인 파일 스트리밍 프로세스를 가져왔습니다.
3. 동기/비동기 + 블로킹/논블로킹 조합
서로 엄밀히 다른 개념인 동기/비동기와 블로킹/논블로킹의 조합을 보면 위의 도식과 같습니다.
1. 동기 + 블로킹
송금 프로세스는 잔고 확인과 이체 동작의 완료 여부를 확인하며, 완료 확인이 되어야 다음 동작이 진행되는 동기 블로킹 사례입니다. 마치 아래 그림처럼, 팀장님이 사원에게 일을 시키고 계속 보고 있는 것과 같은 상황입니다. 어지간히 중요한 일이 아니라면, 비효율적인 모습이죠?
2. 동기 + 논블로킹
파일 스트리밍 프로세스는 메인 프로세스가 순차적으로 파일 청크 다운로드를 호출합니다. 프로세스 내부에서 병렬로 수행되면서 논블로킹으로 동작합니다. 그리고, 메인 프로세스가 계속해서 완료 여부를 확인합니다. 마치, 아래 그림처럼, 팀장님이 다른 일을 하러 가면서 한 사원에게 일이 끝났는 지 확인하는 모습과 같은 상황입니다. 일을 병렬로 하는 효율적인 작업 방식인데, 완료 여부가 중요한 경우입니다.
3. 비동기 + 논블로킹
비밀번호 찾기 프로세스는 메인 프로세스가 인증 번호 전송 로직을 병렬로 실행하고, 중단 없이 다음 로직을 바로 수행합니다. 마치 아래 그림처럼, 팀장님이 사원에게 일을 시키고 다른 일을 하는 것과 같은 상황입니다.
4. 비동기 + 블로킹
흔하지 않은 상황입니다. 비동기로 수행되는데, 메인 프로세스가 블로킹되는 상황입니다. 안티 패턴이며, 이런 상황이 만들어지면 안될 것 같습니다. 종종 발생하는 경우로는, 비동기 + 논블로킹 로직을 작성하다가 실수로 논블로킹 로직에 무거운 작업이 들어가서 메인 프로세스까지 블로킹되는 상황입니다. 마치, 아래 그림처럼 팀장님이 사원에게 일을 시켰는데, 그게 사장님 보고라서 사원이 사장님에게 보고하고 있는 것을 지켜보느라 팀장님이 일을 못하는 상황입니다.
👏
자, 이렇게 기술 면접에서도 자주 언급되는, 동기/비동기와 블로킹/논블로킹에 대해서 다뤄봤습니다!
어떤가요? 개념의 차이와 조합의 예시, 실생활의 비유까지 해봤는데, 이해가 좀 되셨을까요?
평비의 이 평범한 글이 여러분에게 비범한 도움이 되었으면 좋겠습니다 👍
'기술 면접 준비' 카테고리의 다른 글
AWS와 컨테이너 (ECR, EC2, Fargate, ECS, EKS) - 기술 면접 준비 (6) | 2025.06.05 |
---|---|
ECS vs EKS(쿠버네티스)를 왜 사용할까? - 기술 면접 준비 (2) | 2025.06.04 |
동시성과 병렬성 - 기술 면접 준비 (0) | 2025.05.23 |
트랜잭션 락 - 기술 면접 준비 (1) | 2025.05.18 |
트랜잭션 격리수준 - 기술 면접 준비 (0) | 2025.05.13 |