동기 (Synchronous)란
: 작업이 순차적으로 실행됩니다. 현재 작업이 완료될 때까지 다음 작업이 대기 상태가 됩니다.
✔️ 장점
◾ 직관적인 코드 흐름
- 작업이 순차적으로 실행되기 때문에 이해하기 쉽고 디버깅하기 용이합니다.
- 코드가 위에서 아래로 실행되므로 예측 가능한 동작을 보입니다.
◾ 단순한 구현
- 비동기 처리 방식보다 코드가 단순하며 추가적인 도구(Promise, async/await)가 필요하지 않습니다.
✔️ 단점
◾ 작업 지연 발생
- 하나의 작업이 완료될 때까지 다음 작업이 시작되지않으므로, 시간이 오래걸리는 작업(예: 파일 읽기/쓰기, 네트워크 요청)이 실행되면
시스템 전체가 멈춥니다.
- 사용자 경험(UX)이 나빠질 수 있습니다.
◾ 비효율성
- I/O 작업(디스크 읽기/쓰기, 네트워크 요청 등)을 수행하는 동안 CPU가 유휴 상태가 됩니다.
function syncTask() {
console.log("Task 1 시작");
for (let i = 0; i < 1e9; i++) {} // 작업 지연
console.log("Task 1 완료");
console.log("Task 2 시작");
}
syncTask();
// 출력: Task 1 시작 -> Task 1 완료 -> Task 2 시작
동기 (Asynchronous)란
: 작업이 시작되면 완료 여부와 상관없이 다음 작업이 실행됩니다. 결과가 준비되면 콜백, Promise, 또는 async/await을 통해 처리됩니다.
✔️ 장점
◾ 효율적인 작업 처리
- 시간이 오래 걸리는 작업을 대기 상태로 두고, 다른 작업을 동시에 수행할 수 있습니다.
- 특히 네트워크 요청, 파일 입출력, 데이터베이스 작업 등에서 효율적입니다.
◾ 향상된 사용자 경험
- 작업이 비동기로 처리되므로, 프로그램이나 웹페이지가 멈추는 현상 없이 계속 작동합니다.
- 예: 로딩 애니메이션 표시, 버튼 클릭 응답 등.
✔️ 단점
◾ 복잡한 코드 흐름
- 여러 비동기 작업이 섞여 있을 경우 코드가 복잡해질 수 있으며, 작업 간의 의존성을 처리하기 어려울 수 있습니다.
- 콜백 함수가 중첩되는 콜백 헬(callback hell) 문제가 발생할 수 있습니다.
◾ 디버깅과 예외 처리 어려움
- 비동기 작업 중 발생한 오류를 추적하거나 디버깅하는 것이 까다롭습니다.
- 각 작업의 완료 시점이 명확하지 않아 의도치 않은 동작이 발생할 수 있습니다.
function asyncTask() {
console.log("Task 1 시작");
setTimeout(() => console.log("Task 1 완료"), 2000); // 2초 후 실행
console.log("Task 2 시작");
}
asyncTask();
// 출력: Task 1 시작 -> Task 2 시작 -> (2초 후) Task 1 완료
동기 vs 비동기 언제 사용해야하는지?
| 상황 | 권장 방식 |
| 간단하고 실행 시간이 짧은 작업 | 동기 방식 |
| UI 처리, 사용자 경험이 중요한 작업 | 비동기 방식 |
| 대규모 파일 읽기/쓰기, 네트워크 요청 | 비동기 방식 |
| 작업의 순서가 중요하고 결과가 직관적이어야 함 | 동기 방식 |
결론:
- 동기 방식은 간단하고 직관적인 코드 작성에 적합하지만, 오래 걸리는 작업에서는 효율이 떨어집니다.
- 비동기 방식은 성능과 사용자 경험을 개선할 수 있지만, 복잡성이 증가할 수 있으므로 적절히 사용하는 것이 중요합니다. 😊
'취준 > CS 기술면접 준비' 카테고리의 다른 글
| 웹 표준(Web Standards)이란? (1) | 2025.01.05 |
|---|---|
| SEO(Search Engine Optimization, 검색 엔진 최적화)란? (2) | 2025.01.05 |
| HTTP와 HTTPS의 차이 (1) | 2025.01.05 |
| 프로토콜(Protocol)이란? (1) | 2025.01.05 |
| RESTful API란? (2) | 2025.01.05 |
댓글