웹 백엔드

Node.js

토리쟁이 2024. 1. 22. 21:06

이번 포스팅에서는 node.js에 대해 알아보려고 한다.

 

node.js

 

 

Node.js

  • 서버 측 자바스크립트 런타임 환경
    • 런타임 - 프로그래밍 언어가 구동되는 환경
  • 언어가 아니고 환경임!
  • 자바스크립트는 프론트엔드 언어지만, 서버단 언어로 사용하기 위해 등장한 것이 node.js
  • 즉, JavaScript 언어로 프론트엔드와 백엔드 모두 구현 가능!
  • 웹 브라우저가 아닌 브라우저 밖(node.js 환경)에서 자바스크립트를 사용할 수 O
  • 구글 크롬에서 사용하는 V8 엔진을 탑재 → 실행 속도↑
  • 이벤트 기반, 비동기 I/O 모델을 사용 가볍고 효율적
  • Single Thread 이기 때문에, 한 번에 하나의 작업만 가능
    • Thread: 프로세스 내에서 실행되는 흐름의 단위
      • 하나의 프로세스에는 n개의 스레드가 존재하며, 동시에 작동할 수 있음(멀티 스레드) 
    • 에러 발생시, 서버가 죽기 때문에 예외 처리를 잘 해서 에러를 방지하는 것이 중요함
  • 콜 스택(Call Stack)이 1개
    • LIFO(Last-In First-out) 후입선출: 나중에 들어간 것이 먼저 나옴
  • 프로그래밍 난이도 ↓
  • CPU, 메모리 자원을 적게 사용
  • Non-Blocking I/O
    • Blocking: 해당 작업이 끝나야만 다음 작업을 차례대로 수행 ex) 자바스크립트
    • Non-Blocking: 완료될 때까지 기다리지 않고 빨리 완료된 순서로 처리 → 즉, 블로킹보다 같은 작업을 비교적 더 짧은 시간에 처리 가능
    • 대량의 클라이언트가 접속하는 서비스(입출력이 많은 서비스) good
    • 비동기 방식에 어울리는 서비스(스트리밍, 채팅 서비스 등) good
  • 이벤트 기반(Event-Driven) 아키텍처
    • 이벤트가 발생할 때 미리 지정해둔 작업을 수행
    • 특정 이벤트가 발생할 때 처리할 작업을 미리 등록해야 함
      • 이벤트리스너: 이벤트 등록
      • 콜백함수: 이벤트가 발생했을 때 실행되는 함수

싱글 스레드

 

 

 

NPM(Node Package Manager)

  • node.js의 패키지를 관리할 수 있는 도구
  • 세계에서 가장 큰 오픈 소스 라이브러리
  • 수 많은 모듈들이 있으므로 원하는 모듈 다운받아서 사용할 것-
    • 모듈의 장점: 코드 추상화/캡슐화/재사용
  • NPM에 업로드된 노드 모듈 패키지들 간 의존 관계 존재
  • cmd에서 프로젝트를 진행할 폴더로 이동한 후, npm init 명령어 입력
    • npm init -y(yes): package.json이 생성될 때, 기본 값으로 생성
  • npm 모듈 이름: 사용하고 싶은 모듈 설치
  • node_modules: 모듈 저장 공간(이 곳에 모듈이 설치됨)
    • 용량이 매우 크므로, 깃허브에 올리지 x
    • → 항상 .gitignore에 추가
      • .gitignore - git 버전 관리에서 제외할 파일 목록을 지정하는 파일
      • *.txt - 확장자가 txt로 끝나는 파일 모두 무시
      • !text.txt - test.txt 파일은 무시되지 X
      • test/ - test 폴더 내부의 모든 파일을 무시
      • /test - 현재 폴더 내에 존재하는 test 폴더 내부의 모든 파일 무시
  • package.json
    • 프로젝트에 대한 정보와 사용 중인 패키지 이름 및 버전 정보가 담겨 있음
    • 모듈 정보가 담긴 package.json이 있기 때문에 node_modules를 깃허브에 올리지 않아도 프로젝트에 사용되는 모듈을 다운받을 수 있음

.gitignore

'웹 백엔드' 카테고리의 다른 글

Node.js - 비동기 처리  (1) 2024.01.27
Node.js - Express 모듈과 EJS 템플릿  (1) 2024.01.26
Node.js - API와 HTTP 모듈  (0) 2024.01.25
서버(Server)와 프로토콜  (0) 2024.01.22
웹 프로그래밍 시작하기  (0) 2022.10.05