이번에는 <모던 자바스크립트 딥다이브>를 읽고, 자바스크립트 개발 환경과 실행방법에 대해 다시금 생각해보려 하는데요.
아무래도 이 부분은 NodeJS
이야기에 초점을 맞춰 이야기할 것 같습니다.
이유는 비주얼 스튜디오 코드 및 플러그인이라던지에 관한 설명은 이미 다른 글들이 많아서 사족이라는 생각 때문입니다.
다만, 하나라도 제대로 이해하고 넘어가는 것이 중요하기에, 저는 이번 목표를 NodeJS
를 좀 더 이해하는 것으로 하고, 만족하려 합니다.
최근에 여행을 갔었는데요. 저는 날씨 하나에도 상당한 마음의 변화가 있더라구요.
날씨가 맑으면 그 날 여행은 상당히 기분이 좋게 유지가 되고, 날씨가 흐리면 뭔가 텐션이 낮아진다고 해야 할까요?
이처럼 사람은 환경에 영향을 많이 받게 됩니다.
그런데, 개발도 마찬가지에요. 어떤 환경에서 개발을 하느냐가, 곧 생산성을 바꾸기도 하고 사람들과의 협업에 있어서도 차질이 있을 수 있거든요.
우리는 오늘 자바스크립트의 개발 환경을 이야기할 것인데요. 저는 그 중 Node.js에 초점을 맞출 계획입니다.
모든 이야기를 하면 좋겠지만, 저 역시 이 책을 읽으면서 선택과 집중을 해야 하고, 그 중 저는 Node.js라는 목적지에만 초점을 맞추기로 했어요.
만약 이 여정이 마음에 들지 않으시다면, 이 글은 생략하셔도 좋을 거 같아요.
다음 챕터에서 만나요! 👐🏻
우리 이전 챕터에서 간단히 자바스크립트에 대해 설명을 했죠. 자바스크립트는 웹 브라우저 환경에서 실행하는 프로그래밍 언어입니다.
그런데 프로그래머와 개발자들은 아쉬웠어요. 브라우저 상에서 코드를 테스팅하기는 정말 쉬운 일이 아니었기 때문이죠.
따라서 이러한 아쉬움을 갖고 있던 중, Ryan Dahl
이라는 한 개발자가(이분이 최근 뜨거운 감자였던 Deno
의 창시자죠) 2009년에 어마무시한 친구를 내놓게 됩니다. 그것이 바로 Node.js
에요.
이 친구는 말이죠, 단일 스레드를 기반으로 하는데요. API 사용에 있어 발생하는 동기, 비동기 처리를 원활히 적용하는 데 있어 이벤트 루프 방식을 채택했습니다. (항상 면접 단골 질문이죠?)
또한 성능이 우수한 구글의 V8 자바스크립트 엔진을 사용하고 있습니다.
가장 무시무시한 기능 중 하나는, Node.js
를 통해 드디어 자바스크립트를 웹 브라우저 외부 환경에서도 동작시킬 수 있다는 것이에요.
따라서, 우리는 테스팅 등을 간단하게 브라우저 외에서 실행하고, 결과를 판단하고 푸시를 할 수 있게 된 것이죠!
한편, 우리는 이러한 Node.js
의 설명을 통해 다음을 유추할 수 있어요.
결국 브라우저와
Node.js
는 상이한 것이겠군!
맞습니다. 책에서 설명된 것처럼 둘은 엄연히 용도가 달라요.
브라우저는 결국 우리에게 보여주기 위한 렌더링의 목적을 갖고 있지만, Node.js
는 반드시 웹 브라우저 환경에서만 동작하지 않아도 된다!는 실행 환경을 제공하는 것이 목적이에요.
그렇기에, 호환이 가능한 문법들도 조금씩은 다릅니다. 예컨대 DOM API
가 대표적이겠죠?
굳이 Node.js에선 화면 렌더링이 필요가 없으니, 이를 제공하지 않습니다.
하지만, 반대로 Node.js
는 외부 환경을 제어할 수 있는 여러 기능을 갖고 있습니다. 예컨대 파일 시스템이 있겠네요. 보안 상의 이유로 FileReader
로 읽기만 한정되었던 브라우저의 기능은, Node.js
에서는 생성, 수정 등까지 확장할 수 있게 된 것이죠.
하지만, ECMAScript
라는 근본 뼈대는 함께 공유합니다. 그렇기에 자바스크립트의 표준 양식은 깨지 않으면서, 각자의 환경에서 각자의 목적에 맞는 쓰임을 유지할 수 있게 된 것이라고 표현하면 되겠어요!
사실 이벤트 루프의 원리 등 더 이야기를 할 요소들이 많지만, 핵심은 이것인 것 같아요.
이후에 따로 이벤트 루프에 관한 새로운 글을 만들어서, 더 디테일하게 쓰는 것이 글을 깔끔하게 쓰는 데 도움이 될 것 같았습니다.
다음은 이제 변수군요. 드디어 자바스크립트에 제대로 빠지는 시간이겠습니다. 그럼, 이상! 🌈