본문 바로가기

Node.js

[Node.js] 노드 내장 객체와 모듈

 

 

노드 내장 객체

 

1. global객체 

- 브라우저의 window와 같은 전역 객체(모든 파일에서 접근 가능)

- 'global' 생략 가능

 

1) console

메서드 내용
console.time(레이블) console.timeEnd(레이블)과 대응되어 같은 레이블을 가진 time과 timeEnd 사이의 시간 측정
console.log(내용) - 로그를 콘솔에 표시
- console.log(내용, 내용, ...) 처럼 여러 내용을 동시에 표현할 수 있음
console.error(에러내용) 에러를 콘솔에 표시
console.dir(객체, 옵션) - 객체를 콘솔에 표시
- 첫번째 인자로 표시할 객체, 두번째 인자로 옵션을 넣음
- 옵션의 colors를 true로 하면 콘솔에 색이 추가되어  보기가 편해짐, 기본값은 2
console.tarce(레이블) 에러가 어디서 발생했는지 추적할 수 있게 해줌

 

cf) 파일 사이에 모듈 관계가 있는 경우 현재 파일의 경로나 파일명을 알아야할 때 쓰이는 키워드 __filename, __dirname

사용 내용
console.log(__filename); 파일명 콘솔에 출력
console.log(__dirname); 파일의 경로 콘솔에 출력

 

2) 타이머

메서드 내용
setTimeout(콜백 함수, 밀리초) 주어진 밀리초(1000분의 1초) 이후에 콜백 함수 실행
setInterval(콜백 함수, 밀리초) 주어진 밀리초마다 콜백 함수 반복 실행
setImmediate(콜백 함수) 콜백 함수 즉시 실행
clearTimeout(아이디) setTimeout 취소
clearInterval(아이디) setInterval 취소
clearImmediate(아이디) setImmediate 취소

 

2. process 객체

속성 내용
process.version 설치된 노드의 버전
process.arch 프로세서 아키텍처 정보
process.platform 운영체제 플랫폼 정보
process.pid 현재 프로세스 아이디
process.uptime() 프로세스가 시작된 후 흐른 시간(단위: 초)
process.execPath 노드의 경로
process.cwd() 현재 프로세스가 실행되는 위치
process.cpuUsage() 현재 cpu 사용량
process.env - 시스템 환경변수 출력
- 서비스의 중요한 키를 저장하는 공간으로도 사용
process.nextTick(콜백) - 이벤트 루프가 다른 콜백 함수들(setImmediate, setTimeout)보다 nextTick의 콜백 함수를 우선으로 처리하도록 함
- 마이크로태스크(microtask)
process.exit 실행 중인 노드 프로세스 종료

 


노드 내장 모듈

- 노드는 웹 브라우저에서 사용되는 자바스크립트보다 운영체제 정보 접근, 클라이언트가 요청한 주소에 대한 정보 가져오기 등의 더 많은 기능을 제공함

- 노드 버전마다 모듈의 차이가 있을 수 있음

 

1. os모듈

- 컴퓨터 내부 자원에 빈번하게 접근하는 경우 사용

- 운영체제별 다른 서비스를 제공하고 싶을 때 유용

대표적인 메서드 내용
os.arch() 프로세서 아키텍처 정보
os.platform() 운영체제 플랫폼 정보
os.type() 운영체제 종류를 보여줌
os.uptime() 운영체제 부팅 후 흐른 시간(단위: 초)
os.hostname() 컴퓨터명
os.release() 운영체제 버전
os.homedir() 홈디렉터리
os.tmpdir() 임시 파일 저장 경로
os.cpus() 컴퓨터 코어 정보
os.freemem() 사용 가능한 메모리(RAM)
os.totalmem() 전체 메모리 용량
os.constants 각종 에러와 신호에 대한 정보가 담겨 있음

 

2. path 모듈

- 폴더와 파일의 경로를 쉽게 조작하도록 도와주는 모듈

- 운영체제별로 경로 구분자가 다르기 때문에 유용하게 쓰임

-windows는 windows 타입('\'), 유닉스 기반의 운영체제인 macOS, 리눅스는 POSIX 타입('/')

- 파일 경로에서 파일며이나 확장자만 따로 떼어주는 기능도 구현해두어 직접 구현할 필요 없이 사용 사능

속성과 메서드 내용
path.sep 경로의 구분자로 windows는 '\', POSIX는 '/'
path.delimiter 환경변수의 구분자 windows는 세미콜론(;)ㅣ, POSIX는 클롬(;)
path.dirname(경로) 파일이 위치한 폴더 경로
path.extname(경로) 파일의 확장자
path.basename(경로, 확장자) - 파일의 이름(확장자 포함)
- 파일의 이름만 표시하고 싶다면 두번째 인자로 파일의 확장자 넣어주면 됨
path.parse(경로) 파일의 경로를 root, dir, base, ext, name으로 분리
path.format(객체) path.parse()한 객체를 파일 경로로 합침
path.normalize(경로) /, \를 실수로 여러번 사용했거나 혼용했을 때 정상적인 경로로 변환
path.isAbsolute(경로) 파일의 경로가 절대경로인지 상대경로인지 true/false로 알려줌
path.relative(기준경로, 비교경로) 경로를 두 개 넣으면 첫 번째 경로에서 두 번째 경로로 가는 방법을 알려줌
path.join(경로, ...) - 여러 인자를 넣으면 하나의 경로로 합쳐줌 
- 상대경로인 ..(부모디렉터리)과 .(현위치)도 처리해줌
- 예: path.join('/a', '/b' 'c'); 의 결과는 /a/b/c/
path.resolve(경로, ...) - /를 만나면 절대경로로 인식해서 앞의 경로를 무시함
- 예: path.resolve('/a', '/b', '/c');의 결과는 /b/c

 

3. url 모듈

- 인터넷 주소를 쉽게 조작하도록 도와주는 모듈

- url 처리는 예전부터 노드에서 사용하던 방식의 url 과 WHATWG방식의 url 방식 두 가지가 있음

- 기존 노드 방식 url 에서 자주 사용하는 메서드

메서드 내용
url.parse(주소) - 주소 분해
- WHATWG 방식과 비교하면 username, password 대신 auth 속성이 있고, searhParams 대신 query가 있음
url.format(객체) - WHATWG 방식의 url과 기존 노드 url 모두 사용할 수 있음
- 분해되었던 url 객체를 원래 상태로 조립

 

- WHATWG 방식은 search 부분을 searchParams라는 특수한 객체로 반환 하므로 유용함

(query 같은 문자열보다 searchParams가 유용한 이유는 query의 경우 querystring 모듈을 한 번 더 사용해야하기 때문)

메서드 내용
getAll(키) 키에 해당하는 모든 값들을 가져옴
get(키) 키에 해당하는 첫 번째 값만 가져옴
has(키) 해당 키가 있는지 없는지 검사
keys() searchParams의 모든 키를 반복기(iterator, ES2015 문법)객체로 가져옴
values() searchParams의 모든 값을 반복기 객체로 가져옴
append(키, 값) 해당 키를 추가함, 같은 키의 값이 있다면 유지하고 하나 더 추가함
set(키, 값) append와 비슷하지만 같은 키의 값들을 모두 지우고 새로 추가함
delete(키) 해당 키를 제거함
toString() 조작한 searchParams 객체를 다시 문자열로 만들고, 이 문자열을 search에 대입하면 주소 객체에 반영됨

 

- 기존 노드의 url 사용 시 search 부분을 사용하기 쉽게 객체로 만드는 querystring 모듈

메서드 내용
querystring.parse(쿼리) url의 query 부분을 자바스크립트 객체로 분해
querystring.stringify(객체) 분해된 query 객체를 문자열로 다시 조립

 

4. crypto 모듈

- 다양한 방식의 암호화를 도와주는 모듈

- 단방향, 양방향 암호화 이외에도 양방향 비대칭형 암호화, HMAC등의 다양한 암호화를 제공함

 

1) 단방향 암호화 

- 암호호된 문자열을 암호화하는 기법으로 복호화는 불가

- 어떠한 문자열을 고정된 길이의 다른 문자열로 바꾸는 방식인 해시 기법을 사용

메서드 내용
createHash(알고리즘) - 사용할 해시 알고리즘을 넣음
- md5, sha1, sha256, sha512, sha3주로 사용(참고: md5, sha1은 취약점이 발견되어 사용을 권장하지 않음)
update(문자열) - 변환할 문자열을 넣음
digest(인코딩) - 인코딩할 알고리즘을 넣음
- base64, hex, latin1이 주로 사용됨

 

2) 양방향 암호화

- 암호화된 문자열을 복호화 할 수 있음

- 키를 사용하여 암복호화함

메서드 내용
crypto.createCipher(알고리즘, 키) 암호화 알고리즘과 키를 넣어서 암호화
cipher.update(문자열, 인코딩, 출력 인코딩) 암호화할 대상과 대상의 인코딩, 출력 결과물의 인코딩을 넣음
cipher.final(출력 인코딩) 출력 결과물의 인코딩을 넣어주면 암호화 완료
cipher.createDecipher(알고리즘, 키) 복호할 때 사용, 암호화할 때 사용한 키를 넣어줌
decipher.update(문자열, 인코딩, 출력 인코딩) 암호화된 문장, 그 문장의 인코딩, 복호화할 인코딩을 넣어줌
decipher.hinal(출력인코딩) 복호화 결과물의 인코딩을 넣어줌

 

 

5. util 모듈

- 각종 편의 기능을 모아둔 모듈

- 계속해서 API가 추가/삭제 업데이트가 되고 있음

메서드 내용
util.deprecate - 함수가 deprecated 처리되었음을 알려줌
- 첫번째 인자로 넣은 함수를 사용했을 때 경고 메시지 출력, 두번째 인자로 경고 메시지를 넣으면 됨
util.promisify - 콜백 패턴을 프로미스 패턴으로 바꿔줌
- 바꿀 함수를 인자로 제공하면 됨
util.callbackify 프로미스를 콜백으로 바꿔줌

 

 

6. fs 모듈

- 파일 시스템에 접근하는 모듈

메서드 내용
fs.writeFile(경로, 파일명) - 파일생성
- 콜백함수의 매개변수로 에러 또는 데이터를 받음
fs.readFile(경로, 콜백) - readFile의 결과물은 버퍼형식으로 제공되므로 toString()을 사용해 문자열로 변환 필요
fs.access(경로, 옵션, 콜백) - 폴더나 파일의 접근 가능한지 체크
- 두 번째 인자로 상수를 넣음
- F_OK: 파일 존재 여부 / R_OK: 읽기 권한여부 / W_OK: 쓰기 권한 여부 체크 
fs.mkdir(경로, 콜백) - 폴더 생성
- 이미 폴더가 있다면 에러가 발생하므로 access()메서드를 호출하여 확인해야함
fs.open(경로, 옵션, 콜백) - 파일의 아이디를 가져오는 메서드
- 파일이 업다면 파일을 생성하여 그 아이디를 가져옴
- 가져온 아이디를 통해 fs.read()나, fs.write()로 읽거나 쓰기 가능
- 두 번째 인자로 어떤 동작을 할 것인지 설정(w: 쓰기 / r: 읽기 / a: 추가)
fs.rename(기존경로, 새경로, 콜백) - 파일 이름 변경
- 기존 파일 위치와 새로운 파일 위치를 넣음
fs.readdir(경로, 콜백) - 폴더 안 내용물 확인
- 배열안에 내부 파일과 폴더명이 나옴
fs.unlink(경로, 콜백) - 파일 삭제
- 파일이 없다면 에러 발생
fs.rmdir(경로, 콜백) - 폴더 삭제
- 폴더가 없다면 에러 발생