노드 기능 알아보기
REPL
자바스크립트는 스크립트 언어라서 즉석에서 코드를 실행할 수 있음
- repl이라는 콘솔 제공
- r(read), e(evluate), p(print), l(loop)
- 윈도에서는 명령 프롬프트, 맥이나 리눅스에서는 node 입력

- 입력한 값의 결과값이 바로 출력됨
JS파일 실행하기
모듈
노드는 자바스크립트 코드를 모듈로 만들 수 있음
모듈: 특정한 기능을 하는 함수나 변수들의 집합
모듈로 만들면 여러 프로그램에서 재사용 가능

모듈 -> 패키지 -> 라이브러리
모듈 만들어보기
- 파일 끝에 module.exports로 모듈로 만들값을 지정
- 다른 파일에서 require(파일경로)로 그 모듈의 내용 가져올 수 있음
ES2015 모듈
자바스크립트 자체 모듈 시스템 문법이 생김
- 아직 노드에서의 지원은 완벽하지ㅡ 않음. mjs 확장자를 사용해야함
- 크게는 require 대신 import, module.exports 대신 export default를 사용

노드 내장 객체
global
: 노드의 전역 객체
console 객체
브라우저의 console 객체와 매우 유사
- console.time, console.timeEnd : 시간 로깅(time부터 timeEnd까지의 시간 측정),인자값이 같아야함
- console.error: 에러 로깅
- console.log:평범한 로그
- console.dir : 객체 로깅
- console.trace : 호출스택 로깅

실행 결과

타이머 메서드
set메서드에 clear 메서드가 대응됨
-
set 메서드의 리턴값(아이디)을 clear메서드에 넣어 취소
-
setTimeout(콜백함수, 밀리초):주어진 밀리초 이후에 콜백함수를 실행
-
setInterval(콜백함수, 밀리초):주어진 밀리초마다 콜백함수를 반복실행
-
setImmediate(콜백함수):콜백함수를 즉시 실행
-
cleatTimeout(아이디): setTimeout을 취소
-
cleatInterbal(아이디): setInterbal을 취소
-
cleatImmediate(아이디): setImmediate을 취소
타이머 메서드들은 메서드가 선언된 시점에서 바로 시작되어 백그라운드에 올라감!!!!

filename, dirname

module, exports
module.exports 외에도 exports로 모듈을 만들 수 있음
- 모듈 예제의 var.js를 다음과 같이 바꾼 후 실행
- 동일하게 동작
- 동일한 이유는 module.exports와 exports가 참조 관계이기 때문
- exports에 객체의 속성이 아닌 다른 값을 대입하면 참조 관계가 깨짐

this
노드에서 this를 사용할 때 주의점이 있음
- 최상위 스코프의 this는 module.export를 가르킴
- 그 외에는 브라우저의 자바스크립트와 동일
- 함수 선언문 내부의 this는 global(전역) 객체를 가르킴

require의 특성
- require가 제일 위에 올 필요 x
- require.cache에 한 번 require한 모듈에 대한 캐쉬 정보가 들어있음
- require.main은 노드 실행시 첫 모듈을 가리킴

순환참조
dep1이 dep2를 require하고 dep2가 dep1를 require하면
dep1의 module.exports가 함수가 아니라 빈 객체가 됨(무한 반복을 막기위해)
process
현재 실행중인 노드 프로세스에 대한 정보를 담고 있음

process.env
시스템 환경 변수들이 들어있는 객체
- 비밀키(데이터베이스 비밀번호, 서드파티 앱키 등)을 보관하는 용도로도 쓰임

process.nextTick(콜백)
이벤트 루프가 다른 콜백 함수들 보다 nextTick의 콜백 함수가 우선적으로 처리
- 너무 남용하면 다른 콜백 함수들 실행이 늦어짐
- 비슷한 경우로 promise가 있음(nexttick처럼 우선순위가 높음)
- 아래 예제에서 setImmediate, setTimeout보다 promise, nextTick이 먼저 실행됨

process.exit(코드)
현재의 프로세스를 멈춤
- 코드가 없거나 0이면 정상 종료
- 그 외 비정상 종료

OS
운영체제의 정보를 담고 있음
모듈은 require로 가져옴(내장 모듈이기때문에 이름만 적어주면됨)


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


단방향 암호화(crypto)
암호화는 가능하지만 복호화는 불가능
- 암호화 : 평문을 암호로
- 복호화 : 암호를 평문으로
단방향 암호화의 대표주자는 해시 기법
- 문자열을 고정된 길이의 다른 문자열로 바꿈

HASH

pbkdf2
강화된 암호화 알고리즘

