<aside> 📌 요약: NodeJS는 싱글쓰레드이긴하지만 비동기함수를 여러개 동시에 처리할 수 있다. 이는 내부적으로 노드에는 libuv라는 모듈이 있기 때문인데, 이는 C언어와 C++로 작성되어 있고, 내부적으로 시스템 커널을 사용하기때문에 멀티스레드인 커널에서 비동기처리를 수행하기 때문이다. 브라우저도 마찬가지로 비슷하게 되어있을것같다.
Node는 프레임워크가 아니라 자바스크립트 실행 환경이다.
NodeJS에는 fs, fetch, axios, path, process 등과 같은 내부 모듈이 있고, npm을 통해서 외부 모듈을 가져와 사용할 수 있다.
package.json에 여러 프로젝트 정보를 입력할 수 있는데 그 중에 “script” 속성은 자주 사용하는 긴 명령어를 짧게 단축하여 사용할 수 있도록 할 수 있고, ”dependencies” 속성은 npm으로 외부 모듈을 설치했을때 모듈 이름이 들어오는데, 다른 사람이 내 프로젝트를 클론하여 기능을 추가하고자 하는 등의 경우 등 다른 사람이 내 프로젝트를 다운받을때 모듈 패키지들을 따로 받을 필요 없이 package.json만 있으면 각 개인 환경에서 npm i 명령어로 dependecies에 있는 프로젝트 빌드에 필요한 모듈들을 다운받을 수 있다. 여기에서 dependencies-dev 에는 개발을 위한 모듈 이름들이 적히는 곳이다.
RESTful API는 http 프로토콜에서 request와 response에서 GET, POST, DELETE 요청 등에 대한 API를 잘 작성하는 규범 같은 것이다.
fetch와 axios는 같은 역할을 하지만 fetch는 내장 모듈이고 axios는 외장 모듈이며, axios가 좀 더 편리한 기능들이 많다.
노션과 같이 동기화 작업이 많이 일어나야 하는 프로그램들은 저장 할때마다 서버와 계속 통신하는게 아니라 일정 시간동안은 IndexedDB에 저장하고, 시간이 지났을때 한번씩 서버와 동기화 하는 식으로 네트워크 통신을 최소화 한다.
</aside>