
오늘부터 Node.js 입문 강의를 수강하였다.
✏️ 웹 브라우저 (Web browser)
: 웹 서버로부터 정보를 요청하고 받아 사용자에게 보여주는 SW
✏️ 브라우저의 통신 방식
(1) 사용자가 웹 브라우저의 주소창에 URL 입력
(2) 웹 브라우저는 입력받은 URL을 DNS 서버로 전달, 해당 IP 주소를 찾음
(3) DNS 서버는 도메인 이름을 IP 주소로 변환
(4) 웹 브라우저는 위의 IP 주소로 HTTP 요청을 전달
(5) IP 주소에 연결된 웹 서버는 요청을 받아 처리
(6) 웹 서버는 처리 결과를 HTTP response로 브라우저에게 전달
(7) 웹 브라우저는 받은 HTTP response를 바탕으로 사용자에게 표시
✏️ URL (Uniform Resource Locator)
: 인터넷 상의 리소스 위치를 나타내기 위해 사용하는 주소 비슷한 것.
<프로토콜>://<도메인명>:<포트>/<경로>의 구조를 가짐
✏️ DNS (Domain Name System)
: 도메인 이름을 중개하여 URL을 IP로 변형해주는 서비스를 제공
✏️ IP (Internet Protocol)
: 각각의 네트워크에 연결된 장치들이 고유한 IP 주소를 가져 인터넷 상에 존재하는 해당하는 장치의 위치를 식별할 수 있게 해줌. IPv4와 IPv6가 있는데 현재는 IPv4가 많이 사용되고 있음.
🖊️ HTTP
: 데이터를 주고 받는 양식을 정의한 통신 규약 중 하나
🖊️ HTTP로 데이터 주고받는 방법
: HTTP에서는 언제나 요청(Request)와 응답(Response)라는 개념이 존재함. 브라우저는 서버에게 원하는 페이지를 요청하고, 서버는 페이지가 있는지 확인하고 있으면 이에 관한 데이터를 반환해주고 없으면 엾는 페이지에 대한 데이터를 반환해줌. 그리고 브라우저는 서버에게 전달 받은 데이터를 기반으로 브라우저에 그려줌
🖥️ 웹 서버
: HTTP를 이용하여 인터넷 상에서 클라이언트의 요청을 처리하고 정적인 콘텐츠를 제공해주는 컴퓨터 또는 프로그램. 필요한 경우 클라이언트의 요청을 웹 어플리케이션 서버(WAS)로 전달하여 처리할 수 있다.
대표적인 웹 서버로 Apache, Nginx 등이 있음
🖥️ 웹 어플리케이션 서버
: 동적인 콘텐츠를 제공, 주로 데이터 베이스를 조회하거나 복잡한 계산같은 비즈니스 로직을 처리함. 따라서 웹 서버에 비해 처리 시간이 길어질 수 있다.

자바스크립트를 브라우저가 아닌 컴퓨터에서 브라우저 없이 실행하게 도와주는 환경으로, 논 블로킹 I/O, 싱글 스레드, 이벤트 루프의 특성을 가지고 있다.
✏️ Non-Blocking Input/Output
: 블로킹 I/O는 한번에 하나의 작업만 처리하고 호출된 함수가 자기 작업을 모두 끝낼 때까지 호출한 함수에게 제어권을 넘기지 않는 반면, 논블로킹 I/O는 시스템 호출이 완료되기를 기다리지 않고 바로 다음 작업으로 즉시 넘어가는 방식이므로 호출된 함수는 작업의 완료 여부와 상관없이 즉시 제어권을 호출한 함수에게 반환한다.
✏️ Single Thread
: 스레드 하나를 사용하며 동시에 하나의 작업만을 처리할 수 있다. Node.js는 싱글 스레드로 동작하지만 I/O 작업이 발생한 경우 이를 비동기적으로 처리하여 여러 작업을 동시에 처리할 수 있다.
싱글 스레드의 장점으로는 스레드 생성과 관리에 드는 부담 줄이기, 컴퓨팅 리소스를 효율적으로 사용하기, 여러 스레드가 공유하는 자원에 대한 동시 접근 문제(Race condition)를 방지 -> 서버 확장이 자유로움
But CPU 집중적인 작업에는 적합하지 않다.
✏️ 호출 스택(Call Stack)
: 함수의 실행 순서를 추적하는 자료 구조
✏️ Event Loop
: 비동기 작업들을 모아서 관리하고 어떤 순서대로 실행해야하는지 도와주는 도구
✏️ Package Manager
: 코드 조각인 패키지를 손쉽게 다루는 작업을 안전하고 편리하게 사용하기 위한 툴. npm과 yarn이 있는데 수업 중에는 yarn을 사용할 예정 (지난번 미니 프로젝트때 npm을 신나게 설치해서 혹시 충돌할까 걱정했는데 한 프로젝트 내에서 둘을 병행하면 충돌이 있을수 있다고 하는 것을 보면 이전에 설치해도 같이 사용하는 것이 아니면 괜찮은 것같다)
➕ export default Object
/** export default Object **/
// 모듈을 호출했을 때, add 키 값에는 add 함수가 들어가는 방법이다.
const defaultObject = {
add: add,
}
export default defaultObject;
➕ import default Object
/** import default Object, 모듈 전체 가져오기 **/
import * as math from './math.js'
console.log(math.default.add(13, 8));
// Print: 21
/** import default Object, 모듈 전체 가져오기 **/
import { default as defaultObject } from './math.js'
console.log(defaultObject.add(17, 2));
// Print: 19
netstat -ano | find <"원하는 포트">
taskkill /f /pid 0000
lsof -i :<"원하는 포트">
kill -9 <포트를 점유하는 PID>
아니면 killall이라는 명령어로 모든 Node.js 서버를 종료
killall node