[Node.js]: Node.js 입문하기 _ 모듈/함수

1) process 객체의 속성/이벤트
process 객체는 프로세스 정보를 제공/제어할 수 있게 하는 객체.
1.1) process 객체의 속성
| 속성 | 설명 |
| env | 컴퓨터의 환경정보를 표시 |
| version | Node.js 버전 표시 |
| versions | Node.js와 종속된 프로그램 버전 표시 |
| arch | 프로세서의 아키텍쳐 표시 |
| platform | 플랫폼 표시 |
1.2) process 객체의 메서드
| 메서드 | 설명 |
| exit([exitCode = 0]) | 프로그램 종료 |
| memoryUsage() | 메모리 사용 정보 객체 리턴 |
| uptime() | 현재 프로그램의 실행시간 리턴 |
1.3) process 객체의 이벤트
이벤트 핸들러(이벤트 리스너)는 이벤트 발생 시 호출할 함수를 의미.
| 이벤트 | 설명 |
| exit | 프로세스 종료시 발생 |
| uncaughtException | 예외가 일어날 때 발생 |
1.4) Node.js 이벤트 연결 메서드
| 메서드 | 설명 |
| on(이벤트_이름, 이벤트_헨들러) | 이벤트 연결 |
2) os 모듈
2.1) os 모듈 추출
const os = require('os');
3) url 모듈
3.1) url 모듈 추출
const url = require('url');
3.2) url 모듈 메서드
| 메서드 | 설명 |
| parse(urlStr [parseQueryString=false, slashesDenoteHost=false]) | URL 문자열을 URL 객체로 변환 리턴 |
| format(urlObj) | URL 객체를 URL 문자열로 변환 리턴 |
| resolve(from, to) | 매개 변수를 조합하여 완전한 URL 문자열을 생성해 리턴 |
4) File System 모듈
4.1) fs 모듈 추출
const fs = require('fs');
4.2) 파일 읽기
| 메서드 | 설명 |
| fs.readFileSync(파일이름) | 동기적으로 파일 읽기 |
| fs.readFile(파일이름, 콜백함수) | 비동기적으로 파일 읽기 |
동기적: 순차적
비동기적: 비순차적 (스레드 사용)
4.3) 파일 쓰기
| 메서드 | 설명 |
| fs.writeFileSync(파일이름) | 동기적으로 파일 쓰기 |
| fs.writeFile(파일이름, 콜백함수) | 비동기적으로 파일 쓰기 |
4.4) 파일 처리와 예외
| 구분 | 방법 |
| 동기 코드 예외 처리 | try catch 구문 활용 |
| 비동기 코드 예외 처리 | 콜백 함수로 전달된 첫 매개 변수 error 활용 |
◆ 하지만 Node.js 에서 굳이 동기 처리를 사용할 이유는 없음. 비동기 관련 내용만 확실히 이해하면 됨.
5) 노드 패키지 매니저 - npm
| 내부 모듈 | 외부 모듈 |
| 어떤 프로그래밍 플랫폼이 기본적으로 제공하는 모듈 | 개발자가 내부 모듈을 조합해서 사용하기 쉬운 형태로 만들거나 새로운 기능을 구현하여 제공하는 것. |
6) request 모듈
6.1) request 모듈 추출
const request = require('request');
◆ request 모듈은 웹 요청을 쉽게 만들어주는 모듈.
7) cheerio 모듈
request 모듈로 가져온 웹 페이지 = 단순 HTML 문자열
파싱(Parshing): 단순 데이터(data) → 원하는 정보 추출 → 정보(information)
*단순 데이터에서 원하는 정보를 추출하여 정보로 만드는 과정
cheerio 모듈을 사용하면 가져온 웹 페이지의 특정 위치에서 데이터를 추출 가능.
7.1) cheerio 모듈 추출
const cheerio = require('cheerio');
◆ cheerio 모듈은 jQuery를 알아야 제대로 활용하기 쉽다. 아래 교재로 공부하면 JS와 jQuery를 공부하기 쉽다.
https://www.yeamoonsa.com/shop/item.php?it_id=20140728123835253
예문사
yeamoonsa.com
8) async 모듈
Node.js는 대부분의 메서드가 비동기적으로 구성되어 있음. 때문에 실행 순서를 정의하기 어려움.
(들여 쓰기도 많음...)
↓
콜백 지옥에 빠지기 쉬움. 이를 해결하기 위해 async 모듈을 사용함.
8.1) async 모듈 추출
const async = require('async');
8.2) async.parallel() 메서드
async.parallel() 메서드는 여러 개의 비동기 작업을 병렬로 실행하고 모든 작업이 완료될 때까지 기다린 후 결과를 수집함.
이를 통해 코드의 성능 향상을 기대할 수 있음.
8.2.1) async.parallel() 메소드 _ 예제
const async = require('async');
// 첫 번째 비동기 작업: 1초 후에 완료됨
function task1(callback) {
setTimeout(() => {
callback(null, 'Task 1 completed');
}, 1000);
}
// 두 번째 비동기 작업: 2초 후에 완료됨
function task2(callback) {
setTimeout(() => {
callback(null, 'Task 2 completed');
}, 2000);
}
// async.parallel을 사용하여 두 작업을 병렬로 실행
async.parallel([
task1,
task2
], function(err, results) {
// 모든 작업이 완료된 후 실행됨
if (err) {
console.error('Error:', err);
return;
}
// 각 작업의 결과를 출력
results.forEach((result, index) => {
console.log(`Result ${index + 1}:`, result);
});
});
위는 병렬 처리에 대한 간단한 예제이다. async.parallel() 을 사용하여 두 개의 비동기 작업을 실행하는 코드이다.
task1과 task2 함수는 각각 1초와 2초 후에 완료되는 비동기 작업을 정의한다. 이때 이 두작업은 async.parallel() 에 배열 형태로 전달되어 병렬로 실행된다.
이후 모든 작업이 완료되면 최종 콜백 함수가 실행되어 각 작업의 결과가 로그에 출력된다.
여기서 알 수 있는것은 두 작업이 동시에 실행되어 각 작업의 완료를 기다리지 않는다는 것 이다.
결과적으로 더 긴 작업시간을 갖는 task2의 작업을 기다리지 않고도 task1의 결과를 즉시 얻을 수 있는것이다.
* 본 포스팅의 내용은 '한빛아카데미_자바스크립트 프로그래밍 입문 (2판)' 의 내용을 포함합니다. *