이번 포스팅에서는 node.js에 대해 알아보려고 한다.
Node.js
- 서버 측 자바스크립트 런타임 환경
- 런타임 - 프로그래밍 언어가 구동되는 환경
- 언어가 아니고 환경임!
- 자바스크립트는 프론트엔드 언어지만, 서버단 언어로 사용하기 위해 등장한 것이 node.js
- 즉, JavaScript 언어로 프론트엔드와 백엔드 모두 구현 가능!
- 웹 브라우저가 아닌 브라우저 밖(node.js 환경)에서 자바스크립트를 사용할 수 O
- 구글 크롬에서 사용하는 V8 엔진을 탑재 → 실행 속도↑
- 이벤트 기반, 비동기 I/O 모델을 사용 → 가볍고 효율적
- Single Thread 이기 때문에, 한 번에 하나의 작업만 가능
- Thread: 프로세스 내에서 실행되는 흐름의 단위
- 하나의 프로세스에는 n개의 스레드가 존재하며, 동시에 작동할 수 있음(멀티 스레드)
- 에러 발생시, 서버가 죽기 때문에 예외 처리를 잘 해서 에러를 방지하는 것이 중요함
- Thread: 프로세스 내에서 실행되는 흐름의 단위
- → 콜 스택(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를 깃허브에 올리지 않아도 프로젝트에 사용되는 모듈을 다운받을 수 있음
'웹 백엔드' 카테고리의 다른 글
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 |