노드 시작

y0ung·2021년 6월 9일
0

node.js

목록 보기
1/4
post-thumbnail

Node.js는 Chrome V8 Javscript 엔진으로 빌드된 Javscript 런타임이다.

1. 핵심 개념

node는 서버를 실행할수 있고, 자바스크립트 프로그램을 실행하는 런타임으로서 사용할수도 있다.

1-1. 서버

서버란?

네트워크를 통해 클라이언트에 정보나 서비스를 제공하는 컴퓨터 또는 프로그램이다.
여기서 클라이언트란 요청을 보내주는 주체로 브라우저,데스크톱 프로그램, 모바일 앱, 다른 서버에 요청을 보내는 서버 등이 있다.

쉽게 말하면 클라이언트의 요청에 응답을 하는 것이 서버 이다. 하지만 무조건 응답만 있는 것이 아니고 다른 서버에 요청도 할수있다. 이때는 요청을 보낸 서버가 클라이언트 역할을 하게 된다.

서버와의 통신에대해 더 자세히 알고 싶다면 여기

노드는 자바스크립트 프로그램이 서버로서 기능하기 위한 도구를 제공하므로 서버 역할을 수행할 수 있다.

그런데 왜 굳이 노드를 이용해 서버를 만들까?

1-2. 자바스크립트 런타임

노드는 자바스크립트 런타임 이다. 따라서 노드는 자바스크립트 프로그램을 컴퓨터에서 실행할 수 있다. 쉽게 말하면 노드는 자바스크립트 실행도구 이다.


런타임이란?
: 특정 언어로 만든 프로그램들을 실행할 수 있는 환경


node.js가 나오기 전까지는 js가 브라우저의 동작을 제어하는데 사용되었고, 브라우저에서만 실행 할수 있었다. 하지만 구글의 V8엔진을 사용하여 크롬이 출시된후 노드 프로젝트를 시작할수 있었다.

노드는 V8엔진과 함께 libuv라이브러리를 사용한다. libuv라이브러리는 노드 특성인 이벤트 기반, 논 블로킹 I/O 모델을 구현하고 있다.

1-3. 이벤트 기반

이벤트 기반이란 이벤트가 발생할 때 미리 지정해둔 작업을 수행하는 방식을 의미한다. 이벤트로는 클릭이나 네트워크 요청 등이 있을 수 있다.

이벤트 기반 시스템에서는 특정 이벤트가 발생할 때 무엇을 할지 미리 등록 해두어야 한다. 이를 이벤트 리스너에 콜백 함수를 등록한다고 표현한다.

이벤트 기반 모델에서는 이벤트 루프를 통해 콜백함수 호출 여부를 결정하게 된다.

이벤트 루프에 대해 더 자세히 알고 싶다면 여기

1-4. 논 블로킹 I/O

이벤트 루프를 잘 활용하면 오래 걸리는 작업을 효율적으로 처리할 수 있다. 작업에는 동시에 실행 될수 있는 작업과 동시에 실행 할수 없는 작업이 있다. 기본적으로 자바스크립트는 싱글스레드 기반의 언어이기 때문에 동시에 실행될수 없다. 하지만 자바스크립트상에서 돌아가는 것이 아닌 I/O 작업 같은 것은 동시 처리될수 있다.

I/O ?

I/O는 입력(Input)/출력(`Output)을 의미한다.

  • 파일 시스템 접근(파일 읽기, 파일 쓰기, 폴더 만들기)
  • 네트워크를 통한 요청

I/O작업을 할때 노드는 논 블로킹 방식으로 처리하는 방법을 제공한다.

블로킹 : 이전 작업이 끝나야만 다음 작업 수행
논 블로킹 : 이전 작업이 완료될 때까지 대기하지 않고 다음 작업을 수행

작업들이 모두 처리될 수 있는 작업이라면 논블로킹 방식이 같은 작업을 더 짧은 시간에 처리할수 있는 장점이 있다.

다만 논블로킹 방식으로 코드를 작성하더라도 코드가 전부 내가 작성한 것이라면 소요 시간이 짧아 지지는 않는다. 그렇다고 I/O작업이 없다고 해서 논 블로킹이 의미가 없는 것은 아니다.

오래 걸리는 작업을 처리해야 하는 경우, 논 블로킹을 통해 실행 순서를 바꿔줌으로써 그작업 때문에 간단한 작업들이 대기하는 상황을 막을수 있다.

1-5. 싱글 스레드

싱글스레드란 스레드가 하나뿐이라는 것을 의미한다. 스레드를 이해하기 위해서는 프로세스를 알아야 한다.

프로세스

  • 운영체제에서 할당하는 작업의 단위 이다.
  • 노드나 웹 브라우저 같은 프로그램은 개별적인 프로세스 이다
  • 프로세스 간에는 메모리 등의 자원을 공유하지 않는다.

스레드

  • 프로세스 내에서 실행되는 흐름의 단위
  • 프로세스는 스레드를 여러 개 생성해 여러 작업을 동시해 처리할수 있다.
  • 스레드들은 부모 프로세스의 자원을 공유한다.
  • 같은 주소의 메모리에 접근 가능하여 데이터를 공유할 수 있다.

노드는 싱글스레드 이지만 싱글스레드로 동작 하지 않는다.

무슨 말이냐 하면 노드를 실행하면 프로세스 하나가 생성된다. 그리고 그 프로세스에서 스레드들을 생성하는데, 이때 내부적으로 스레드를 여러 개 생성한다. 그중 직접 제어할수 있는 스레드는 하나이다. 그래서 싱글 스레드로 여겨지는 것이다.

2. 서버로서의 노드

노드에는 웹서버가 내장되어 있어 입문자가 쉽게 접근 할수 있다. 하지만 규모가 커질경우 nginx등의 웹 서버를 노드 서버와 연결해야 한다.

노드는 자바스크립트 언어를 사용하는데, 웹 브라우저도 자바스크르비트를 사용하므로 서버까지 노드를 사용하면 하나의 언어로 웹 사이트를 개발 할 수 있다. 이로써 개발 생산성을 획기적으로 높였다.

2-1. 노드의 장단점

장점

  • 멀티 스레드 방식에 비해 적은 컴퓨터 자원 사용
  • I/O 작업이 많은 서버로 적합
  • 멀티 스레드 방식보다 쉽다
  • 웹 서버가 내장되어 있다
  • 자바스크립트를 사용한다.
  • JSON 형식과 쉽게 호환된다.

단점

  • 싱글 스레드여서 CPU 코어를 하나만 사용
  • CPU 작업이 많은 서버로는 부적합
  • 하나뿐인 스레드가 멈추지 않도록 관리가 필요
  • 서버 규모가 커졌을 때 서버를 관리하기 어려움
  • 어중간한 성능

3. 서버 외의 노드

처음에 노드는 서버로 사용했지만, 자바스크립트 런타임이므로 용도가 서버에만 한정되지 않았다.
노드는 웹, 모바일, 데스크톱 애플리케이션 개발에서도 사용되기 시작했다.

노드 기반으로 돌아가는 대표적인 웹 프레임워크로는 앵귤러, 리액트, 뷰 등이 있다.

4. 개발 환경 설정하기

https://nodejs.org/ko/ 노드 공식 사이트에서 Current버전을 다운받는다.

LTS

  • 기업을 위해 3년간 지원하는 버전.
  • 짝수 버전
  • 서버를 안정적으로 운영때 사용.
  • 최신기능을 사용하지 못할수 있다.

Current

  • 최신 기능 사용 가능
  • 에러가 발생할 수 있다.

참고

  • 본 내용은 Node.js 교과서 개정 2판의 내용을 공부하며 정리하였습니다.
profile
어제보다는 오늘 더 나은

0개의 댓글