한줄평
며칠간 강의만 시청하다보니 아무리 실습을 따라해도 조금 지루한 감이 있다. 내일부터는 강의를 다보고 프로젝트(과제)를 시작할 수 있을꺼 같다
오늘의 삽질
-
강의보다가 중간에 졸아서 영상을 다시 보게되었다..
-
사실 어제부터 강의를 보기 시작했는데 요약하기에 너무 내용이 많고 중요해서 정리하는데 시간이 좀 걸렸다..
개선점 분석
- 졸리면 10분 정도 휴식시간을 갖고 다시 시작하자
지식창고
- 오늘은 실습(예제)보단 이론 위주로 작성할 예정이다.
[Node.js 입문] 강의
웹과 HTTP의 동작 방식
-
사용자가 웹 브라우저의 주소창에 URL을 입력
-
웹 브라우저는 입력받은 URL을 DNS 서버로 전달하여 해당 IP 주소를 찾음
( DNS(Domain Name Service)란? 도메인(URL)을 IP로 변환해주는 서비스 ) => DNS 서버는 도메인 이름을 IP 주소로 변환! -
웹 브라우저는 해당 IP 주소로 HTTP 요청을 전달해줌
( HTTP란? 데이터를 주고 받는 양식을 정의한 “통신 규약”(Protocol) 중 하나로 제일 널리 쓰임 ) => HTTPS 는 HTTP에서 암호화 기능이 포함된 “통신 규약”임 -
IP 주소에 연결된 웹 서버는 요청(Request)을 받아 처리! ( 웹 서버란? HTTP를 이용해 인터넷 상에서 사용자의 요청을 처리하고 응답해주는 컴퓨터/프로그램 )
-
웹 서버는 처리 결과를 HTTP Response로 브라우저에게 전달!
-
웹 브라우저는 받은 HTTP Response을 바탕으로 사용자에게 보기좋게 정리!
Node.js의 정의
Node.js는 Chrome V8 JavaScript 엔진으로 빌드된 JavaScript 런타임(실행환경)으로 대표적인 웹 프레임워크 (웹 개발 때 쉽게 만들어주는 소프트웨어 도구)기술이다.
-
특징
-
논 블로킹 I/O (Non-blocking Input/Output)
- 작업 하나 실행시켜두고 다른 작업을 막지않고 같이 실행할 수 있는 기능!
-
싱글 스레드 (Single Thread)
-
스레드(Thread)란 프로그램이 동작할 때, CPU 또는 프로세서(작업을 수행하는 전기 부품)를 사용하는 단위
-
대적되는 방식인 멀티 스레드 방식보다 사용하기 편하며 확장이 자유로움!
(단점으로 CPU 집약적 작업은 어렵다네요..)
-
-
호출 스택 (Call Stack)과 이벤트 루프 (Event Loop)
-
JavaScript는 코드를 실행하면서 호출 스택(Call Stack)에 함수를 추가(push)하고 함수가 완료되면 호출 스택에서 제거(pop)함 ( 스택형 구조 = 선입 선출 )
-
호출 스택의 방식으로 처리할 경우 시간이 많이 걸리는 작업을 기다리는 동안 다른 작업을 처리하지 못해 이를 해결하는 방법으로 이벤트 루프(Event Loop)와 이벤트 큐(Event Queue)를 사용하게 됨
-
이벤트 루프는 시간이 오래 걸리는 작업을 이벤트 큐에 넣어 비동기적으로 처리해(자동 사냥 돌리기) 바로 다른 작업을 처리할 수 있게 해줌
-
-
Package Manager
패키지 매니저(Package Manager)는 패키지를 손쉽게 다루는 작업을 안전하고 편리하게 사용하기 위한 툴로 다른 개발자들이 작성한 코드들(패키지)을 쉽게 다운로드 받거나 배포할 수 있게 해줌
- Node.js의 대표적 패키지 매니저는 npm과 yarn 이 있음
( 기본적인 Package Manger는 npm이지만 속도나 활용도는 yarn이 더 좋음 )
Express.js(Package)
Express.js는 Node.js로 서버를 빠르고 간편하게 만들 수 있도록 도와주는 가장 대표적인 웹 프레임워크로 미들웨어(Middleware)를 지원한다는 특징이 있음
(미들웨어는 사용자의 요청(Request)와 응답(Response)사이에 위치해 특정 기능을 수행해주는 소프트웨어)
ES6 Module 시스템
모듈(Module)이란 파일 단위로 분리된 코드 덩어리 를 의미한다. 이렇게 분리된 코드 덩어리들을 불러오는 방식에 따라 Javasciprt에선 두가지로 나뉘는데 CJS(CommonJs) 와 ESM(ECMA Script Module/ES6 Module)이다. ESM이 상대적 최신 모듈 시스템이며 비동기적 모듈 로딩으로 실행 간 모듈은 초기상태에서 변하지 않음 ( 모듈 로딩의 안정성이 높아 예기치 않은 결과를 초래하지 않음 )
- 기본 예제
// a.js
let module = "value";
export { module }
// another.js
import { module } from '/a.js/;
API와 REST API
-
API(Application Programming Interface)는 서로 다른 소프트웨어/어플리케이션 간의 연결을 해주는 매개체이자 규칙!
-
REST API 는 네트워크 표현 수단(URL, Headers, Method)을 이해하거나 조작하기 쉽게 도와주는 API
Request 와 Response
-
요청(Request)은 클라이언트가 서버에게 전달하려는 정보/메시지를 담는 객체를 의미함
-
응답(Response)는 서버에서 클라이언트에게 전송시켜주는 정보/메시지를 담는 객체를 의미함
-
Routing 은 클라이언트의 요청(Rquest)을 쉽게 처리/응답(Response) 할 수 있도록 도와주는 Express.js의 기능 중 하나