노드 란?
- 자바스크립트 엔진으로 빌드 된 자바스크립트 런타임
노드의 특징
- 이벤트 기반 비동기
- 논 블로킹 I/O
- 오래 걸리는 함수를 백그라운드로 보내서 다음 코드가 먼저 실행
- 노드 프로세스는 멀티 스레드이지만 직접 다룰 수 있는 스레드는 하나이기 때문에 싱글 스레드라고 표현
- 싱글스레드
- 주어진 일을 하나밖에 처리하지 못함
- 블로킹이 발생하는경우 나머지 작업은 대기
노드 서버의 장점
- 멀티 스레드 방식에 비해 컴퓨터 자원을 적게 사용함
- I/O 작업이 많은 서버로 적합 (input/output)
- 멀티 스레드 방식보다 쉬움
- 웹 서버가 내장되어 있음
- 자바스크립트를 사용함
- JSON 형식과 호환하기 쉬움
노드 서버의 단점
- CPU 코어를 하나만 사용함
- CPU 작업이 많은 서버로는 부적합
- 하나뿐인 스레드가 멈추지 않도록 관리해야 함
모듈
- 노드는 자바스크립트 코드를 모듈로 만들 수 있음
- 모듈: 특정한 기능을 하는 함수나 변수들의 집합
- 모듈로 만들면 여러 프로그램에서 재사용 가능
__filename
, __dirname
- filename: 현재 파일 경로
- dirname: 현재 폴더(디렉토리) 경로
require
- 한번 불러왔을때 파일을 읽어오고 캐싱함
- 다음에 불러올땐 메모리에 저장되어있는 파일을 불러옴
- 두 개의 모듈이 서로 require하는 상황 => 무한 반복을 막기 위해 module.exports가 빈 객체가 됨
path
- 각 OS마다 경로 표시가 다르기 때문에 모든 경우를 분기처리하기 까다로움
- path는 OS마다 알아서 경로의 분기처리
- path.resolve는 /를 절대경로로 처리, join은 상대경로로 처리
버퍼
- 일정한 크기로 모아두는 데이터
- 일정한 크기가 되면 한 번에 처리
- 버퍼링: 버퍼에 데이터가 찰 때까지 모으는 작업
스트림
- 데이터의 흐름
- 일정한 크기로 나눠서 여러 번에 걸쳐서 처리
- 스트리밍: 일정한 크기의 데이터를 지속적으로 전달하는 작업
큰 도움이 되었습니다, 감사합니다.