제로부터 쌓는 개발일지
article thumbnail
반응형

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는 이런 경우를 위해 추가적인 기능도 제공
반응형
profile

제로부터 쌓는 개발일지

@PachyuChepe

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...