JS/Node.js

Node.js는 무엇일까요?

kth990303 2021. 1. 21. 19:05
반응형

안녕하세요 오늘은 Node.js에 대한 얘기를 해보려 합니다.

Node.js를 배우기 전에, 노드를 배우면 무엇을 할 수 있는지, 노드가 어떻게 돌아가는지, 노드를 배우기 전 선행지식이 뭘지 간단하게 알아보려고 합니다!


Node.js? 

Node.js

흔히 '노드'라고 불리는 Node.js는 자바스크립트 활용도가 높아지면서 생겨났습니다.

노드 또한 자바스크립트 언어의 일종인데요, 그동안 자바스크립트로 동적인 웹 페이지를 만들고, 웹서버 기능을 다른 곳 (ex. apache tomcat)에서 빌려왔다면, 노드는 서버 환경에서 작동하는 자바스크립트여서 웹서버 환경을 우리가 javascript로 제작할 수 있습니다!

즉, 노드를 배우면 실제로 작은 홈페이지, 회원가입, 게시판 기능들을 실행할 수 있는 겁니다~ 왜냐? 서버 기능이 있으니까~

 

구글 크롬 정식버전이 발표된 2008년, 크롬은 빠른 속도로 우리에게 혁명을 일으켰죠?

저도 2010년대 초반 쯤, 크롬이 인터넷 익스플로러보다 훨씬 빠르다. 너무 좋다. 이러한 말들을 들었던 것으로 기억합니다. 

이렇게 빠른 이유가 바로, 구글 크롬에 V8 자바스크립트 엔진이 탑재됐기 때문인데요. V8 자바스크립트 엔진의 빠름을 실감할 수 있겠죠? 이 V8 자바스크립트 엔진을 기반으로 개발된 js가 바로 Node.js입니다!


Node.js는 어떻게 돌아가나요?

 

Node.js는 싱글 스레드로써 이벤트 기반 비동기 방식으로 돌아갑니다. 

 


??? 싱글 스레드? 비동기 방식...? 이게 뭔 소리냐 알아듣기 쉽게 설명해라!


싱글 스레드 뜻은 간단합니다.

먼저, 스레드가 무엇이냐? 바로 프로세스 내에서 실행되는 흐름의 단위(...) 라고 합니다. 뭔소린지 아직도 이해하기 어려우실 겁니다. 쉽게 말해, 프로그램을 돌리는 것. 그냥 일꾼이라 보시면 됩니다. 즉, node.js 이녀석은 한놈이 계속 일을 한다는 뜻이라 봐도 무방합니다.

 

(엄밀히 말하자면, node.js 자바스크립트는 싱글 스레드로 돌아가나, 내부적인 플랫폼 자체는 여러 개의 스레드를 운용하므로 싱글스레드라 하지 않지만, 우리는 개발자죠! 개발자 입장에서 싱글 스레드이므로 싱글스레드 기반이라고 합니다.)

 

???: 엥? 그럼 더 안좋은거 아니냐?

 

꼭 그렇지만도 않습니다! 스레드를 여러 개 만들수록 메모리 사용량이 증가한다는 단점이 있으니까요. 

하지만 그럼 node.js가 왜 앞에서 크롬 얘기까지 하면서 빠른지 이해가 안된다고요? 일처리 속도가 엄청 느린 거 아니냐고요?

 

바로 여기서, 비동기 방식이 뭔지 설명이 나옵니다~ 쉽게 예시를 들어서 설명드리죠.


 

우리가 피자, 치킨, 햄버거를 사서 집에 가고싶다고 가정합시다.

피자집: 아이고, 30분은 기다리셔야 될 거 같아요~

치킨집: 흠, 튀기는데 20분정도면 충분합니다. 그정도 기다려주시면 됩니다.

햄버거집한텐 물어볼 필요 없습니다. 제가 햄버거집 알바 경력 2년이거든요 하하하(...) 10분정도 소요됩니다~ (사실 치킨집도 경력 꽤 있습니다 ㅠㅠ 제가 알바를 많이 했네요 ㅎ..)

 

동기 방식: 분신술로 몸을 3개로 만들어 햄버거집, 치킨집, 피자집에서 분신들이 기다려서 음식이 완성되면 가져옵니다~

비동기 방식: 10분 후, 햄버거집에 가고, 20분 째에 치킨집, 30분째에 피자집에 가서 음식을 가져옵니다~

 

이렇게 시간이 지날 때마다 음식(이벤트)이 완성되면 음식을 가져오면(이벤트 처리하면) 됩니다.

 

이렇게 분신 이용하지 않고 혼자만으로 여러 일을 할 수 있습니다. (싱글 스레드)


다른 웹서버들은 멀티 스레드 기반 동기 방식으로 이벤트를 처리하나, node.js는 싱글 스레드로 이벤트 기반 비동기 방식으로 처리하는 겁니다.


그러면 node.js는 속도도 빠른데, 메모리 사용량도 적고, 보니까 코드도 간결하니 생산성도 좋고 노드가 짱이네요??


확실히 노드가 그런 면에서 좋긴 하지만, 분명 단점이 존재합니다.

싱글 스레드 기반이다 보니, 일을 처리하는 과정이 한 번 꼬이면, 프로그램 자체에 큰 문제가 발생하게 됩니다.

또한, 싱글 스레드 기반 비동기 방식으로 처리하다보니, 일을 계속 미루다가 일 자체(코드)가 꼬이게 되는, 이른 바 Call back Hell 상황이 발생할 수 있습니다.

일반적인 c프로그래밍, 자바프로그래밍을 해왔다면, 문법 자체가 상당히 이질감 느껴지실겁니다.

 

흔히 Node.js VS Spring, 어떤 것으로 개발할지 많이들 고민하시죠?

Node.js는 코드가 짧고 간결해 생산성이 좋다는 면이 있고, Spring은 안정성이 좋고, 취업시장에 굉장히 많이 쓰이는 데다가, 한글로 된 문서가 굉장히 많으니까요 (오죽하면 자바민국이란 말이 있을 정도입니다...ㅎㅎㅎ)

 

이렇게 두 개의 장단점이 뚜렷하다보니, 대규모 프로젝트는 보통 spring을 많이 쓰나, 팀플 및 스타트업에서는 spring도 쓰이나, node.js를 많이 쓰기도 합니다.


알겠습니다! 그럼 Node.js를 배우는 데에 선행지식이 있을까요?


필수적인 선행지식은 아래와 같습니다.

  • Html 문법 이해 및 코딩 경험
  • Javascript 문법 이해 및 코딩 경험

권장되는 선행지식은 아래와 같습니다.

  • Javascript(ES6+) 문법 이해
  • Database (Oracle, MySQL, NoSQL 어떤 것이든 좋습니다~)
  • 웹 백엔드 경험 (아무래도 백엔드 경험이 있으면, 전체적으로 이해하기 편합니다.)

보통 Javascript Web developer 커리큘럼으로

 

Html -> Css -> Javascript -> Node.js

 

이렇게 많이들 타시죠! 우리는 이제 Node.js를 배우는 겁니다.

조금만 더 달리시면 간단한 웹사이트 및 프로그램을 만들 수 있고, 이제 컴공 프로젝트 수업에서 당당해지실 수 있는 겁니다! 저도 너무 설레네요 ㅎㅎㅎ

 

그럼 다음 포스팅 때는 이벤트 처리부터 해서 간단한 웹서버 환경을 만드는 데까지 해볼게요!

 

조언 및 피드백은 언제나 환영입니다.

반응형