동기화와 비동기화
동기식 (Synchronous)
동기식은 작업을 순차적으로, 즉 한 번에 하나씩 처리하는 방식입니다. 마치 한 줄로 서서 차례를 기다리는 것과 같습니다.
- 순차적 실행: 첫 번째 작업이 완전히 끝나야만 다음 작업이 시작됩니다.
- 블로킹(Blocking): 현재 작업이 완료될 때까지 이후의 모든 작업은 대기(멈춤)합니다.
- 예측 가능한 흐름: 코드의 작성 순서대로 작업이 실행되기 때문에 흐름을 이해하기 쉽고 예측하기 용이합니다.
장점
- 구현이 단순하고 직관적: 코드를 작성하고 이해하기 쉽습니다.
- 실행 순서가 명확: 디버깅(오류 찾기)이 비교적 용이합니다.
단점
- 효율성 저하 (블로킹): 시간이 오래 걸리는 작업(예: 네트워크 통신, 파일 읽기)이 발생하면, 그 작업이 끝날 때까지 전체 프로그램이 멈춰 버립니다. 사용자 인터페이스(UI)가 멈추는 '먹통' 현상이 발생할 수 있습니다.
- 자원 낭비: 대기하는 동안 다른 유용한 작업을 할 수 없으므로 자원 활용이 비효율적일 수 있습니다.
비동기식 (Asynchronous)
비동기식은 작업을 동시에, 또는 독립적으로 처리하는 방식입니다. 작업을 시작해두고 완료되기를 기다리지 않고 바로 다음 작업을 시작합니다. 마치 여러 손님이 동시에 주문을 하고, 커피가 나오는 대로 받아 가는 것과 같습니다.
- 비순차적 실행: 작업을 시작한 후, 그 작업이 완료되기를 기다리지 않고 다음 코드를 실행합니다.
- 논블로킹(Non-blocking): 오래 걸리는 작업이 백그라운드에서 진행되는 동안에도 메인 프로그램은 다른 작업을 계속 처리할 수 있습니다.
- 콜백, Promise, async/await: 작업 완료 시점을 알리거나 결과를 처리하기 위해 콜백 함수, Promise, async/await 같은 메커니즘을 사용합니다.
- 자식 프로세스: 비동기 처리를 위해 프로세스가 다른 프로세스를 생성하여 작업을 위임할 수 있습니다.
- 오래 걸리는 작업을 메인 스레드에서 직접 처리하지 않고, 버퍼에 저장하거나 별도의 스레드에 작업을 위임하여 메인 스레드가 멈추지 않고 다른 일을 할 수 있게 합니다.
장점
- 성능 및 효율성 향상: 오래 걸리는 작업 동안에도 다른 작업을 처리할 수 있어, 시스템 자원을 효율적으로 사용하고 전반적인 응답 속도가 빨라집니다.
- 사용자 경험 개선: 웹 애플리케이션에서 페이지가 멈추지 않고 계속 상호작용이 가능하여 사용자 경험이 향상됩니다.
단점
- 구현 복잡성 증가: 코드의 실행 순서가 명확하지 않아 로직이 복잡해질 수 있고, 디버깅이 어려울 수 있습니다. (흔히 '콜백 지옥'이라 불리는 문제)
- 예측 불가능성: 나중에 시작된 작업이 먼저 끝날 수도 있어서, 작업 간의 엄격한 순서가 필요한 경우에는 별도의 동기화 메커니즘이 필요할 수 있습니다.
728x90
'CS' 카테고리의 다른 글
| 세션(Session)이란? (1) | 2025.08.03 |
|---|---|
| Prisma ORM에 대하여 (0) | 2025.08.02 |
| 클린 아키텍쳐(Clean Architecture)란? (0) | 2025.07.12 |
| 객체 지향이란? (0) | 2025.06.29 |
| 데이터 정규화(Normalization)란? (0) | 2025.06.26 |