1. 동기와 비동기 방식의 차이를 설명해 주세요.
동기 방식은 작업이 순차적으로 진행되며, 하나의 작업이 끝나야 다음 작업이 시작됩니다. 반면 비동기 방식은 작업을 요청한 후 결과를 기다리지 않고, 다른 작업을 먼저 처리할 수 있는 방식입니다. 비동기 방식은 특히 네트워크 요청이나 파일 입출력처럼 시간이 오래 걸릴 수 있는 작업에서 효율적입니다.
2. 동기와 비동기 방식의 장단점은 무엇인가요?
동기 방식은 코드의 흐름이 단순하고 직관적이지만, 하나의 작업이 오래 걸리면 전체 시스템이 대기 상태에 빠질 수 있다는 단점이 있습니다. 비동기 방식은 이러한 문제를 해결해 효율성을 높일 수 있지만, 코드가 복잡해질 수 있고, 비동기 작업 간의 순서를 관리하는 것이 까다로울 수 있습니다.
3. 비동기 방식이 필요한 상황은 어떤 경우인가요?
네트워크 요청이나 파일 입출력처럼 처리 시간이 예측하기 어려운 작업에 비동기 방식을 사용하면 좋습니다. 예를 들어, 서버에서 데이터를 받아와 화면에 표시할 때, 데이터를 기다리는 동안 다른 작업이 중단되지 않도록 비동기 요청을 사용하는 것이 효율적입니다.
4. 비동기 방식에서 콜백 함수, 프로미스(Promise), async/await의 차이점은 무엇인가요?
콜백 함수는 비동기 작업이 완료되었을 때 호출되는 함수입니다. 하지만 콜백을 많이 사용하다 보면 코드가 복잡해지고 가독성이 떨어지면서 흔히 말하는 '콜백 지옥'에 빠질 수 있습니다. 이런 문제를 해결하기 위해 나온 것이 Promise인데요, Promise는 .then()과 .catch()를 통해 비동기 작업의 흐름을 좀 더 깔끔하게 처리할 수 있게 해줍니다. 그 이후에 나온 async/await는 Promise를 더 직관적으로 사용할 수 있게 한 방식입니다. async/await 덕분에 비동기 코드를 마치 동기 코드처럼 읽을 수 있어 가독성이 훨씬 좋아졌습니다.
5. 비동기 처리에서 발생할 수 있는 문제점과 해결 방안은 무엇인가요?
비동기 처리에서 발생할 수 있는 문제는 데이터의 순서 보장과 에러 처리입니다. 예를 들어 여러 개의 비동기 요청이 있을 때, 결과가 어떤 순서로 도착할지 예측할 수 없는 경우가 있습니다. 이 문제는 Promise.all()로 해결할 수 있습니다. 에러 처리 문제는 .catch()를 사용하거나 async/await와 함께 try-catch 블록을 사용하는 방식으로 해결할 수 있습니다.
6. 자바스크립트에서 비동기 처리를 위해 이벤트 루프(Event Loop)를 사용하는데, 어떻게 작동하나요?
자바스크립트는 단일 스레드로 작동하기 때문에 비동기 작업을 효율적으로 관리하기 위해 이벤트 루프를 사용합니다. 비동기 작업이 실행되면 콜백 함수가 태스크 큐(Task Queue)에 쌓이고, 콜 스택이 비워지면 이벤트 루프가 태스크 큐에서 콜백을 꺼내어 실행합니다. 이를 통해 비동기 작업을 처리하면서도 전체 애플리케이션이 중단되지 않고 동작할 수 있습니다.
7. 동기와 비동기 방식을 어떻게 선택하나요?
작업의 성격에 따라 결정합니다. 연산이 빠르고 결과를 즉시 확인해야 하는 작업에는 동기 방식이 유리하고, 반면 작업이 오래 걸리거나 외부 자원에 의존하는 작업(예: 네트워크 요청, 파일 처리 등)에는 비동기 방식이 적합합니다. 상황에 따라 필요한 방식으로 혼합하여 사용하는 경우가 많습니다.
8. 비동기 방식에서 Promise.all()과 Promise.race()의 차이는 무엇인가요?
Promise.all()은 여러 비동기 작업을 동시에 실행하고, 모든 작업이 완료될 때까지 기다린 후 결과를 반환합니다. 하나라도 실패하면 전체가 실패합니다. Promise.race()는 여러 비동기 작업 중 가장 먼저 완료된 작업의 결과를 반환하며, 나머지 작업은 무시됩니다.
9. 멀티스레드와 비동기 방식의 차이는 무엇인가요?
멀티스레드는 여러 스레드가 동시에 작업을 수행하는 방식으로, 물리적으로 작업을 병렬로 처리합니다. 반면, 비동기 방식은 단일 스레드 내에서 작업을 효율적으로 관리하는 방식으로, 이벤트 루프와 큐를 통해 중단되지 않고 작업을 처리합니다. 즉, 멀티스레드는 물리적인 병렬 처리이고, 비동기는 논리적인 비동기 처리입니다.
'면접 예상 질문 모음!' 카테고리의 다른 글
배치시스템(리눅스,c언어) -면접예상관련질문(1) (0) | 2024.11.19 |
---|---|
배치시스템,spring batch-면접예상질문 (0) | 2024.11.18 |
SPRING IOC-면접 예상 관련 질문 (0) | 2024.11.11 |
스프링 빈- 면접 예상 질문 (0) | 2024.11.11 |
스프링 빈 주입시 생기는 문제들 -면접 예상 질문 (0) | 2024.11.10 |