반응형
- 노드는 자바스크립트보다 더 많은 기능을 제공함. (운영 체제 정보 접근, 클라이언트 요청 url 정보 가져오기 등등...) -> 모듈 제공
- 노드의 모듈은 버전마다 차이가 있음.
자주 사용하는 모듈 위주로 알아보도록 한다.
🔍os
- 운영 체제의 정보를 가져옴.
- os.arch() : process.arch와 동일
- os.platform() : process.platform과 동일
- os.type() : 운영 체제 종류를 보여줌
- os.uptime() : 운영체제 부팅 이후 흐른 시간(초)을 보여줌.
- os.hostname() : 컴퓨터 이름을 보여줌
- os.release() : 운영체제 버전을 보여줌.
- os.homedir() : 홈 디렉터리 경로를 보여줌
- os.tmpdir() : 임시 파일 저장 경로를 보여줌
- os.cpus() : 컴퓨터 코어 정보를 보여줌
- os.freemem() : 사용 가능한 메모리를 보여줌
- os.totalmem() : 전체 메모리 용량을 보여줌
실행 결과
🔍path
- 폴더와 파일 경로를 쉽게 조작하도록 도와주는 모듈
- 운영체제별로 경로 구분자가 다르기 때문에 필요함.
💡윈도 : C:\Users\mycodearchive
💡POSIX(맥, 리눅스) : /home/mycodearchive
🔍url
- 인터넷 주소를 쉽게 조작하도록 도와주는 모듈
- url.parse(주소) : 주소를 분해함. username,password 대신 auth 속성, searchParams 대신 query가 있음.
- url.format(객체) : 분해되었던 url 객체를 다시 원래 상태로 조립함.
실행 결과
🔍searchParams
- getAll(키) : 키에 해당하는 모든 값들을 가져옴
- get(키) : 키에 해당하는 첫 번째 값만 가져옴
- has(키) : 해당 키가 있는지 없는지 검사함.
실행 결과
🔍querystring
- 기존 노드의 url을 사용 시 search 부분을 사용하기 쉽게 객체로 만드는 모듈
- querystring.parse(쿼리) : url의 query 부분을 자바스크립트 객체로 분해함
- querystring.stringify(객체) : 분해된 query 객체를 문자열로 다시 조립함
실행 결과
🔍crypto
- 다양한 방식의 암호화를 도와주는 모듈.
💡고객의 비밀번호는 반드시 암호화가 필요함.
- 단방향 암호화 : 복호화할 수 없는 (복호화 : 암호화된 문자열을 원래 문자열로 되돌려놓는 것) 암호화.
- 양방향 암호화 : 암호화된 문자열 복호화 가능, 키(열쇠)라는 것이 사용됨. 암호 복호화 시 암호화할 때 사용한 키와 같은 키를 사용해야함.
🔍util
- 각종 편의 기능을 모아둔 모듈.
- 계속해서 API가 추가되고 있으며 deprecated되어 사라지는 경우도 있다.
- util.deprecate : 함수가 deprecated 처리되었음을 알림. 첫 번째 인수로 넣은 함수 사용 시 경고 메시지가 출력됨.
- util.promisify : 콜백 패턴을 프로미스 패턴으로 변경함. 바꿀 함수를 인수로 제공하면됨.
실행 결과
🔍worker_threads
- 노드에서 멀티 스레드 방식으로 작업할 수 있는 모듈
- isMainThread를 통해 현재 코드가 메인 스레드에서 실행되는지, 우리가 생성한 워커 스레드에서 실행되는지 구분함.
- 메시지를 한 번만 받고 싶다면 once('message')사용.
- 워커에서 on 메서드 사용 시 직접 워커를 종료해야함. -> parentPort.close()
실행 결과
💡여러 개의 워커 스레드에 데이터 넘겨보기
- new Worker 호출 시 두 번째 인수의 workerData 속성으로 원하는 데이터를 보낼 수 있음.
- 워커에서는 workerData로 부모로부터 데이터를 받음.
- 아래 코드에서는 두 개의 워커가 돌아가고 있고 각각 부모로부터 숫자를 받아서 100을 더해 돌려줌.
- 돌려주는 순간 워커가 종료되어 worker.on('exit') 실행됨.
실행 결과
워커 스레드를 사용하지 않을 경우 상당한 시간이 소요되지만, 워커 스레드를 사용하여 여러 작업 시 속도가 빨라짐. 하지만 워커 스레드를 8개 사용한다고 해서 8배 빨라지는 것은 아니고 여러 스레드를 생성하고 통신하는 비용을 고려하여 멀티 스레딩이 필요함.
🔍child_process
- 노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈
- 다른 언어의 코드(ex)파이썬)를 실행하고 결과값을 받을 수 있다.
실행 결과 : 현재 폴더의 파일 목록 표시
🔍기타 모듈들
- assert : 값을 비교하여 프로그램이 제대로 동작하는지 테스트하는 데 사용
- dns : 도메인 이름에 대한 IP 주소를 얻어내는 데 사용
- net : HTTP보다 로우 레벨인 TCP/IPC 통신 시 사용
- string_decoder : 버퍼 데이터를 문자열로 변경 시 사용
- tls : TLS/SSL에 관련된 작업 시 사용
- tty : 터미널과 관련된 작업 시 사용
- dgram : UDP와 관련된 작업 시 사용
- v8 : v8 엔진 접근 시 사용
- vm : 가상 머신 접근 시 사용
반응형
'💻 my code archive > 📗Node.js' 카테고리의 다른 글
노드 공부 기록(7) - Node.js 자주 사용하는 미들웨어 (0) | 2022.04.22 |
---|---|
노드 공부 기록(6) - Node.js fs 모듈, 파일 시스템 접근하기, 버퍼와 스트림, 폴더 생성, 삭제, 스레드풀 (0) | 2022.04.18 |
노드 공부 기록(4) - Node.js 내장 객체 알아보기, global, console, 타이머, require, process (0) | 2022.04.14 |
노드 공부 기록(3) - 자바스크립트 문법, 구조분해 할당, 프로미스, async / await (0) | 2022.04.14 |
노드 공부 기록(2) - Node.js 개발 환경 설정하기 (0) | 2022.04.14 |