Node.js와 JavaScript의 핵심 개념들

bshunter·2023년 7월 29일
0

오늘은 웹 개발에 있어 가장 중요한 언어 중 하나인 JavaScript와 그 플랫폼인 Node.js의 중요한 개념들에 대해 알아보겠습니다.
주요 개념으로는
싱글 스레드, 동기/비동기, 블로킹/논블로킹 그리고 이벤트 루프 가 있습니다. 함께 천천히 살펴봅시다.

싱글 스레드

JavaScript는 싱글 스레드 언어입니다.
즉, 한 번에 하나의 작업만 처리할 수 있게 설계되어 있습니다.
이러한 특성 덕분에, 실수로 인한
복잡한 교착 상태(deadlocks) 및 경쟁 상태(race conditions) 등의
동시성 문제가 최소화됩니다.

그러나 동시에 여러 작업을 수행하고자 할 때 병목 현상이 발생할 수도 있기에, JavaScript는 이 문제를 해결하기 위해 비동기 프로그래밍 및 이벤트 기반 프로그래밍을 도입하였습니다.

동기와 비동기 프로그래밍

동기 프로그래밍:

동기 프로그래밍은 함수 호출이 끝날 때까지 작업이 완료되어야 하며 완료될때까지 동작이 중단(blocked)됩니다.
한 작업이 완료될 때까지 다른 작업은 대기해야 하므로,
많은 작업을 동시에 처리할 수 없다는 단점이 있습니다.

비동기 프로그래밍:

비동기 프로그래밍은 함수 호출이 즉시 반환되며 작업이 비동기적으로 수행됩니다. 이러한 방식을 사용하면 블로킹을 피할 수 있으며, 다양한 코드를 병렬로 실행할 수 있습니다.
JavaScript에서는 콜백(callbacks), 프로미스(promises), 그리고 async/await 구문을 사용하여 비동기 프로그래밍을 지원합니다.

블로킹과 논블로킹

블로킹(Blocking):

블로킹 작업은 하나의 작업이 완료되기까지 다른 작업이 중단되어야 하는 작업입니다.
이는 동기식 작업과 비슷한 개념입니다.
블로킹 작업으로 인해 성능에 악영향을 주기 쉬우므로, 논블로킹 작업을 사용하여 이 문제를 극복하는 것이 좋습니다.

논블로킹(Non-blocking):

논블로킹 작업은 현재 진행 중인 작업 완료 여부와 상관없이 다른 작업을 동시에 진행할 수 있는 작업입니다. Node.js는 논블로킹 I/O를 사용하여 높은 실행 성능을 추구합니다.
이를 통해, Node.js는 수많은 네트워크 연결 및 고성능 I/O 작업을 동시에 처리할 수 있습니다.

이벤트 루프(Event Loop)

JavaScript 및 Node.js는 이벤트 루프를 사용하여 비동기 작업을 관리합니다.
이벤트 루프는 싱글 스레드에서 저수준 스레드 풀(low-level thread pool)을 사용하여 작업을 수행하고,
결과를 반환합니다. 이를 통해 싱글 스레드 언어임에도 불구하고 JavaScript 및 Node.js는 동시성과 병렬 처리를 효과적으로 구현할 수 있습니다.

정리하자면, Node.js와 JavaScript는 싱글 스레드 언어로 설계되었으나, 이벤트 루프, 비동기 프로그래밍, 논블로킹 I/O를 통해 동시성과 병렬 처리를 구현할 수 있는 강력한 플랫폼입니다. 이 기술들을 이해한다면, 웹 개발에서 발생하는 다양한 문제들을 효과적으로 해결할 수 있을 것입니다. 이를 통한 경험을 통해 다양한 애플리케이션 개발을 수월하게 진행할수 있습니다.

0개의 댓글