일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 클래스
- jvm이란
- 객체
- ANR이란
- 안드로이드 라이선스
- rxjava hot observable
- 서비스 vs 쓰레드
- 자바 다형성
- jvm 작동 원리
- 안드로이드 유닛 테스트
- 안드로이드 라이선스 종류
- android ar 개발
- ar vr 차이
- 안드로이드 레트로핏 crud
- 스택 큐 차이
- Rxjava Observable
- 2022 플러터 설치
- 플러터 설치 2022
- 안드로이드 유닛 테스트 예시
- 서비스 쓰레드 차이
- android retrofit login
- 안드로이드 os 구조
- 큐 자바 코드
- 2022 플러터 안드로이드 스튜디오
- 안드로이드 유닛테스트란
- 안드로이드 레트로핏 사용법
- 멤버변수
- rxjava disposable
- 스택 자바 코드
- rxjava cold observable
- Today
- Total
나만을 위한 블로그
Node.js란? 본문
웹 서버를 구축하는 방법을 찾다보면 흔하게 나오는 키워드가 Node.js다.
이번 포스팅에선 Node.js가 무엇인지와 특징에 대해 정리하려고 한다.
먼저 Node.js란 Node와 js란 글자가 섞여 있다. 이 두 단어의 사전적 의미부터 확인해보자.
node : (나무줄기의) 마디 / (뿌리, 가지의) 옹이 / (연결망의) 교점[접속점]
js : 자바스크립트(JavaScript)
자바스크립트가 들어갔으니 언어 베이스는 자바스크립트일 것 같다. 그럼 문제는 node가 왜 붙었느냐다.
두 단어를 이어붙이면 Node.js가 무슨 뜻인지 짐작이 안되니 위키백과를 확인해봤다.
Node.js는 Chrome V8 엔진에서 실행되며 웹 브라우저 외부에서 자바스크립트 코드를 실행하는 오픈소스 크로스 플랫폼 백엔드 자바스크립트 런타임 환경이다. Node.js를 쓰면 개발자는 자바스크립트를 사용해서 명령줄 도구를 작성하고 서버측 스크립팅을 실행하여 페이지를 사용자의 웹 브라우저로 보내기 전에, 동적 웹 페이지 컨텐츠를 생성할 수 있다. 따라서 Node.js는 서버측 스크립트와 클라이언트측 스크립트의 언어가 아닌 단일 프로그래밍 언어를 중심으로 웹 어플리케이션 개발을 통합하는 "JavaScript Everywhere" 패러다임을 나타낸다.
.js는 자바스크립트 코드의 표준 파일명 확장자지만 Node.js라는 이름은 이 문맥의 특정 파일을 참조하지 않으며 제품의 이름일 뿐이다.
Node.js에는 비동기 I/O를 쓸 수 있는 이벤트 기반 아키텍처가 있다. 이런 설계 선택은 실시간 웹 어플리케이션(실시간 통신 프로그램 및 브라우저 게임)뿐만 아니라 입출력 작업이 많은 웹 어플리케이션의 처리량과 확장성을 최적화하는 걸 목표로 한다.
Node.js는 그냥 붙여진 이름이었다. 중요한 건 Node.js는 프로그래밍 언어가 아니라 자바스크립트로 구성된 런타임 환경이라는 것이다.
런타임 환경이란 뭘까? 런타임은 프로그램이 실행되고 있는 때를 말한다. 이 단어에 환경이 붙었으니 프로그램이 실행되는 환경이라고 생각하면 될 것이다.
그럼 백엔드 자바스크립트 런타임 환경이라면 백엔드에서 자바스크립트로 짜여진 프로그램이 작동하는 환경이지 않을까 생각했다.
추가로 오픈소스라고 하는 걸 보니 일단 무료로 쓸 수 있고, 크로스 플랫폼이라고 하니 여러 웹 브라우저에서도 똑같이 작동하는 것 같다.
정리하면 Node.js는 무료로 사용 가능하고 여러 웹 브라우저에서도 똑같이 작동하는, 자바스크립트로 짜여진 프로그램이 작동하는 환경이라고 말할 수 있겠다.
근데 이 Node.js는 왜 만들어진 걸까? 영문 위키백과의 역사 부분을 확인해봤다.
Node.js는 최초의 서버측 자바스크립트 환경인 넷스케이프의 LiveWire Pro Web이 도입된지 13년 후인 2009년에 Ryan Dahl에 의해 처음 만들어졌다. 초기엔 리눅스 및 Mac OS X만 지원했다.
Dahl은 2009년에 가장 인기있는 서버였던 Apache HTTP Server가 많은 동시 연결(최대 10,000개 이상)을 처리할 수 있는 제한된 가능성과 코드 생성(순차 프로그래밍)의 가장 일반적인 방법(동시 연결 시 여러 실행 스택을 암시)을 비판했다. Dahl은 2009년 11월 8일 유럽 JSConf에서 이 프로젝트를 시연했다.
Node.js는 구글의 V8 자바스크립트 엔진, 이벤트 루프 및 Low Level I/O API를 결합했다. 2010년 1월 npm이란 Node.js 환경을 위한 패키지 관리자가 도입됐다. 패키지 관리자는 개발자가 Node.js 패키지의 소스코드를 더 쉽게 게시, 공유할 수 있도록 하고 패키지의 설치, 업데이트, 제거를 단순화하도록 설계됐다...(중략)
2009년 당시 인기있던 서버가 아파치 HTTP 서버였는데 이것이 동시 접속 관련 단점이 있어서 이를 Ryan이란 사람이 비판하며 만든 게 Node.js인 듯하다.
그리고 npm이란 것을 통해 개발자들이 Node.js의 소스코드를 쉽게 설치/업데이트/제거할 수 있게 했다.
그럼 Node.js를 사용하려면 무조건 자바스크립트 하나만 써야 할까? 위키백과에 이와 관련된 내용이 써 있다.
자바스크립트는 Node.js가 기본 지원하는 유일한 언어지만 많은 compile-to-JS 언어를 쓸 수 있다. CoffeeScript, Dard, TypeScript, ClojureScript 등으로 작성할 수 있다.
Node.js는 왜 사용되는 걸까? 무슨 장점이 있어서 Node.js를 쓰는 것인지 찾아봤다.
https://www.section.io/engineering-education/why-node-js-is-popular/
- 배우기 쉽다 : Node.js는 자바스크립트를 쓰기 때문에 자바스크립트만 안다면 접근성이 낮다.
- 확장성이 좋다 : Node.js는 필요한 모든 걸 한번에 제공하지 않는다. 대신 필요한 걸 사용자 정의하거나 추가할 수 있어 불필요한 라이브러리가 생길 확률이 줄어든다. 이걸 가능하게 하는 게 npm이다.
- 모바일 친화적, 크로스 플랫폼, 개발 친화적이다 : 리눅스, 윈도우, 맥을 비롯한 모든 플랫폼에서 원활하게 실행되는 유연한 어플리케이션을 구축할 수 있다. 그래서 개발자들이 서로 다른 플랫폼에서 실행되는 앱을 만들 수 있다.
- 가볍고 빠르다 : Node.js는 C++에 내장된 구글의 V8 자바스크립트 엔진을 쓴다. 이 엔진은 크롬 프로젝트에 의해 크롬과 크롬 브라우저를 위해 개발된 것으로 메모리 할당, 컴파일, 자바스크립트를 처리하고 JIT(Just In Time) 컴파일러를 써서 자바스크립트를 기계어로 컴파일한다.
- 여러 호스팅 공급자를 사용할 수 있다 : Heroku, AWS, DigitalOcean 등의 클라우드 기반 호스팅 공급자를 사용할 수 있다.
- 캐싱 : 캐시는 향후 요청을 위한 데이터 저장소인데 Node.js는 단일 모듈을 캐싱할 수 있는 기능을 제공한다. 모듈과 관련된 요청이 발생하면 기본 서버 대신 캐시에서 가져온다. 따라서 앱이 더 빨리 로드되고 응답도 더 빨라진다.
'개인 공부' 카테고리의 다른 글
[Android] Rxjava란? (0) | 2021.01.23 |
---|---|
Data Binding(데이터 바인딩)이란? 제트팩(Jetpack) 라이브러리란? (0) | 2021.01.09 |
NoSQL이란? SQL이란? 둘의 차이는 무엇인가? (0) | 2020.12.03 |
HTTP와 HTTPS의 차이란? (0) | 2020.11.18 |
프레임워크와 라이브러리의 차이점 (0) | 2020.11.14 |