인터넷 주소를 쉽게 조작하도록 도와주는 모듈.
url처리에는 기존 방식의 url과 WHATWG두 방법으로 분류된다.

위쪽은 기존의 url구분 방법이고, 아래쪽은 WHATWG의 url 구분 방법이다.
기존 구노드 방식에는 두 메서드를 주로 사용함.
WHATWG방식에서는 serarch 부분을 searchParams라는 특수 개체로 반환함.
(쿼리 스트링의 처리에 도움을 줌)
url 모듈에서 구 Node url 을 사용할 때, search 기능을 더 쉽게 사용하기 위한 모듈
암호화 방식에는 단방향 / 양방향 두 종류로 나뉘며,
단방향 암호화는 해시 기법을 사용하며 웹 서비스에서 가장 많이 다루는 해시이다. 이는 한 번 암호화하면 복호화를 할 수 없는 암호화다.
현재 많이 사용되는 (단방향) 암호화 모듈은 다음과 같습다.
pbkdf2 bcrypt scrypt
양방향 대칭형 암호화는 복호화가 가능한 암호화로, 복호화를 위해선 암호화 할 때 사용한 키와 같은 키를 사용해야 한다.
이름처럼 각종 편의 기능을 모아둔 모듈.
계속해서 API가 추가되고 있지만, 가끔 deprecated되어 사라지는 경우도 있다.
자주 사용하는 메서드 2개를 소개해보자면,
util.deprecate: 함수가 deprecated 처리되었음을 알려준다. 즉, 함수가 조만간 사라지거나 변경될때 알려줄 수 있음.
util.promisify : 콜백 패턴을 프로미스 패턴으로 바꿔준다.
노드에서 멀티 스레드 방식으로 작업하는 방법은 worker_threads 모듈로 가능하다.
멀티 스레딩을 할 때는 일을 나눠서 처리하도록 하는 게 제일 어렵다. 스레드를 생성하고 스레드 사이에서 통신하는 데 상당한 비용이 발생하므로, 이 점을 고려해서 멀티 스레딩을 해야한다.
노드에서 다른 프로그램을 실행하고 싶거나 명령어를 수행하고 싶을 때 사용하는 모듈.
이 모듈을 통해 다른 언어의 코드를 실행하고 결괏값을 받을 수 있다.
fs 모듈은 파일 시스템에 접근하는 모듈이다. 즉, 파일을 생성하거나 삭제하고, 읽거나 쓸 수 있으며 폴더도 만들거나 지울 수 있다.
노드는 대부분의 메서드를 비동기 방식으로 처리한다. 하지만 몇몇 메서드는 동기 방식으로 사용할 수 있는데, fs 모듈이 그런 메서드를 많이 갖고 있다.
파일을 읽거나 쓰는 방식에는 크게 두 가지 방식, 즉 버퍼를 이용하는 방식과 스트림을 이용하는 방식이 있다.
영상을 시청할 때, 영상을 로딩하는 시간을 버퍼링한다라고 말하고, 영상을 실시간으로 송출할 때는 스트리밍한다고 말한다. 즉, 버퍼링은 영상을 재생할 수 있을 때까지 데이터를 모으는 동작이며, 스트리밍은 영상 데이터를 조금씩 전송하는 동작이다.
노드의 버퍼와 스트림도 비슷한 개념이다. 노드는 파일을 읽을 때 메모리에 파일 크기만큼 공간을 마련해두며 파일 데이터를 메모리에 저장한 뒤 사용자가 조작할 수 있도록 한다. 이 때 메모리에 저장된 데이터가 바로 버퍼이다.


비도익 메서드를 여러 번 실행해도 백그라운드에서 동시에 처리되는데, 이 이유가 스레드풀이 존재하기 때문이다. 스레드풀이 작업을 동시에 처리하게되면 어느 것이 먼저 처리될지 몰라서 실행할 때마다 시간과 순서가 달란진다. 스레드풀을 직접 컨트롤할 수는 없지만 개수는 조절 할 수 있다.
events 모듈을 사용하여 객체를 만들어서 사용한다. 이벤트 객체는 이벤트 관리를 위한 메서드를 갖고 있다.
노드에서는 예외 처리가 정말 중요하다. 예외란 보통 처리하지 못한 에러를 가리키는데, 이러한 예외들이 실행 중인 노드 프로세스를 멈추게 만들기 때문이다.
에러가 발생할 것 같은 부분을 try / catch 문으로 감싼다.
에러가 발생했을 때 에어를 throw 한다. (반드시 try / catch 문으로 throw 한 에러를 잡아야한다.)
프로미스의 에러는 catch하지 않아도 알아서 처리된다.
process 객체에 uncaughtException 이벤트 리스너를 단다.