basic authentication은 http를 사용하는 agent가 서버에 요청할때 username과 password 제공하는 방법으로, http header Authorization 필드에 username과 password 를 결합하여 base64 encoding 한 값을 value로 설정한다.
웹 리소스에 대한 가장 간단한 인증 기능을 제공하지만, http를 통해 전달되는 텍스트가 base64를 활용하여 누구나 복호화 할 수 있는 기법이므로 basic authentication 만을 사용하는것은 절대로 안전하지 않기때문에 민감정보나 귀중한 정보를 다룰때는 사용하지 않는 것이 좋으며 사용한다고 하더라도 HTTPS / TLS가 함께 사용하여야 한다.
"Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임입니다." Node.js는 이벤트 기반, 논블로킹 I/O 모델을 사용해 가볍고 효율적입니다. Node.js 패키지 모듈 매니저인 npm은 세게에서 가장 큰 오픈 소스 라이브러리 생태계이기도 합니다.
런타임은 프로그램을 실행할 수 있게 해주는 환경입니다. 기존에는 javascirpt 프로그램을 인터넷 브라우저위에서만 실행할 수 있엇습니다.
브라우저 외의 환경에서는 속도의 문제때문에 호응을 얻지 못했고 2008년 구글이 V8엔진을 사용하여 크롬을 출시하자 좋은반응을 얻었습니다.
노드는 V8과 더불어 libuv라는 라이브러리를 사용합니다.
V8 과 libuv는 C와 C++로 구현되어 있고 이벤트 기반, 논블로킹 I/O 모델을 구현하고 있습니다. 노드의 내부 구조는 다음과 같습니다.
Node.js Core Library
Node.js Bindings
V8 (자바스크립트 엔진)
libuv (비동기 I/O)
이벤트 기반
이벤트기반은 이벤트가 발생할 때 미리 지정해준 작업을 수행하는 방식을 의미합니다.
이벤트 기반 시스템에서는 이벤트가 발생할때 수행할 일들을 미리 등록해 놓아야 합니다. 이런일들을 이벤트리스너, 콜백 함수를 등록한다고 표현합니다.
이벤트루프
non-blocking i/o를 위해 사용하는 libuv에서 이벤트 루프를 제공하며 아래와 같이 동작한다.
A와 B코드를 비동기로 수행할때 A와 B모두 이벤트 기반 시스템 동작으로 실행되는데 A에서 작성된 try-catch 구문이 B에게는 전혀 영향을 주지 않는것을 명심해야합니다. 좀 더 자세히 설명하자면 A가 먼저 호출스택에 들어가서 수행되고 호출스택에서 제거됩니다. A가 제거되고 난후 B가 태스크 큐에 들어간 후 호출스택에 쌓여서 실행되기 때문에 A에서 사용된 context와 B의 context는 독립적인 컨텍스트 환경에서 전혀 영향을 받지 않습니다.