핵심 개념
1. 모듈(module), 자바스크립트 파일 하나
- 전체를 이루는 부품 하나하나
- 모듈의 이름은 하나의 파일일 수도 있고, 하나의 디렉토리일 수도 있다. 그 이유는 Node.js에서 모듈이 검색되는 순서 때문이다.
하나의 모듈에서 다른 모듈의 기능을 가져다 쓰는 법을 배우는 게 핵심이다.
require('./example.js');
// 확장자명 .js는 생략해도 된다.
require 함수가 리턴하는 객체는 상수로 대입하는 게 좋다.
- 모듈이 리턴한 객체를 상수에 대입하면 상수에 새로운 값을 재할당하려 할 때, 코드 자체에서 에러가 발생하므로 잘못된 코드를 작성하는 것을 미리 방지할 수 있다.
require 함수로 다른 모듈을 로드했을 때 리턴되는 것은 하나의 객체이다.
- 그 객체는 로드되는 모듈의 코드에서 exports또는 module.exports.라고 써서 접근할 수 있다.
모듈 내부의 것을 외부에 공개하는 방법
1) 하나씩 export로 공개
2) 공개하고 싶은 것들을 하나의 객체로 만들고, module.exports로 객체 자체를 공개
-> 둘의 차이는
A. 내가 직접 만든 모듈
B. 이미 만들어져 있는 모듈
1) 코어 모듈
- Node라는 실행 프로그램 안에 이미 포함되어 있는 모듈
- Node.js에서 제대로 된 프로그램을 만들려면 결국 코어 모듈을 사용해야 한다.
2) 서드파티 모듈
- package.json이라는 파일을 가진 디렉토리
- 제 3자(여러 개발자 또는 회사들)가 만들어서 인터넷의 공개 저장소에서 제공하는 모듈들
- 하나의 서드파티 모듈이 설치될 때는 그것이 의존하는 다른 서트파티 모듈들도 함께 설치된다.
- 다단계 의존 관계인 경우가 많다.
2. 비동기 프로그래밍
A. 비동기 실행 함수를 사용해서 프로그래밍 하는 것
- Node.js는 비동기 실행 중심의 실행환경이기 때문에 일반적인 경우 비동기 함수를 사용해야 한다.
- 하지만, Node.js는 CPU-intensive job(고화질 이미지 처리, 복잡한 시뮬레이션 계산, 딥러닝 작업 등)에는 적절하지 않다. Node.js로 개발할 때는 메인 스레드에 부하를 주면 안 된다.
비동기 실행
- 특정 작업이 완료됐을 때, 실행할 콜백을 등록해두고 바로 다음 코드로 실행을 넘기는 것
'비동기 실행', 어떤 점이 좋은가?
- 전체 시간이 단축된다.
B. 또 다른 방법 - 이벤트
- Node.js에서 제공하는 주요 API들은 이벤트 기반 구조 위에서 작성되었고, 그 구조에서는 특정 객체가 이벤트를 발생시키면 그 이벤트에 관한 콜백이 실행된다.
EventEmitter 객체의 메소드
1) on 메소드
- 이벤트 핸들러를 설정
2) emit 메소드
- 인위적으로 이벤트를 발생시키기 위해 쓴다. 그러나 자신만의 독특한 EventEmitter 객체를 만들지 않는 이상, 사용할 일이 그리 많지는 않다. 이미 코어 모듈에 존재하는 EventEmitter 객체를 사용하는 경우가 많기 때문이다.
3) once 메소드
- 특정 이벤트에 대한 이벤트 핸들러를 등록한다. on 메소드와 유사하지만, 이벤트 핸들러가 해당 이벤트에 대해서 딱 한 번만 반응해서 실행된다는 점에서 차이가 있다.
- once 메소드로 등록된 이벤트 핸들러는 한번 실행된 후에는 삭제된다고 생각하면 된다. 특정 이벤트가 어차피 한 번밖에 발생하지 않는 경우나, 이벤트 핸들러가 딱 한 번만 실행되기를 원하는 경우 사용하면 된다.
4) listeners 메소드
- 특정 이벤트에 대한 이벤트 핸들러들을 출력해주는 메소드
- 하나의 이벤트에 관해 여러 개의 이벤트 핸들러를 설정할 수 있다.
5) off 메소드
- 이벤트 핸들러를 해제하는 메소드
- 해제할 이벤트 핸들러를 정확히 지정해줘야 한다.
'프론트엔드 > Node.JS' 카테고리의 다른 글
Node.js - route handler / middleware (0) | 2023.08.24 |
---|---|
Node.js - 패키지 / packge.json과 package-lock.json / npm / (0) | 2023.08.24 |
Node.js - Express (0) | 2023.08.24 |
Node.JS 기초 - 정의 / 특징 / REPL (0) | 2023.08.17 |
LTS (0) | 2023.08.15 |
댓글