5.1 Console
- Console 클래스
- Node.js의 파일 쓰기와 같은 스트림에 사용될 수 있음
- log 파일을 만들어서 console.log/warn/error와 같은 함수를 사용하여
디버깅 혹은 각종 정보성 메시지를 파일로 기록 가능
- 실무 활용
- 개발 시 디버깅을 위해 전역 객체인 console을 이용하여 터미널에 메시지 출력,
운영상에서는 로그 파일을 만들어서 관리
- 전역 객체 console
- console 모듈은 전역 객체로 등록됨 (require 필요 없음)
- console 내장 함수
- console.log(내용, ...args)
- 일반적인 로그를 콘솔에 출력
- console.error(내용, ...args)
- 에러를 콘솔에 출력
- console.table(테이블형 데이터)
- 배열/오브젝트를 테이블 형태로 콘솔에 출력
- console.time(레이블)/console.timeEnd(레이블)
- 전달한 인수 값이 일치하는 코드 사이의 실행 시간을 측정하여 출력
- console.dir(오브젝트, 옵션)
- 객체를 콘솔에 출력할 때 사용, 두 번째 옵션 (depth, colors)
5.2 Timers
- 타이머 모듈의 모든 함수는 전역 함수
- 타이머 함수
- setTimeout(콜백 함수, 밀리초)
- clearTimeout(변수명)을 통해 취소 가능
- 이벤트 루프를 블로킹하거나 이벤트 큐에 보유하고 있는 다른 실행 코드가
타임아웃의 실행을 뒤로 밀수 있어서 반드시 설정한 밀리초 이후에 실행된다는 보장은 없음
- setInterval(콜백 함수, 밀리초)
- clearInterval(변수명)을 통해 취소 가능
- setImmediate(콜백 함수)
- 현재 이벤트 루프 주기 끝에 있는 코드 실행
- setImmediate() 함수 호출 뒤에 오는 모든 코드가 먼저 실행된 후 바로 다음에 실행됨
- clearImmediate(변수명)을 통해 취소 가능
5.3 Process
- Process events
- 프로세스 객체는 EventEmitter의 인스턴스로 다음과 같은 이벤트 발생할 때마다 리스너로 등록 가능
- beforeExit
- Node.js가 이벤트 루프를 비우고 예약할 추가 작업이 없을 때 발생되는 이벤트
- exit
- process.exit()를 호출하거나 이벤트 루프가 더 이상 수행할 추가 작업이 없을 때 발생
- exit 이벤트에 등록된 리스너가 실행 마치면 프로세스는 종료
- disconnect
- Node.js 프로세스가 IPC 채널(클러스터로 자식 프로세스 생성 시)로 생성된 경우,
IPC 채널이 닫힐 때 disconnect 이벤트 발생
- message
- Node.js 프로세스가 IPC 채널(클러스터로 자식 프로세스 생성 시)로 생성된 경우,
childprocess.send()를 사용해서 상위 프로세스가 보낸 메시지를 하위 프로세스에서 수신할 때마다 발생
- process.env
- 사용자 환경을 포함하는 객체 반환
- process.nextTick
- Node.js의 이벤트 루프는 다른 콜백 함수보다 nextTick에 인수로 전달한 콜백 함수를 우선적으로 처리
- next tick queue에 추가됨
- process.exit()
- 실행 중인 Node.js 프로세스 종료
- 실무 활용
- 웹 애플리케이션 처음 구동 시 관리자가 DB 및 외부 시스템 연결 관련 설정하는 경우,
설정된 옵션이 반영되려면 반드시 Node.js 서버 재시작 필요
- forever 기능을 통해 서버가 멈추면 자동으로 재시작 적용
- 인수를 주지 않거나 상태코드 0을 주면 정상 종료, 인수로 1을 주면 비정상 종료를 의미
5.4 OS
- 운영체제 관련 유틸리티 함수 및 속성 정보 제공
- 실무 활용
- 프로그램 내에서 임시 파일을 저장할 때 임시 파일 저장 경로를 알기 위해 os.tmpdir() 함수 사용
- Node.js에서 멀티 스레드 효과를 내기 위한 방법인 클러스터를 구성할 때
현재 서버의 CPU 코어수를 알기 위해 os.cpus().length 사용
5.5 Path
- path.basename(path[,ext])
- 경로의 마지막 부분 반환
- path.delimiter
- 운영체제별로 환경 변수 구분자를 가져옴
- 윈도우는 세미콜론(;), 맥/리눅스 같은 POSIX는 콜론(:) 사용
- path.dirname(path)
- 파일이 위치한 폴더 경로 반환
- path.extname(path)
- 파일의 확장자 반환
- path.format(pathObject)
- pathObject로 주어진 프로퍼티를 사용해서 경로 문자열 반환
- dir 값이 주어지면 root 값이 주어지더라도 무시됨
- base 값이 주어지면 ext, name 값이 주어지더라도 무시됨
- path.isAbsolute(path)
- 주어진 파일의 경로가 절대경로인지 상대경로인지 알 수 있음
- path.join([...paths])
- 문자열로 주어진 경로들을 모두 합쳐서 하나의 경로로 만들어 반환
- path.parse(path)
- path.format() 함수와 반대로 문자열로 된 경로를 pathObject로 반환
- path.sep
- 경로 구분자를 반환
- 윈도우는 역슬래시, 맥/리눅스 같은 POSIX 계열은 슬래시 반환
5.6 URL
- WHATWG API
- URL 클래스를 new 생성자를 사용해서 URL 객체를 생성하는 방식
- 활용
- 주어진 url 정보에서 전달된 쿼리 데이터를 추출할 때 사용 가능
- searchParams 속성은 URLSearchParams 클래스로 쿼리 데이터를 조작하기 위한 다양한 내장 함수 제공
- 레거시 API
- require() 함수로 url을 호출한 후 parse() 함수 사용
- WHATWG API 방식과 반환되는 Object의 구조가 다름
5.7 Crypto
- 다양한 암호화 기능 제공
- 단방향 암호화 (실제 Node.js 에서 자주 사용)
- 양방향 암호화
- 대칭형 암호화
- 비대칭형 암호화
- 보안이 필요한 데이터는 반드시 암호화해서 관리해야 함
- 해킹 예방
- 개인정보 보호
- createHash() 함수 파라미터: 암호화에 사용할 알고리즘
- update() 함수 파라미터: 암호화할 문자열
- digest() 함수 파라미터: 어떤 인코딩 방식으로 암호화된 문자열을 표시할지 전달
- salting 암호화
- 해커들이 레인보우 테이블을 이용하면 암호화 이전 원본 값과 결과 값을 테이블로 가지고 있음
- 해커들이 원본 값을 알아내기 어렵게 처리하기 위해 salting 암호화 기법 이용
- randomBytes() 함수를 사용하여 64바이트 길이의 salt 생성
- pbkdf2() 함수를 사용하여 salt를 이용한 비밀번호 암호화 (암호화된 값과 salt 값 반환)
- 암호화된 비밀번호와 salt 값을 DB에 함께 저장
- 사용자가 로그인 시도 시 입력한 비밀번호와 DB에 저장된 salt 값을 사용해서 암호화된 값을 얻고,
이 값이 DB에 저장된 암호화된 비밀번호 값과 일치하는지 비교해서 로그인 처리
5.8 File system
- fs.readFile(path, [options], callback)
- 파일(path)을 옵션으로 지정한 문자 인코딩(utf8)을 사용해서 읽은 후 결과를 콜백으로 전달하는 비동기 함수
- fs.readFileSync(path, [options])
- 파일(path)을 옵션으로 지정한 문자 인코딩을 이용해서 utf-8 형식으로 읽은 후 결과를 반환하는 동기 함수
- fs.writeFile(path, data, [options], callback)
- 파일(path)을 [options] 방식을 사용해서 data를 쓰고 콜백으로 결과를 전달하는 비동기 함수
- writeFileSync(path, data, [options])
- 파일(path)을 [options] 방식을 사용해서 data를 쓰는 동기 함수
- fs.watchFile(filename[, options], listener)
- 대상이 되는 파일의 변경 사항 여부를 감시 가능
- 변경 사항 발생 시 지정한 콜백 리스너 함수 실행 가능
- 실무 활용
- DB 조작을 위한 쿼리문을 작성한 파일을 watchFile() 함수로 감시하고,
Node.js 서버를 재시작하지 않아도 변경된 내용을 바로 반영 시 많이 사용 가능
'Books > Node.js 프로젝트 일주일 ✔️' 카테고리의 다른 글
[Node.js 프로젝트 투입 일주일 전] 7장 - Express로 웹 서버 구축하기 (0) | 2022.05.08 |
---|---|
[Node.js 프로젝트 투입 일주일 전] 6장 - json-server 이용하기 (0) | 2022.05.07 |
[Node.js 프로젝트 투입 일주일 전] 4장 - Node.js 시작하기 (0) | 2022.05.05 |
[Node.js 프로젝트 투입 일주일 전] 3장 - 서버 프로그램을 위한 자바스크립트 (0) | 2022.05.05 |
[Node.js 프로젝트 투입 일주일 전] 2장 - 개발환경 구성 (0) | 2022.05.04 |
댓글