반응형
JavaScript 이전의 웹 생태계
- 초기 웹 생태계에서 웹 페이지는 대부분 HTML과 CSS로 구성 됨
- 그 당시 CSS는 현재보다 기능이 제한적이었고, 주로 텍스트 꾸미기와 간격 조정 정도에 사용
- HTML은 순수한 마크업 언어로서, 하이퍼텍스트를 이용한 문서 간의 연결을 제공하는 데 주로 사용
JavaScript의 탄생
- 웹 페이지를 보다 동적으로 만들기 위해 탄생
- 초기엔 NetScape 브라우저에서 간단한 상호작용 기능을 제공하기 위해 개발
- 이 시점에서 JavaScript는 NetScape에서 만든 독자적인 언어였고, 다른 브라우저 제작사들도 자신들의 브라우저에서 사용할 수 있는 비슷한 언어들을 개발하기 시작
정적 페이지와 동적 페이지
- 정적 웹 페이지(Static Web Page): 미리 작성되어 변하지 않는 페이지
HTML로만 작성이 가능하며, JavaScript의 필요성이 거의 없음 - 동적 웹 페이지(Dynamic Web Page): 사용자의 상황이나 맥락을 반영할 수 있는 페이지
로그인 한 사용자의 프로필 사진이 변경되는 경우와 같이 동적으로 콘텐츠가 변화
JavaScript의 표준화
- 브라우저 제작사들이 각각 다른 방식으로 JavaScript를 개발함에 따라 호환성 문제가 발생
- 문제를 해결하기 위해 Ecma International이 ECMAScript(ECMA-262)라는 이름으로 JavaScript의 표준을 제정
JavaScript의 명명과 Java와의 관계
- JavaScript라는 이름은 당시 인기 있던 Java 언어의 명성에 편승하기 위해 선택되었고, JavaScript와 Java 사이에는 직접적인 관계가 없음
Ex. 인도와 인도네시아는 아무런 관계가 없음
Node.js의 개요
- 기본 정의: Node.js는 Chrome의 V8 JavaScript 엔진을 기반으로 구축된 JavaScript 런타임
Node.js는 JavaScript를 브라우저 외부의 환경에서 실행할 수 있게 해줌 - 기술 구성: Node.js의 핵심은 V8 엔진과 libuv 라이브러리
V8 엔진은 JavaScript 코드를 빠르게 실행할 수 있도록 최적화되어 있으며, libuv는 비동기 I/O 작업을 가능하게 함 - npm: Node.js의 패키지 관리자인 npm은 세계에서 가장 큰 오픈 소스 라이브러리 생태계
Node.js의 특징
논 블로킹 I/O 모델
- 정의: Node.js는 논 블로킹 I/O 모델을 사용
I/O 작업(파일 읽기/쓰기, 네트워크 요청 등)이 다른 처리 과정을 차단하지 않고 병렬적으로 진행될 수 있음을 의미 - 블로킹 vs 논블로킹: 블로킹 I/O에서는 하나의 작업이 완료될 때까지 다음 작업이 대기해야함
논 블로킹I/O에서는 한 작업이 완료되기를 기다리는 동안 다른 작업을 진행할 수 있어 효율성이 높아짐
싱글 스레드 모델
- 정의: Node.js는 싱글 스레드로 동작
한 번에 하나의 작업만 처리 - 이점: 싱글 스레드 모델은 멀티 스레드 모델에 비해 스레드 관리의 복잡성과 리소스 사용량을 줄여줌
- 비동기 처리: 싱글 스레드이지만, 비동기 작업을 통해서 여러 요청을 효과적으로 처리할 수 있음
이벤트 루프와 비동기 프로그래밍
- 이벤트 루프: Node.js에서 이벤트 루프는 비동기 작업(Ex. 파일 읽기, 네트워크 요청)을 관리
- 호출 스택과 이벤트 큐: 호출 스택은 함수의 실행을 추적하며, 이벤트 큐는 비동기 작업을 관리
이벤트 루프는 호출 스택이 비어 있을때 이벤트 큐에 있는 작업을 호출 스택으로 이동시킴
Node.js의 실용적 예
- 싱글 스레드와 비동기 처리의 예
더보기
// setTimeout은 이벤트 루프를 통해 관리되며, 지정된 시간 후에 콜백 함수가 실행
function firstFunction() {
console.log('firstFunction 입니다.');
secondFunction();
}
function secondFunction() {
// 2 초간 기다린다.
setTimeout(function () {
console.log('secondFunction 입니다.');
}, 2000);
}
firstFunction();
console.log('전역 코드 실행 중!');
// print: firstFunction 입니다.
// print: 전역 코드 실행 중!
/** 2 초간 기다린다. **/
// print: secondFunction 입니다.
- 웹 서버 개발: Node.js는 싱글 스레드와 논 블로킹 I/O 모델을 활용하여, 웹 서버 개발에 매우 적합
동시에 다수의 네트워크 요청을 효율적으로 처리할 수 있게 해줌
이러한 특징들 덕분에 실시간 웹 애플리케이션, 데이터 집약적 및 I/O 집약적 작업에 매우 적합한 환경을 제공하지만 CPU 집중적인 작업에는 다른 접근 방식이 더 적합할 수 있으며, Node.js는 이런 경우를 위해 추가적인 기능도 제공
반응형
'backend > Node.js' 카테고리의 다른 글
| [Node.JS 입문 리뉴얼] Package Manager (0) | 2023.11.29 |
|---|---|
| [Node.JS 입문 리뉴얼] 개발 환경 설정 (0) | 2023.11.29 |
| [Node.JS 입문 리뉴얼] 웹과 HTTP의 동작 방식 (0) | 2023.11.29 |
| [Node.JS] AWS EC2 HTTPS 배포 (0) | 2023.11.16 |
| [Node.JS] 로컬 환경 RDS 연결 정리 (0) | 2023.11.15 |
