JavaScript는 왜 싱글 스레드인가?

상태
시작 전
담당자
날짜
2024/06/26
숫자
0

Java Script 는 왜 싱글 스레드 인가요?

내가 궁금한 점 새로 알았던 내용 추가 하기
이해한 내용 자세히 적기
과제 느낌 작성 x
내가 공부 한 내용 이해한 내용 작성

JavaScript 싱글 스레드의 비밀을 풀다

여러분, 오늘 우리는 JavaScript의 세계로 깊이 들어가 보겠습니다. 때로는 한밤중의 바람처럼 신비롭고 때로는 사막의 태양처럼 분명한 이 언어는 왜 싱글 스레드로 설계되었을까요? 언어의 기원과 Node.js의 관점에서 이를 풀어보도록 하겠습니다.

[언어적 관점]

JavaScript는 왜 싱글 스레드인가?

JavaScript 는 왜 싱글 스레드 일까요?
우선 스레드가 무엇인지 부터 알아보도록 하겠습니다.

스레드란?

스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위 입니다. 스레드는 동시성과 병렬성을 활용하여 자원의 사용을 최적화 하기 위해 꼭 알아야 하고 이는 프로그램이 동시에 여러 작업을 처리할 수 있도록 하는 중요한 개념입니다
그렇다면 싱글 스레드란 어떤 의미일까요?
싱글 스레드는 한 번에 한 가지 작업만 할 수 있는 구조를 말합니다.
마치 집에서 요리를 할 때, 한 번에 한 가지 요리만 할 수 있는 것과 비슷합니다. 여러 가지를 동시에 하려고 하면 오히려 더 혼란스러워지고 일이 잘못될 수 있겠죠?
싱글 스레드는 복잡함을 줄이고, 개발자에게 직관적인 코드 작성을 가능하게 합니다. 여러 스레드가 동시에 실행되면, 스레드 간의 충돌과 동기화 문제가 발생할 수 있습니다.
따라서, JavaScript는 사용자 경험을 최적화하고 버그를 최소화하기 위해 싱글 스레드 모델을 채택하게 되었습니다.

[동기 / 비동기]

동기

코드가 작성한 순서대로 실행 된다.
ex) : 친구와 줄을 서서 순서대로 은행 업무를 보는 것

비동기

특정 작업이 완료 될 때 까지 기다리지 않고 다음 작업을 시작할 수 있습니다.
ex) : 친구와 카페에서 커피를 시키고 커피가 나올 동안 다른 일 을 하는 것

비동기 특징

비차단 방식
콜백 함수
프라미스
Async / Await

[Node.js] 관점

Node.js : 바다를 건너온 항해자

Node.js는 무엇일까요? Node.js는 서버 사이드에서 JavaScript를 사용할 수 있게 해주는 환경입니다.
쉽게 말해, 우리가 웹사이트를 방문할 때 그 뒤에서 데이터를 처리해주는 서버에서도 JavaScript를 사용할 수 있게 해주는 것입니다.
Node.js는 비동기 처리라는 마법 같은 기능을 사용합니다. 비동기 처리란 대기 시간 없이 여러 작업을 병렬로 처리 하는 기능 입니다.
마치 요리할 때, 물이 끓을 때까지 기다리지 않고 다른 요리를 먼저 준비하는 것과 비슷합니다. 물이 끓기를 기다리면서도 다른 작업을 할 수 있는 것이죠. Node.js도 이렇게 여러 가지 요청을 효율적으로 처리할 수 있게 해줍니다
Node.js의 비동기 처리는 마치 낚시를 할 때 여러 낚싯대를 동시에 사용하는 것과 같습니다. 하나의 낚싯대에서 물고기가 물기를 기다리는 동안 다른 낚싯대에서도 물고기를 잡을 수 있는 것이죠.
이처럼 Node.js는 싱글 스레드로 동작하지만, 비동기 처리를 통해 여러 작업을 동시에 처리할 수 있는 것입니다. 이는 마치 한 명의 지휘자가 오케스트라 전체를 조율하는 것과 같습니다.

이벤트 루프 : 끊임없는 무도회

JavaScript의 싱글 스레드 모델을 보완하는 핵심 요소는 바로 이벤트 루프입니다.
이벤트 루프는 마치 밤하늘의 별들이 차례로 빛을 발하는 것처럼, 비동기 작업을 순서대로 처리합니다.
이 과정에서 자바스크립트는 콜백 함수와 프로미스를 활용하여 비동기 작업을 효과적으로 관리합니다.
그 결과, 코드가 블로킹 없이 실행되며(None-Blocking), 사용자 경험은 부드럽고 원활하게 유지됩니다.

결론 : 단순함의 미학

이렇게 JavaScript와 Node.js가 싱글 스레드인 이유는 단순성과 효율성을 동시에 추구하기 때문입니다.
JavaScript는 웹 브라우저에서 안정적으로 동작하기 위해, Node.js는 서버에서 많은 요청을 효율적으로 처리하기 위해 싱글 스레드 방식을 선택한 것입니다. 마치 배를 항해할 때 한 사람이 키를 잡고, 요리를 할 때 여러 가지를 동시에 준비하는 것처럼 말이죠.