☞ Node.js를 사용하는 이유
대표적인 javascript 런타임 node.js를 사용하면 자바스크립트 개발자가 웹 서버 개발까지 할 수 있다. 또한 node.js로 빠르게 웹 애플리케이션을 개발함으로써 유지보수 비용을 절감하고 개발 생산성도 향상된다!
Node.js를 사용하는 구체적인 이유 ---------------
1. 비동기 처리와 높은 성능
- 이벤트 기반, 논블로킹 I/O: Node.js는 이벤트 루프와 비동기 처리를 통해 요청을 병렬로 처리하므로, 대규모 트래픽을 효율적으로 처리할 수 있다.
- V8 엔진: Google의 V8 JavaScript 엔진을 사용하여 매우 빠른 실행 속도를 제공.
2. 단일 언어 (JavaScript) 사용
- 풀스택 개발 가능: 서버와 클라이언트 모두 JavaScript로 개발할 수 있어 개발 생산성이 높아진다.
- 코드 재사용: 클라이언트와 서버 간 코드 공유가 가능해 유지보수성과 일관성이 향상.
3. 확장성
- 모듈 기반 구조: Node.js는 모듈 시스템(NPM, https://www.npmjs.com/)을 통해 필요한 기능만 추가하여 확장할 수 있다.
- 마이크로서비스 아키텍처에 적합: 가벼운 스레드와 빠른 실행 속도로 확장 가능성이 높아 대규모 분산 시스템에 적합.
4. 실시간 애플리케이션에 강점
- 웹소켓 지원: Node.js는 실시간 데이터 전송이 필요한 채팅, 게임, 주식거래 플랫폼 등에 적합.
- 비동기 이벤트 처리: 사용자 요청이 많아도 지연 시간이 적다.
5. 풍부한 생태계
- NPM: 전 세계 개발자들이 만든 다양한 모듈과 패키지를 무료로 활용할 수 있다.
- 오픈소스 커뮤니티: 활발한 커뮤니티 덕분에 문제가 발생했을 때 빠르게 해결 가능하며, 꾸준히 발전하고 있다.
6. 간편한 배포와 유지보수
- 경량 서버: Node.js는 경량 서버 역할을 하기 때문에 설정과 배포가 간단하다.
- 자동화 도구: Gulp, Webpack과 같은 도구로 효율적인 개발 환경을 구축할 수 있다.
7. 크로스 플랫폼
- 멀티 플랫폼 지원: Node.js 애플리케이션은 Windows, macOS, Linux 등 다양한 운영 체제에서 실행 가능.
8. 대규모 트래픽 처리
- 고성능 서버: Node.js는 서버 자원을 효율적으로 사용하며, 많은 클라이언트 요청을 동시에 처리할 수 있다.
- 백프레셔(Backpressure): 데이터를 효율적으로 관리하며 서버 과부하를 방지.
사용 사례 :
1) RESTful API: 빠르고 경량화된 API 개발에 적합.
2) 실시간 애플리케이션: 채팅, 주식 거래, IoT 등.
3) 미들웨어 서버: 데이터베이스, 외부 API와의 통신 처리.
4) 파일 처리: 비동기식 파일 읽기/쓰기 작업에 강점.
nodejs 설치 : https://nodejs.org/en
설치 참조 : https://velog.io/@bi-sz/Node.js-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0
개념잡기 : https://kdydesign.github.io/2017/07/15/nodejs-npm-tutorial/
학습 도움 페이지 https://javafa.gitbooks.io/nodejs_server_basic/content/chapter2.html
*** node - 기본 동작 원리와 이벤트 루프 ***
Node.js는 자바스크립트 코드 실행뿐 아니라, 비동기 I/O를 효율적으로 처리하기 위해 libuv 기반의 이벤트 루프와 스레드 풀 구조를 활용한다. * 핵심 흐름 요약 1) JS 코드 실행 → 비동기 함수 호출 2) 콜백은 libuv가 처리 → OS에 위임 or Thread Pool 처리 3) 완료되면 콜백 큐로 이동 4) 이벤트 루프가 큐에서 꺼내서 실행 📌 참고 키워드 - libuv: Node의 비동기 핵심 엔진 (이벤트 루프 + 스레드풀 포함) - Event Loop: 논블로킹 구조의 중심 - Thread Pool: 비동기 지원 안 되는 작업을 대신 실행
| --- 그림 구성 요소별 설명 ---------------- 1. 상단 – 코드 실행 진입 구조 - 작성한 JS 코드 → Node 내장 라이브러리 사용 - 사용자가 작성한 JavaScript 코드는 Node.js에서 제공하는 API (파일, 네트워크 등)를 호출함. - V8 엔진 (Chrome의 JS 엔진) : 작성한 JS 코드를 바이트 코드로 실행. - Binding : JS 코드가 C/C++ 기반의 Node 내부 함수 (예: 파일 시스템)와 연결 구조.
2. Node 내부 구조 : JavaScript + Node Standard Library - Node Bindings: C/C++로 구현된 socket, fs 등 핵심 기능을 JS에 사용가능하게 바인딩. - Chrome V8: JS 코드 실행 - libuv 기반 구성 Async I/O와 Event Loop는 모두 libuv로 구현됨. libuv는 비동기 처리를 위한 핵심 라이브러리.
3. Call Stack / Memory Heap - JS 코드는 V8 엔진에서 실행되며 Call Stack과 Heap을 사용함. - Call Stack에 실행할 함수들이 올라가고, 비동기 함수는 콜백 등록만 하고 빠짐.
4. Event Loop (이벤트 루프) - libuv의 핵심 – 6단계 루프 구조로 동작. - Timer: setTimeout, setInterval 같은 콜백 실행 - Pending I/O Callbacks: 지연된 I/O 콜백 - Idle, Prepare: 내부 용도 - Poll: I/O 이벤트를 기다림, 이벤트 발생 시 콜백 큐에 삽입 - Check: setImmediate 콜백 실행 - Close: 종료 콜백 처리 (예: socket 종료 등)
5. UV IO 처리 – OS 의존 영역 - 비동기 처리를 OS 커널 수준에서 지원하는지에 따라 흐름이 달라짐. ⬅ 비동기 지원 O (Windows IOCP, Linux AIO 등) libuv가 OS API를 활용해 비동기로 처리 → 완료되면 콜백 큐에 등록 → 이벤트 루프에서 실행 ➡ 비동기 지원 X libuv 내부의 Thread Pool (T1~T4)에서 작업 처리 후 콜백 큐에 등록
이때, 동기적 처리처럼 보이지만 실제로는 별도 스레드에서 비동기로 처리됨 (즉, Node.js는 싱글 스레드로 보이지만, 백그라운드에서 멀티스레드가 사용됨) |
|
node 관련 참고 사이트 : http://cafe.naver.com/devnode.cafe
node 관련 동영상
https://www.youtube.com/watch?v=IiXoogbcvdw&list=PLwsSnOYjEpei9J0zWjwvSWCnHyqxuPLTW
http://nodetuts.com/
😎 Node.js는 비동기 이벤트 기반의 JavaScript 런타임으로, 빠르고 확장 가능한 네트워크 애플리케이션 개발에 널리 사용된다. 다양한 국내외 기업들이 Node.js를 활용하여 웹 애플리케이션, 실시간 서비스 등을 구축하고 있다.
국내 기업:
클라썸: 교육 플랫폼으로, Node.js를 활용하여 서비스를 운영하고 있다.
트렌비: 명품 쇼핑 플랫폼으로, Node.js를 사용하여 웹 서비스를 개발하고 있다.
토스랩: 협업 툴을 개발하며, Node.js를 활용하여 애플리케이션을 운영하고 있다.
핀다: 금융 서비스 플랫폼으로, Node.js를 기반으로 서비스를 제공.
직방: 부동산 정보 플랫폼으로, Node.js를 사용하여 웹 서비스를 운영하고 있다.
식스샵: 온라인 쇼핑몰 제작 플랫폼으로, Node.js를 기반으로 서비스를 제공.
숨고: 전문가 매칭 플랫폼으로, Node.js를 활용하여 애플리케이션을 운영하고 있다.
디셈버앤컴퍼니: 금융 기술 기업으로, Node.js를 기반으로 서비스를 제공.
당근마켓: 지역 기반 중고 거래 플랫폼으로, Node.js를 활용하여 애플리케이션을 운영하고 있다.
버킷플레이스: 인테리어 플랫폼 '오늘의집'을 운영하며, Node.js를 활용하여 웹 서비스를 제공.
해외 기업:
넷플릭스 (Netflix): 스트리밍 서비스의 서버 측에서 Node.js를 활용하여 빠른 콘텐츠 제공을 구현.
링크드인 (LinkedIn): 모바일 서버를 Node.js로 전환하여 성능 향상과 서버 수 감소를 이루었다.
페이팔 (PayPal): 웹 애플리케이션의 서버 측을 Node.js로 구축하여 개발 속도와 성능을 개선하였다.
트위터 (Twitter): 일부 서비스를 Node.js로 개발하여 실시간 기능을 강화하였다.
이베이 (eBay): 실시간 애플리케이션을 Node.js로 구축하여 사용자 경험을 향상시켰다.
레딧 (Reddit): 웹 서버의 일부를 Node.js로 전환하여 성능을 개선하였다.
이처럼 다양한 기업들이 Node.js의 비동기 처리와 높은 확장성을 활용하여 효율적인 서비스를 제공하고 있다.