11월 8일 공부일지
오늘 공부에 투자한 순수한 시간: 1시간 30분
학습한 개념 Node.js 역사
1. 탄생 배경(2009)
2009년 Ryan dahl이 만들었다.
당시 주류였던 apache 같은 서버는 요청 하나당 스레드 하나를 배정했다.
동시 접속이 많아지면 메모리가 빠르게 소진됨.
dahl은 파일 업로드 진행률을 표시하는 기능을 만들다가 이 문제를 크게 느꼈다고 알려졌다. 서버가 업로드가 얼마나 진행 됐는지 알려면 다른 요청을 막지 않고 응답할 수 있어야 했기 때문이다.
꼬리질문 apache방식
쉽게 비유하면 식당직원, 손님 한명당 직원 한명이 전담으로 배정.
직원은 주문을 주방에 넣고 음식이 나올 때까지 주방 앞에서 기다린다.
그동안 다른 손님은 받지 못한다.
손님이 100명오면 직원도 100명이 필요하고 월급(메모리)나간다.
문제: 직원 대부분이 일하는게 아니라 기다리는 데 시간을 쓴다. 손님이 몰리면 직원을 감당할 수 없다.
Node.js 방식 : 직원 한 명이 전체를 처리
직원 한 명이 주문을 받아 주방에 넣고, 기다리지 않고 바로 다음손님에게 간다.
음식이 완성되면 주방에서 벨이 울린다. 직원은 벨소리를 듣고 그 음식을 해당 손님에게 준다.
실제 용어로 연결하면
손님 - 요청
직원-스레드
주방에서 음식만드는 시간 - I/O작업(디비조회, 파일읽기등)
주방 앞에서 기다림 - 블로킹
기다리지 않고 다음 일 하기- 논블로킹
벨소리 - 콜백
벨소리를 계속 확인하며 일을 돌리는 구조 - 이벤트루프
Ryan Dahl은 직원들이 주방 앞에서 멍하니 기다리는게 낭비다 라고 보고 기다리지 않는 직원 한명 방식으로 node.js를 반들었다.
약점 : 직원이 직접 오래 붙잡고 해야하는일 (복잡한 계산 등)이 생기면 그동안 다른 손님 전체가 멈춘다. 그래서 node.js는 기다림이 많은 작업(웹서버, 채팅, API)에 강하고 계산이 많은 작업에는 약하다.
2. 왜 JavaScript인가
- 2008년 구글이 크롬용으로 v8엔진을 공개 했는데, 매우 빠르게 실행했다
-JavaScript는 브라우저에서 원래 이벤트와 콜백 중심으로 쓰이던 언어라, 논블로킹 모델과 잘 맞았다.
-서버 쪽에 기존 블로킹 라이브러리 생태계가 없어서, 처음부터 논블로킹으로 설계할 수 있었다.
결국 Node.js는 V8엔진+이벤트 루프+시스템 접근 API 합친것이다.
3. Node.js 이름의 유래
- 처음 이름은 web.js 라고 불렀다. 웹 서버를 빠르게 만드는 것이 원래 목적이었기때문.
node로 바꾼 이유는 개발을 진행하면서 이 도구가 웹 서버보다 더 넓은 용도에 쓰일 수 있다는걸 알게 됐다. 각종 네트워크 프로그램 처럼 I/O다루는 프로그램 전반에 적용이 가능했다. web이라는 이름이 범위를 너무 좁게 잡는다고 판단 했다.
- node는 네트워크 용어에서 연결망을 이루는 하나의 점을 뜻한다.
Dahl이 의도한 그림은 다음과 같다.
거대한 프로그램 하나를 만드는 대신, 작은 프로그램 여러개가 네트워크로 서로 통신하며 큰 시스템을 이룬다.
각 node.js 프로세스를 분산 시스템의 한 노드로 본것. 오늘 날의 마이크로서비스 구조와 비슷한 발상이다.
- js
javascript로 작성하고 실행한다는 뜻의 표기이다. jQuery.js처럼 JavaScript 프로젝트 이름 끝에 .js를 붙이는 관행을 따랐다.
정리: web.js-> Node.js개명은 이 도구의 정체성이 웹서버 도구에서 네트워크 프로그램 실행 환경으로 넓어졌다.
3. 꼬리질문 I/O란?
input/output (입력/출력)
프로그램이 자기 바깥에 있는 무언가와 데이터를 주고 받는 작업
4.npm이란?
Node Package Manager (2010년등장)
node.js용 코드 부품(패키지)을 내려받고 관리하는 도구 이다.
쉽게 비유하면 앱스토어
스마트폰에 필요한 기능이 있으면 앱스토어에서 앱을 설치한다.
node.js로 개발할 때 필요한 기능이 있으면 npm에서 패키지를 설치한다.
예를 들어서 날짜계산, 웹서버 만들기, 비밀번호 암호화 같은 기능을 직접 다 짜지는 않는다. 다른 사람이 만들어 공개한 패키지를 가져다쓴다.
npm저장소 전 세계 개발자가 패키지를 올려두는 온라인 창고 (앱스토어 서버)
npm명령어 내 컴퓨터에서 패키지를 설치, 관리하는 프로그램 (앱스토업 앱)
현재는 세계에서 가장 큰 소프트웨어 패키지 저장소.
AI 대화 내역 링크https://claude.ai/share/3eb6e466-919a-4ac9-aef0-b42ebcc90a00
(링크 생성 방법)
오늘 잘한 점: 최대한 밀린부분 하려고 노력했습니다ㅠㅠ
오늘 부족했던 점: 시간이 부족했다.
오늘 총평: 현실적인 상황이 할애할수 있는 시간이 적었다 ㅠㅠ 오늘은 익숙했던 용어, npm node.js등에대해 공부했다. 좀 익숙했어서 금방 이해할 수 있었다.
여기에 파일을 드롭하세요
