본문 바로가기
BE/Node.js

Node.js 간단히 알아보기 + Express 프로젝트 생성하기

by Day0404 2021. 4. 30.
728x90
반응형

Node.js 간단히 알아보기

출처 : https://ko.wikipedia.org/wiki/Node.js

 

현재는 진행하는 프로젝트들의 API 서버는 Spring Boot로 진행하고 있습니다.

Spring Boot는 저에게 많이 사용하여 익숙하기 때문에, 그리고 딱히 다른 백엔드 언어나 프레임워크를 다뤄본적이 없기 때문에 (주니어라 개발 경력이 많지 않습니다..) 항상 Srping Boot로 API 서버를 만들어 사용했습니다.

Node.js에 관심도 있고 간단한 API 서버의 경우 Srping Boot로 만들게 되면 괜히 메모리만 많이 먹는게 아닌가 하는 생각이 들기도 하여 Node.js도 틈틈이 공부하기로 마음먹었습니다.

추후 제가 지금 만들고 있는 애플리케이션의 리팩토링이나 레거시를 걷어 낼 때 다양한 선택지도 줄 수 있을 것 같아 좋아보였고, 언어 자체도 저에겐 익숙한 JavaScript 기반이기 때문에 Node.js를 공부하는게 좋겠다 생각이 들었습니다.

Node.js 란?

위키백과에서는 아래와 같이 정의하고 있다.

Node.js는 확장성 있는 네트워크 애플리케이션(특히 서버 사이드) 개발에 사용되는 소프트웨어 플랫폼이다. 작성 언어로 자바스크립트를 활용하며 Non-blocking I/O와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가지고 있다.
내장 HTTP 서버 라이브러리를 포함하고 있어 웹 서버에서 아파치 등의 별도의 소프트웨어 없이 동작하는 것이 가능하며 이를 통해 웹 서버의 동작에 있어 더 많은 통제를 가능케 한다

여기서 중요한 키워드는 Non-blocking I/O, 단일 스레드 이벤트 루프를 통한 높은 처리 성능 정도 인 것 같습니다.

Java와 다른 점이 비동기 방식이라는 점, 단일 스레드라는 점입니다. Java는 쓰레드 기반의 동기 방식으로 처리를 하는데 Node.js의 경우 딱 Java의 반대로 작동하여 앞으로 제가 Node.js로 프로젝트를 진행한다면 가장 고려해야 할 부분인 것 같습니다.

Node.js 장점

* 동시에 request가 오더라도 비동기 방식이기 때문에 처리가 완료될 때까지 기다리지 않아도 되어 서버의 부하가 적다.

* 서버단에서 JavaScript를 사용하여 개발이 가능하기 때문에 기존 JavaScript를 알고 있는 개발자들에게는 큰 장점이다. (JavaScript만으로 프론트엔드, 백엔드 모두 개발 가능)

* npm을 통한 다양한 모듈을 제공한다. (저 같은 주니어 입장에선 제공되는 모듈이 많으면 너무 좋습니다.)

Node.js 단점

* 이벤트 기반 비동기방식이라 서버단 로직이 복잡한 경우 콜백함수의 늪에 빠질 수 있다.

* 단일 쓰레드(Single Thread)이기 때문에 하나의 작업 자체가 많이 걸리는 서비스에는 어울리지 않다.

 

단일 처리가 오래 걸리고 로직이 엄청 복잡한 서비스가 아니라면 Node.js는 굉장히 큰 매력을 지니고 있다고 생각합니다.

 

저는 공부를 하다 단일 쓰레드라면 쓰레드가 하나인데 어떻게 다수의 클라이언트로부터 오는 요청들을 효율적으로 처리하는 거지? 라는 생각이 들었습니다.

이 문제를 비동기 처리가 해결을 해줍니다.

만약 클라이언트로부터 작업을 요청받은 경우 해당 작업을 컨트롤러에 전달하고 돌아와 CPU 일을 하다가 해당 작업이 종료되면 이를 클라이언트에게 전달하고 다시 CPU 일을 합니다.

어떤 요청이 들어왔다고 해서 해당 요청의 처리가 끝날 때까지 대기하는 것이 아닌, 해당 요청이 종료되기 전까지 하던일을 계속 하는 것 입니다.

 

위 의문에 대해 공부하다 제가 이해하기 쉽게 잘 설명이 되어 있는 글을 발견하여 참조합니다. (덕분에 잘 이해하고 갑니다!)

단일 쓰레드 기반 비동기 처리에 대한 이해

https://medium.com/sjk5766/javascript-%EB%B9%84%EB%8F%99%EA%B8%B0-%ED%95%B5%EC%8B%AC-event-loop-%EC%A0%95%EB%A6%AC-422eb29231a8

 

JavaScript 비동기 핵심 Event Loop 정리

자바스크립트는 단일 스레드 기반으로 비동기로 동작하나요?

medium.com

 

Node Express

Express는 Node.js의 가장 인기있는 웹 프레임워크입니다.

Express를 통해 간단하게 웹서버를 구축할 수 있습니다.

 

IntelliJ에서 Express 프로젝트 생성하기

File -> New -> Project

프로젝트 이름과 경로를 설정해주시고 저는 View Engine을 EJS로 설정했습니다. (이전 버전에서는 Template입니다.)

이렇게 설정하고 Finish를 누르면 express 프로젝트가 생성이 됩니다.

 

처음 프로젝트 생성 시 디렉토리 구조는 아래와 같습니다.

우측 상단 Run을 클릭하거나 Alt + Shift + X 단축키를 통하여 실행이 가능합니다.

 

실행 후 localhost:3000으로 접속하면 아래와 같은 페이지가 보이게 됩니다.

Express 구조나 각 디렉토리별 역할등은 다음 포스팅에서 다룰 예정입니다.

혹시나 제가 잘못알고 있는 부분이 있다면 댓글로 남겨주세요!

반응형

댓글