동기(Synchronous)와 비동기(Asynchronous)
동기 처리
동기 처리에서는 요청을 보낸 후 응답을 기다리며 작업을 순차적으로 처리합니다.
즉, A작업이 끝나야 B 작업을 시작할 수 있습니다.
ex) 사용자가 버튼을 클릭해 데이터를 요청하면 서버의 응답을 받을 때까지 아무 작업도

- 코드가 순차적으로 실행되므로 직관적입니다.
- 응답을 기다리기 때문에 처리 시간이 길어지면 사용자 경험이 저하될 수 있습니다.
비동기 처리
비동기 처리에서는 요청을 보내고 응답을 기다리지 않고 다른 작업을 할 수 있습니다.
요청을 보낸 후 완료될 때마다 알림을 받거나 콜백을 통해 응답을 처리합니다.
ex) 사용자가 버튼을 클릭해 데이터를 요청하고 다른 작업을 수행하는 중 서버가 응답을 보내면 그때 결과를 처리합니다.

- 대기 시간이 줄어들어 자원을 효율적으로 사용할 수 있습니다.
- 코드 흐름이 복잡해져 디버깅과 유지보수가 어려울 수 있습니다.
블로킹(Blocking)과 논블로킹(Non-blocking)
블로킹 처리
블로킹 방식에서는 요청을 보낸 후, 응답이 돌아오기 전까지 아무 작업도 하지 않고 기다리는 방식입니다.
호출된 함수가 끝나기 전까지는 실행을 멈춥니다.
ex) 파일을 읽어오는 함수가 호출되면 파일 읽기가 끝날 때까지 다음 작업이 중지됩니다.

- 직관적이지만, 다른 작업이 대기 상태가 되므로 자원 낭비가 발생할 수 있습니다.
논블로킹 처리
논블로킹 방식은 요청을 보낸 후 결과가 준비되지 않아도 바로 다음 작업을 진행할 수 있습니다.
결과가 나오는 대로 별도로 통지받아 처리합니다.
ex) 파일을 읽으면서 동시에 다른 작업을 수행할 수 있는 경우입니다.

- 자원을 효율적으로 사용할 수 있으며, 여러 작업을 병렬로 처리할 수 있습니다,
- 코드가 복잡해질 수 있고, 관리가 어려워질 수 있습니다.
동기/비동기 & 블로킹/논블로킹 조합 예시
위의 개념들은 독립적이지만 조합하여 사용할 수 있습니다.
동기 블로킹

요청을 보낸 후 결과가 올 때까지 작업이 멈추고, 응답을 기다립니다.
ex) 전통적인 웹 요청 방식으로, 서버에 요청을 보내고 응답을 받을 때까지 기다립니다.
비동기 블로킹

작업을 요청하고 응답이 필요할 때만 기다립니다.
ex) 콜백을 사용하는 상황에서 특정 지점에서 결과를 기다리며 블로킹이 발생합니다.
동기 논블로킹

요청을 보내고 결과가 올 때까지 주기적으로 확인하며 다른 작업을 수행합니다.
ex) 파일을 주기적으로 체크하며 완료 여부를 확인하는 방식입니다.
비동기 논블로킹

요청을 보낸 후 바로 다른 작업을 수행하며 완료되면 콜백 등을 통해 알림을 받습니다.
ex) 비동기 이벤트 기반으로 동작하는 Node.js의 I/O 작업이 여기에 속합니다.
실제 사용 사례
| 케이스 | 예시 |
| 동기 + 블로킹 | 간단한 웹 페이지의 GET 요청 |
| 비동기 + 블로킹 | 비동기 방식의 I/O 작업, 완료 후 콜백 |
| 동기 + 논블로킹 | CPU 바운드 작업에서 주기적으로 작업 상태 확인 |
| 비동기 + 논블로킹 | Node.js에서 비동기 파일 I/O작업, 이벤트가 완료되면 콜백 호출 |
'개발끄적' 카테고리의 다른 글
| 414 Request-URI Too Large 오류 해결 방법 (0) | 2024.11.21 |
|---|---|
| GraphQL vs REST: 어떤 것을 선택할 것인가? (0) | 2024.11.18 |
| 크롬 디버거로 JavaScript OOM 문제 해결하기 (1) | 2024.11.15 |
| 계층형 아키텍처와 도메인형 아키텍처: 패키지 구조의 비교 (0) | 2024.06.24 |
| VO DTO Entity 개념과 차이점 (0) | 2023.11.11 |