티스토리 뷰
Node.js는 서버 측 애플리케이션 개발을 위해 설계된 JavaScript 런타임 환경입니다. 이를 통해 JavaScript를 클라이언트뿐만 아니라 서버에서도 사용할 수 있습니다. Node.js는 Google의 V8 JavaScript 엔진 위에서 동작하며, 빠르고 효율적인 비동기 프로그래밍을 지원합니다.
1. 비동기 I/O와 이벤트 기반 아키텍처
- 비동기 I/O(Asynchronous I/O)
- 파일 읽기/쓰기, 데이터베이스 쿼리, 네트워크 요청 등의 작업을 비동기로 처리하여, 실행이 블로킹되지 않습니다.
- 콜백 함수나 Promise와 async/await를 사용해 비동기 작업을 제어합니다. (비동기가 기본, 동기화가 필요한 경우 사용하는 방법입니다)
- 이벤트 기반(Event-Driven)
- 모든 요청은 이벤트 루프(Event Loop)를 통해 처리됩니다.
- 이벤트 기반 설계로 고성능을 유지하면서도 확장 가능.
2. 단일 스레드 환경
- Single-Threaded
- Node.js는 단일 스레드에서 실행되지만, 내부적으로 이벤트 루프와 libuv 라이브러리를 활용해 멀티스레드 작업(파일 시스템, 네트워크 요청 등)을 처리합니다.
- 장점
- 컨텍스트 전환이 적어 성능이 높음. (스레드 전환이 필요없음. 모든 작업이 하나의 스레드에서 처리됨)
- 동시에 많은 요청을 효율적으로 처리 가능.
- 단점
- CPU 집약적인 작업(복잡한 계산 등)에는 적합하지 않음.
- 이런 작업은 워커 스레드(Worker Threads)나 클러스터링(Clustering)으로 해결.
3. V8 엔진 기반
- Google의 V8 JavaScript 엔진을 기반으로 작동합니다.
- JavaScript를 고속으로 실행하며, C++로 작성되어 빠른 성능을 제공합니다.
- Just-In-Time (JIT) 컴파일러를 사용해 JavaScript 코드를 네이티브 머신 코드로 변환.
4. 크로스 플랫폼
- 다양한 운영 체제(Windows, macOS, Linux)에서 실행 가능.
- JavaScript를 사용하는 클라이언트와 서버 간에 코드 공유 가능.
5. 풍부한 모듈과 NPM 생태계
- Node Package Manager (NPM)
- 세계에서 가장 큰 오픈 소스 패키지 레지스트리.
- 다양한 라이브러리와 도구를 쉽게 설치 및 관리 가능.
- 예: Express.js (웹 프레임워크), Lodash (유틸리티 라이브러리)
6. 비동기 스트림 처리
- *스트림(Stream)을 활용해 데이터를 조각으로 처리. (*작은 조각(chunk)로 처리하는 Node.js의 기본 인터페이스)
- 파일 읽기/쓰기, HTTP 요청/응답, 네트워크 소켓 등.
- 스트림 기반 처리로 대규모 데이터를 효율적으로 처리 가능.
7. 확장성과 경량성
- 확장성(Scalability)
- 비동기 I/O와 이벤트 루프 덕분에 수천 개의 동시 연결을 처리 가능.
- 클러스터링(Clustering)을 통해 멀티코어 프로세서 활용 가능.
- 경량성(Lightweight)
- 필요한 기능만 추가하는 모듈 기반 설계.
8. JSON과의 높은 호환성
- JavaScript 객체를 JSON으로 쉽게 변환 가능.
- REST API와 같은 데이터 교환 형식에 매우 적합.
9. 커뮤니티와 생태계
- 대규모 커뮤니티와 활발한 오픈 소스 기여.
- 최신 트렌드와 요구사항을 반영한 다양한 라이브러리 제공.
10. 주요 사용 사례
- 실시간 애플리케이션: 채팅 애플리케이션, 실시간 알림.
- API 서버: RESTful API 및 GraphQL 서버.
- 스트리밍 애플리케이션: 음악, 동영상 스트리밍 서비스.
- 마이크로서비스: 독립적이고 경량화된 서비스 구축.
- IoT 애플리케이션: 센서 및 장치 간 실시간 통신.
Node.js의 장점
- 빠른 실행 속도 (V8 엔진 기반).
- 비동기 처리로 높은 성능.
- NPM으로 다양한 라이브러리와 도구 사용 가능.
- 클라이언트-서버 모두 JavaScript로 개발 가능.
- 이벤트 기반 설계로 실시간 애플리케이션에 적합.
Node.js의 단점
- CPU 집약적인 작업에서 성능 저하.
- 단일 스레드 모델의 특성상 잘못 작성된 코드가 전체 애플리케이션에 영향을 미칠 수 있음.
- 콜백 지옥(Callback Hell) 가능성(비동기 코드를 적절히 관리하지 않으면).
- 안정성이 낮은 오픈 소스 패키지에 의존할 위험.
'학습 > 용어집' 카테고리의 다른 글
데이터베이스 (0) | 2025.01.22 |
---|---|
프런트엔드 프레임워크(Front-end Framework) (0) | 2025.01.21 |
libuv 라이브러리(Node.js) (0) | 2025.01.19 |
클라우드 컴퓨팅(Cloud Computing) (1) | 2025.01.16 |
DevOps (0) | 2025.01.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- Remix
- Cloud
- nosql
- Azure
- PostgreSQL
- Next.js
- alpine.js
- Quasar
- 이진탐색 #중복
- node.js
- RDBMS
- aws
- gcp
- DevOps
- nuxt.js
- vue.js
- MySQL
- svelte
- Gatsby.js
- SQLite
- Angular
- oracle
- vue
- REACT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
글 보관함