노드 내장 객체
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(경로, 콜백) | - 폴더 삭제 - 폴더가 없다면 에러 발생 |
'Node.js' 카테고리의 다른 글
[Node.js] SQLite 데이터를 MariaDB로 마이그레이션하기 (0) | 2023.11.06 |
---|---|
[Node.js] 노드에서 시퀄라이즈(Sequelize)로 db다루기 (0) | 2023.11.02 |
[Node.js] Express 프로젝트 만들기 (0) | 2023.10.30 |
[Node.js] http 모듈로 웹서버 만들기 (0) | 2023.10.26 |
[Node.js] Node.js(노드) 란? (0) | 2023.10.23 |